Repository navigation
Knowledge: report layouts and dataset contract, query join and grouping defaults - #230
Conversation
…ng defaults Reporting (Microsoft layer, al-reporting-review): - declare report layouts in the rendering section, not with the legacy DefaultLayout/RDLCLayout/WordLayout/ExcelLayout properties - a layout added in a report extension is not used until it is selected - do not rename or remove columns of a released report dataset Query (Microsoft layer, al-query-review): - a lower data item without SqlJoinType is a LeftOuterJoin - every non-aggregated column of a totals query is a group key Wire each article into its leaf review skill. Register the code-detectable paired articles in the review-fixtures overrides; add narrow coverage waivers for the two reporting articles whose defect depends on release history or intent and cannot be shown by a neutralized sample. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jesper Schulz-Wedde (JesperSchulz)
left a comment
There was a problem hiding this comment.
Reviewed 85932898420da11b0c6992fe21371948818b2d1a. Two merge-critical fixture issues remain:
query-dataitems-default-to-left-outer-join.bad.al:18places DataItemTableFilterDocument Type = Orderon Sales Header. The documented SQL WHERE restriction rejects unmatched/null child rows, so the implicit LeftOuterJoin already excludes customers without matching orders. Adding InnerJoin produces the same rows in the supplied scenario; it does not fix the claimed defect. An independent relational reproduction with no documents, quotes, released orders and open orders returned identical rows. Make the positive fixture demonstrate surviving unmatched rows, and recognize null-rejecting child filters as a valid alternative in article/routing and a clean control. This was checked against documented filter semantics, not claimed as a live BC runtime test.- The good object names
Customers With Open Orders GoodandOpen Orders By Salesperson Goodare each 31 characters, exceeding AL's 30-character limit (AL0305). Neutralization also grows their corresponding Bad names to 31 characters, so all four prepared inputs remain invalid. Shorten both pairs and update query references, checking the names after neutralization too.
Exact-head frontmatter, index/retrieval, skill/schema and contract checks passed in the isolated review harness; the actual 18-path gate prepared 258 cases, with the declared reporting waivers retained. Those checks are structural and do not compile AL or prove the positive case's semantic defect.
Make the positive join fixture retain and miscount unmatched rows. Recognize null-rejecting child filters as a valid alternative in guidance, routing and the clean control. Shorten query/report names and update query references, including neutralized names. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Addressed both blockers from Jesper Schulz-Wedde (@JesperSchulz)'s review in commit 9a76407.
Validation passed:
The relational reproduction is not a live BC runtime test. No AL compilation/runtime execution or model-score result is claimed. |
Jesper Schulz-Wedde (JesperSchulz)
left a comment
There was a problem hiding this comment.
Reviewed 9a7640744c252b18b9b30b2f8de8a2c30854eb3f. Both prior blockers are resolved. The positive query now actually preserves unmatched customers and its consumer incorrectly counts those rows as sales documents; the good pair uses InnerJoin and separately preserves the null-rejecting filtered outer join as a clean control. Article/routing require a wrong effective result rather than flagging the omitted property or a name alone. The renamed query/report objects and updated references remain within AL's 30-character limit before and after neutralization. Exact-head actual-changed-path fixture preparation, contract, skill/schema, index/retrieval and frontmatter checks pass; the relational boundary probe agrees with the intended positive/clean distinction. No remaining merge-critical issue found. The substantive GitHub workflows still await permission to run before merge.
01715ec
into
microsoft:main
Why
The
reporting(9) andquery(4) domains are among the thinnest in the corpus. Report layout declaration and the report dataset/layout contract had only incidental mentions. Two query defaults that differ from what SQL-trained models assume (the implicit join type and the implicit GROUP BY) had no coverage. These mistakes compile cleanly and analyzers do not catch them.What
Five Microsoft-layer articles with good/bad samples and Microsoft Learn references.
declare-report-layouts-in-the-rendering-sectionDefaultLayout/RDLCLayout/WordLayout/ExcelLayout. Learn says these are to be avoided and will be deprecated, and reading them loads the full layout.[20..]reportextension-layouts-are-not-selected-automaticallyreportextensionis assumed to replace the base layout.DefaultRenderingLayoutcannot be set on a report extension, and the layout must be selected.[20..]do-not-rename-or-remove-shipped-report-dataset-columnsquery-dataitems-default-to-left-outer-joinSqlJoinTypegivesLeftOuterJoin, so unmatched upper rows (with blank lower columns) end up in "X with Y" queries.every-non-aggregated-query-column-is-a-group-keyAverageuses integer division.Each article lists false-positive carve-outs: unchanged legacy declarations, optional layouts, changed source expressions with the same column name, explicit or intended left joins.
Wiring
al-reporting-reviewandal-query-review: tokens plus one targeted cue per article. The column-rename cue requires comparison evidence, because a folder snapshot cannot show a rename.evaluation/review-fixtures.json: the three code-detectable articles are added to thequery/reportingoverrides. Two narrowcoverageWaiverscover the reporting articles whose defect depends on release history (column rename) or intent (layout expected to become default). Once comments are removed, those samples cannot show the defect.Points to confirm
declare-report-layouts-in-the-rendering-section: I know of no compiler or analyzer diagnostic for the legacy layout properties, only the "Convert to 'Rendering'" code action. If a deterministic rule exists, this article should be dropped under the admission test.Validation
tools/Test-ReviewFixtures.ps1(including-ChangedPathsFileand-PrepareDirectory): PASSEDtools/Test-ReviewContract.ps1,.github/scripts/Test-SkillIndex.ps1,.github/scripts/Test-KnowledgeIndex.ps1: PASSEDvalidate_frontmatter.pywas not run locally (no Python on this machine); CI will confirm.Independent of #228 and #229.