Repository navigation
spec(AST-039, cli-surface): integration docs are found by their documented names and checked in one command - #7658
Merged
Conversation
…document (AST-039 FR4)
…oring type (AST-039 FR13)
4 tasks done
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
Contributor
PR Analysis Report
No new or modified components detected. Bundle Size SummaryNo component packages changed. Accessibility AuditStatus: No accessibility violations detected. Visual Regression40 of 478 shot(s) changed. A change here is a question, not a failure: check whether the after is the
and 20 more. Generated by PR Enrichment workflow | View full report |
This was referenced Oct 17, 2026
…Core answers (AST-039 FR4)
…r docs document (INV24)
This was referenced Oct 17, 2026
…n still raise (AST-039 FR14)
josephfarina
force-pushed
the
josephfarina/integration-check-spec
branch
from
October 17, 2026 20:52
a607b04 to
fe9fec3
Compare
josephfarina
force-pushed
the
josephfarina/integration-check-spec
branch
from
October 17, 2026 20:53
cf3702c to
be9ad5e
Compare
…ed component answers (AST-039 FR4, cli-surface INV24)
…ed doc's stem yields too (AST-039 FR4)
Merged
4 tasks done
4 tasks done
…corded one (AST-039 FR4, cli-surface INV24)
… components, not to legacy docs (AST-039 FR4)
4 tasks done
…ecked (AST-039 FR12)
…author more than Core's (AST-039 FR13)
…pack (AST-039 FR4)
This was referenced Oct 18, 2026
josephfarina
marked this pull request as ready for review
October 18, 2026 19:24
Contributor
Author
|
/approve-spec db3ef54 |
8 tasks done
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Exact decision needed
How integration component docs are found and checked, and how a command may fail on warnings:
spec:AST-039FR4 andarchitecture:cli-surfaceINV24: a component descriptor'snameis the runtime export it documents, so a doc beside a file named otherwise (or named in kebab case) is found by that export, and each full entry its import exports is a component under its own name. A name recorded this way never takes an unscoped lookup that Core, a legacy docs package, or a component named after its source answers.spec:AST-039FR12:astryx doctor integration componentscompares each documented prop table with the props of the export it describes.spec:AST-039FR13:astryx doctor integration validatechecks each descriptor against the type@astryxdesign/cli/authoringpublishes for its kind in an integration, adding an integration type where integrations may author more than Core's type allows, without widening Core's.spec:AST-039FR14:astryx integration check [--strict]runs every integration check in one command, so a package can gate its own build on its docs staying in sync.architecture:cli-surfaceINV32 and DEC-4: a warning fails a command only under--strict, which reports the same findings as errors, and a command offers--strictonly through a record that names it.Existing authority searched
spec:AST-039(draft): FR4 derives identity from the shared stem and says nothing about a descriptor naming another export or about family members. No requirement covers prop tables, descriptor types, or a single CI command.architecture:cli-surface(current): INV24 makes the descriptor the sole per-item metadata authority without saying which runtime export a component descriptor'snamebinds. INV8 makes exit codes independent of the output mode, INV17 owns whatintegration verifyproves, and DEC-1 makesdoctorfail on a broken configured integration. Nothing states what a warning does to an exit code.doctordocuments "warnings are allowed"; thedoctor integrationsubcommands,integration verify,upgrade,componentandgap-reportexit 1 on errors only). A check mode such astheme build --checkreports what it exists to detect as an error. So INV32 requires no change to a released command.Decision
The records state it in full. In short:
nameMAY name another runtime export of that source, and discovery records the component under that name. Each full entry a component descriptor lists incomponentsis a component under its own name when the module the descriptor's import names exports it. Every surface lists, finds, and verifies these components by those names; a source that exports its stem keeps the stem. When the pack lifecycle writes the file a family's import names,integration verifycompares that family's members as discovery lists them after the pack. A name recorded only this way never takes an unscoped lookup that Core, a legacy docs package, or a component named after its source answers: that lookup returns that owner's component unless a declared replacement claims the name, a lookup scoped to the package returns the package's component, and Doctor reports the shared name, so no exact lookup that resolves today resolves differently. The stem of a descriptor recorded under another name yields the same way to Core and to a file-named component. An exact name, including a recorded one, beats Core's keyword fallback (a guess, not an owner).architecture:cli-surfaceINV24 states the rule in the current record.requiredflag the code contradicts, and a type that does not match under the documented loose comparison. A type the comparison cannot judge is listed as unchecked, never reported as a match or a mismatch. Without the project's TypeScript, the command says the comparison was skipped and why, and never reports a pass.category), an additional integration type is published (IntegrationTemplateDoc, in feat(cli): check each authored doc against its published authoring type #7664: everyTemplateDocfield, withcategoryas any string); Core'sTemplateDocis unchanged, so no consumer's compile changes. Without TypeScript, it says the descriptors were not type-checked.doctor integrationsubcommands. Default: exit 1 exactly when one of the four checks would.--strict: also exit 1 on any warning and on any check or comparison that did not run, reported as errors from the same findings; an item a comparison lists as unchecked does not fail it. A new check or a new failure code joins only in a minor release that names it; a name a patch adds to Core or the CLI (a component, template, or topic) can still conflict with a package's own name. Eachdoctor integrationsubcommand stays unchanged.--strict, a command never exits 1 for a finding it reports as a warning.--strictreads exactly the data the default run reports and adds no check. Another command gains--strictonly through a change to the record.Rejected alternatives
tscsetup (packages without one get nothing, and.doc.mjsfiles are often outside it); stricter loader parsers (would hide docs that load today).Claim scope and non-goals
doctor integrationsubcommand, exit code and JSON shape are outside these claims.Evidence and implementation relationship
doctor integration componentsrunning it with the Core test, reading two written types as one when they differ only in how they are written, then prop types); feat(cli): check each authored doc against its published authoring type #7664 and feat(cli): doctor integration validate checks each doc against its published authoring type #7673 (FR13: the check, thendoctor integration validaterunning it, with the Core test); fix(cli): doc links to a component, page, or block resolve #7668 (doc links to components, pages and blocks resolve); feat(cli): integration check runs every source check for a package's build, with --strict #7665 (FR14, INV32, DEC-4). feat(cli): integration check runs every source check for a package's build, with --strict #7665 merges last, after a rebase that adds the other PRs' fields and failure codes, and ships in the same release as feat(cli): read a package's TypeScript project the way tsc reads it #7681, feat(cli): compare documented component props with the TypeScript source #7663, feat(cli): doctor integration components compares documented props with the code #7676, feat(cli): read two written TypeScript types as one when they differ only in how they are written #7684, feat(cli): doctor integration components judges documented prop types against the code #7667, feat(cli): check each authored doc against its published authoring type #7664 and feat(cli): doctor integration validate checks each doc against its published authoring type #7673.integration verifypackable 40/40);integration check --strictreports 8 findings in about 4 seconds.Writing rubric results
Rejected:sentence.Scope
Overlaps: #7412 and #6779 also add a row to cli-surface's verification table after INV29; a merge keeps both rows. #7539 already conflicts with main in the same table.
Validation
pnpm check:knowledgedocs/specs/AST-039/spec.mdgit diff --check