Skip to content

chore(docs): retire the knowledge audit docs in favour of tracked issues - #165

Merged
dynamics365ninja merged 1 commit into
mainfrom
chore/retire-knowledge-audit-docs
Aug 6, 2026
Merged

chore(docs): retire the knowledge audit docs in favour of tracked issues#165
dynamics365ninja merged 1 commit into
mainfrom
chore/retire-knowledge-audit-docs

Conversation

@dynamics365ninja

Copy link
Copy Markdown
Owner

Removes docs/KNOWLEDGE_AUDIT.md and docs/KNOWLEDGE_AUDIT_PLAN.md.

The audit was a snapshot of two competencies — the D365FO/X++ knowledge this repo ships, and whether the objects it generates are valid against Microsoft.Dynamics.AX.Metadata — plus a phased plan to close what it found. Phases 0–3 are closed. Phase 4 closed everything but the runtime tier: the catalog replays in CI, eval verify-build compiles all 51 goldens with xppc on a real installation with zero unattributed diagnostics, and eval/COVERAGE.md reports K ∧ E ∧ T per family.

What remains is a handful of independent work items. They are better tracked as issues than as two long documents that go stale between edits — the plan already carried one stale line claiming eight red eval cases that b3d39cc had cleared.

Each issue carries the audit context it needs, so nothing is lost with the files:

Issue Was
#160 plan §4.3 — L4 runtime oracle (SysTest), the one item marked ❌
#161 finding G4 + R6, plan §2.3 (◐) — grounding gate still on 3 of 29 commands; property-honesty reconciliation
#162 plan §2.2 ("mostly") — duty/role depth, policy groups, extension payloads, entity relations / computed columns / staging
#163 plan §1.4 + finding G9 — per-family offline shape check; probably already subsumed by the contract rules, never confirmed
#164 §7 R3/R5 (+ G7) — RDL precision design, deliberately deferred; formCloner, field control types, mined-usage cross-check

No code changes. Nothing else in the repository linked to either document — the only references were the two docs pointing at each other.

🤖 Generated with Claude Code

The audit and its implementation plan have served their purpose: Phases 0
through 3 are closed, and Phase 4 closed everything except the runtime
tier. What is left is a handful of independent work items, which are
better tracked as issues than as two long documents that go stale between
edits — the plan already carried one stale line claiming eight red eval
cases that b3d39cc had cleared.

The remaining items, with the audit context they need, now live in
#160 (L4 runtime oracle), #161 (grounding gate on every generate command,
property-honesty reconciliation), #162 (security and data-entity depth),
#163 (confirm or close the per-family offline shape check) and #164 (RDL
precision design and the form engine extras from the predecessor).

Nothing else in the repository linked to either document.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dynamics365ninja
dynamics365ninja merged commit bbbb232 into main Aug 6, 2026
3 of 6 checks passed
@dynamics365ninja
dynamics365ninja deleted the chore/retire-knowledge-audit-docs branch August 7, 2026 05:18
jackyclever pushed a commit to jackyclever/d365fo-cli that referenced this pull request Aug 7, 2026
…ynamics365ninja#164)

The `eval` CI job has been red since dynamics365ninja#167 merged: `eval coverage --check`
reported COVERAGE_DRIFT because dynamics365ninja#167 added the `form-clone` capability
without regenerating eval/COVERAGE.md. (dynamics365ninja#165's red build-test and
knowledge-audit were an Actions outage — "Failed to resolve action
download info" — not code, and are already green on main.)

Writing the missing eval case surfaced a real defect in the capability
the stale row was hiding. `--rebind` renamed the datasource and repointed
the control-level <DataSource> nodes, but left the design's own
<DataSource> and <TitleDataSource> naming the datasource the clone no
longer has — a form that compiles and fails at runtime. The cause is that
those two are first-level children of <Design>, so they are written as
<DataSource xmlns="">, and the pattern was anchored on the bare
"<DataSource>"; the control-level ones nest under <Controls xmlns="">,
inherit the namespace, appear bare, and so were the only ones matched.
<JoinSource> was not handled at all, so a joined datasource kept pointing
at its parent's old name.

The element list is grounded on the live installation rather than guessed:
across 300 shipped ApplicationSuite forms, DataSource, TitleDataSource,
WorkflowDataSource, PresenceDataSource and JoinSource are the only
elements whose value is a datasource name — the rest of the *DataSource*
family is either a container or holds something else (
DataSourceChangeGroupMode is an enum, DataSourceRelation names a
relation). Matching now tolerates attributes and backreferences the
closing tag, so it cannot bleed from DataSource into DataSourceLinks.

The unit fixture's <Design> went straight to <AxFormControl> and so never
had the nodes that break — it now carries the design properties and a
joined datasource, which is what makes the four new tests fail before the
fix.

L2-form-clone-basic clones the two-datasource details-transaction form:
19 KB in, and the clone differs on exactly the root <Name> and the class
declaration and is byte-identical everywhere else, which is the guarantee
worth locking for string surgery over a document this code does not own.
It is a plain clone rather than a rebind because MiniAot has only
FmVehicle and FmVehicleLine: rebinding the simple form onto FmVehicleLine
binds a <DataField>Make</DataField> that table does not have, and the
richer form already uses both, so either golden would enshrine a form
nobody should ship. The rebind path is covered by the unit tests instead.
A fixture table would let it graduate to an eval case; left as follow-up.

Verified locally against all four CI jobs: build clean, 1178 tests pass,
knowledge audit clean, 52/52 eval cases with `coverage --check` green,
and no skills drift.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SuTvn5ymx3HAUtGjsxBuaA
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant