The widening half of #18170 — and it needs a CONTRACT decision before any code
Filed by the domain:cli execution PM seat at #18170's ACCEPT. #18170 delivered its stated minimum (the loud warning, PR #18428); this card carries the capability half it deliberately did not deliver. ⛔ Not graded here — lane and kind are triage's.
The ask
Read package docs from each package directory under an ADR-0130 layout (src/<pkg>/docs/, or a docs key on the package's defineStack input), so a module can ship its own docs.
⭐ The capability request survives the diagnostic. #18428 makes the loss audible — an author who moves docs into a package now gets told what was not read. They still ⛔ cannot have per-module docs, and the new warning tells them so explicitly. ⇒ the warning raises the value of this card rather than replacing it.
⚠️ Why it was NOT delivered with #18170 — it is under-specified on today's tree
The delivering agent measured two open contract questions, ⛔ neither answerable by a dev:
- Which
packages[] body do per-package docs attach to? An ADR-0130 D4 artifact registers per package (packages[], option B), while compile.ts attaches collected docs to the artifact top level (finalBundle.docs). Per-package docs must first be told which package body they belong to.
- Whose
manifest.namespace does lintDocs's prefix rule use for them? lintDocs enforces a namespace prefix read from one stack.manifest.namespace, and a multi-package stack has ⛔ no single value for it.
⇒ this is 「a contract decision, not a defect fix」, which is why it is a successor card and ⛔ was not a rider.
Measured context worth keeping
The blast radius of the delivered tightening was zero — find examples packages -maxdepth 4 -type d -path '*/src/*/docs' returned nothing, both example apps keep a flat src/docs. ⇒ there is ⛔ no in-repo consumer of the widening today; the pull is external (objectstack-ai/hotcrm, which records the exception in its own AGENTS.md, objectstack-ai/hotcrm#1910).
⚠️ That matters for grading: under 〈创业阶段不扩散〉 a capability with zero in-repo pull and one named external app is exactly the shape that gets weighed rather than assumed.
Dedupe words
package docs · ADR-0130 layout · src/PACKAGE/docs · collect-docs · per-package docs · docs[] attachment · packages[] option B
⚠️ A dedupe search was run from the PM seat before filing. 5 hits, ⛔ none of them open on this ask: #18170 itself, and four closed ADR-0130 context cards (#15004 the reader program, #14164 composeStacks preserve mode, #6760, #6893).
Refs
#18170 / PR #18428 (the tightening half, delivered) · #14122 (the ADR-0130 tracker) · objectstack-ai/hotcrm#1910 (the external app carrying the exception)
Generated by Claude Code
The widening half of #18170 — and it needs a CONTRACT decision before any code
Filed by the
domain:cliexecution PM seat at #18170's ACCEPT. #18170 delivered its stated minimum (the loud warning, PR #18428); this card carries the capability half it deliberately did not deliver. ⛔ Not graded here — lane and kind are triage's.The ask
Read package docs from each package directory under an ADR-0130 layout (
src/<pkg>/docs/, or adocskey on the package'sdefineStackinput), so a module can ship its own docs.⭐ The capability request survives the diagnostic. #18428 makes the loss audible — an author who moves docs into a package now gets told what was not read. They still ⛔ cannot have per-module docs, and the new warning tells them so explicitly. ⇒ the warning raises the value of this card rather than replacing it.
The delivering agent measured two open contract questions, ⛔ neither answerable by a dev:
packages[]body do per-package docs attach to? An ADR-0130 D4 artifact registers per package (packages[], option B), whilecompile.tsattaches collected docs to the artifact top level (finalBundle.docs). Per-package docs must first be told which package body they belong to.manifest.namespacedoeslintDocs's prefix rule use for them?lintDocsenforces a namespace prefix read from onestack.manifest.namespace, and a multi-package stack has ⛔ no single value for it.⇒ this is 「a contract decision, not a defect fix」, which is why it is a successor card and ⛔ was not a rider.
Measured context worth keeping
The blast radius of the delivered tightening was zero —
find examples packages -maxdepth 4 -type d -path '*/src/*/docs'returned nothing, both example apps keep a flatsrc/docs. ⇒ there is ⛔ no in-repo consumer of the widening today; the pull is external (objectstack-ai/hotcrm, which records the exception in its ownAGENTS.md, objectstack-ai/hotcrm#1910).Dedupe words
package docs·ADR-0130 layout·src/PACKAGE/docs·collect-docs·per-package docs·docs[] attachment·packages[] option BcomposeStackspreserve mode, #6760, #6893).Refs
#18170 / PR #18428 (the tightening half, delivered) · #14122 (the ADR-0130 tracker) · objectstack-ai/hotcrm#1910 (the external app carrying the exception)
Generated by Claude Code