Skip to content

docs: correct remaining 5 KB files against live D365FO VM (audit part 2/2) - #131

Merged
dynamics365ninja merged 1 commit into
mainfrom
docs/kb-audit-group5-2026-08-b
Aug 5, 2026
Merged

docs: correct remaining 5 KB files against live D365FO VM (audit part 2/2)#131
dynamics365ninja merged 1 commit into
mainfrom
docs/kb-audit-group5-2026-08-b

Conversation

@dynamics365ninja

Copy link
Copy Markdown
Owner

Summary

Completes the skills/_source knowledge-base accuracy audit started in a1a0206 (14/19 files verified and corrected). This PR verifies and corrects the remaining 5 files against a live D365FO VM's metadata (K:\AosService\PackagesLocalDirectory, 196 models) and this repo's own CLI scaffolder source.

sysoperation-batch-patterns.md

  • Fixed the migration-script invocation description. The scaffolder (MigrationScriptScaffolder.cs) generates a class extending SysRunnable with an instance run() method invoked from a static main(Args _args) — not a static SysRunnable::run() call, and there's no RunBase dialog integration as previously claimed.
  • All CLI flags/commands (generate sysoperation, generate runbase, generate migration-script, execution modes, migration modes, default batch size) were checked against src/D365FO.Cli/Commands/Generate/*.cs and found accurate — no changes needed there.

table-scaffolding.md

  • Fixed the number-sequence "manual consumption" snippet: it referenced CompanyInfo::numRefMySequence(), but no CompanyInfo class exists anywhere in the VM's 196 models. The real accessor is a static NumberSequenceReference method on the module's own parameter table (verified via CustParameters::numRefCustAccount()NumberSeqReference::findReference(extendedTypeNum(CustAccount)) in ApplicationSuite). Updated the example to FmParameters::numRefMySequence(), consistent with the file's own FmParameters pattern example.
  • Table pattern presets, aliases, TableGroup/TableType distinction, and generate table/generate query/generate number-sequence flags were all checked against TablePattern.cs and the Generate*Command.cs files and found accurate.

x++-class-authoring.md (largest set of fixes)

  • SRSReportDataProviderBase → corrected casing to the real SrsReportDataProviderBase.
  • SysPlugin section rewritten to match the real SysPluginFactory::Instance(str _baseClassNamespace, str _baseClassName, SysPluginMetadataCollection _metadataCollection) signature — the doc's enum-keyed ExportMetadataAttribute/SysPluginFactory::Instance(enumStr(...), ...) pattern doesn't exist in the platform.
  • Number Sequence Integration: clarified that NumberSeqModule is not a real class (only a naming convention — concrete classes are NumberSeqModule<Module>, e.g. NumberSeqModuleCustomer, all extending the real abstract base NumberSeqApplicationModule); corrected the CoC-target guidance and the UI-wiring step (a numberSeqFormHandler() getter called from datasource create()/write()/validateWrite()/delete() overrides, not a one-time call in init(), per the real CustTable form pattern); fixed the same CompanyInfo issue as above.
  • Workflow Development: WorkflowApproval/WorkflowTask aren't real class names (real: WorkflowModelApproval/WorkflowStep_Approval, WorkflowModelTask/WorkflowStep_Task) and SubmitToWorkflowMenuItem isn't a shared base class — real pattern is a per-module class (e.g. CatProductSubmitToWorkflow, TrvSubmitToWorkflow).

xpp-class-and-method-rules.md and xpp-statement-and-type-rules.md

  • Fully audited. These are general X++ language rules (access modifiers, const/var, prmIsDefault, casting, null-sentinels, using blocks, extension-method syntax) rather than platform-class references. Spot-checked several concrete claims against the VM and CLI source (prmIsDefault usage, RunBase pack/unpack/dialog/getFromDialog/canGoBatch/run all exist, const keyword real, extension-method _Extension static-class pattern confirmed via DictDataEntity_Extension, CLI flags d365fo read class --method --declaration, d365fo labels search --lang) — all checked out accurate. No changes made; this is a targeted-correction pass, not a rewrite.

Test plan

  • Ran scripts/emit-skills.ps1 after editing the 3 changed skills/_source/*.md files.
  • Verified git status --porcelain skills/copilot skills/anthropic skills/_source shows exactly the 9 expected files (3 source + 3 anthropic + 3 copilot compiled counterparts) and nothing else — confirming the compiled output matches source and no other skill drifted.
  • Confirmed via git diff origin/main -- <5 files> that no upstream changes landed on these files since the audit started, so this PR is a clean, isolated correction.
  • CI skills job (drift check) — pending, will report status once checks run.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DfskzQYA9qygzw44aZiaYk

Completes the skills/_source knowledge-base accuracy audit started in
a1a0206 (14/19 files). Verified the final 5 files against the live
D365FO VM (K:\AosService\PackagesLocalDirectory, 196 models) and this
repo's own CLI scaffolders, and corrected the drift that was found:

- sysoperation-batch-patterns.md: the generated migration-script class
  extends SysRunnable but is invoked via a static main(Args) that calls
  the instance run() method — not a static SysRunnable::run() call, and
  there's no RunBase dialog integration (per MigrationScriptScaffolder.cs).

- table-scaffolding.md / x++-class-authoring.md: the number-sequence
  "manual consumption" snippet referenced CompanyInfo::numRefXxx() — no
  CompanyInfo class exists in modern D365FO; the numRef<Edt>() accessor
  is a static NumberSequenceReference method on the module's own
  parameter table (verified against CustParameters::numRefCustAccount()
  in ApplicationSuite).

- x++-class-authoring.md: fixed SRSReportDataProviderBase -> the real
  casing SrsReportDataProviderBase; corrected the SysPlugin section to
  the real SysPluginFactory::Instance(namespace, className,
  SysPluginMetadataCollection) signature (not an enum-keyed call —
  ExportMetadataAttribute doesn't exist in the platform); corrected the
  Number Sequence Integration steps (CoC target is the concrete
  NumberSeqModule<Module> subclass, not the abstract
  NumberSeqApplicationModule base directly; UI wiring is a
  numberSeqFormHandler() getter called from datasource create/write/
  validateWrite/delete overrides, not a one-time call in init()); and
  corrected the Workflow Development section — WorkflowApproval/
  WorkflowTask aren't real class names (real: WorkflowModelApproval/
  WorkflowStep_Approval, WorkflowModelTask/WorkflowStep_Task) and
  SubmitToWorkflowMenuItem isn't a shared base class (real pattern is a
  per-module <Module>SubmitToWorkflow class, e.g. CatProductSubmitToWorkflow).

xpp-class-and-method-rules.md and xpp-statement-and-type-rules.md were
audited but contain only general X++ language rules (const/var,
prmIsDefault, RunBase pack/unpack/dialog/canGoBatch, extension-method
syntax) that were spot-checked against the VM and this repo's CLI
source and found accurate — no changes needed.

Regenerated skills/anthropic and skills/copilot via emit-skills.ps1 so
compiled output matches. This completes the 19-file audit (14 done in
a1a0206, these 5 finish it).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@dynamics365ninja
dynamics365ninja merged commit a0bf7b4 into main Aug 5, 2026
4 checks passed
@dynamics365ninja
dynamics365ninja deleted the docs/kb-audit-group5-2026-08-b branch August 5, 2026 07:24
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