Filing gate: ① a defect with a named landing site — the namespace declaration of ManifestSchema in packages/spec/src/kernel/manifest.zod.ts. Finding class (c): an AI trap. An author following the documented rule writes a value the regex refuses, and the refusal cannot say why.
Filed by the domain:engine execution seat 1 (session_01TEhopqrWQYBycZzyJHpAZr) from the out_of_scope_findings of this seat's #19577 dev (PR #19829). Re-read by this seat on origin/main c11852406, ⛔ not adopted from the report. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.
What the declaration says, three ways
| face |
text |
| the regex |
/^[a-z][a-z0-9_]{1,19}$/ — the FIRST character must be a lowercase letter |
| the refusal sentence (the regex's own message) |
Namespace must be 2-20 chars, lowercase alphanumeric + underscore |
the TSDoc Rules: line |
2-20 characters, lowercase letters, digits, and underscores only. |
⇒ 1leave and _leave satisfy every clause the sentence and the TSDoc state, and the regex refuses both. The dev measured this on the built spec: ManifestSchema.shape.namespace.safeParse('1leave') and safeParse('_leave') both refuse, with exactly that sentence. That is the dev's measurement on its branch base. ⚠️ This seat re-read the declaration text, not the built output.
Why it matters now, not only in principle
Suggested shape (⛔ not a ruling)
Make the sentence and the TSDoc rule say what the regex enforces, e.g. Namespace must be 2-20 chars: a lowercase letter, then lowercase letters, digits or underscores. Then sweep the tree for pins that assert the old sentence (a message change is a published-byte change; the owning seat decides the changeset level).
Filing-gate answers
Dedupe words: Namespace must be 2-20 chars · manifest.namespace regex message mismatch · namespace leading letter refusal · namespace TSDoc rule starts with letter
Generated by Claude Code
Filing gate: ① a defect with a named landing site — the
namespacedeclaration ofManifestSchemainpackages/spec/src/kernel/manifest.zod.ts. Finding class (c): an AI trap. An author following the documented rule writes a value the regex refuses, and the refusal cannot say why.Filed by the
domain:engineexecution seat 1 (session_01TEhopqrWQYBycZzyJHpAZr) from theout_of_scope_findingsof this seat's #19577 dev (PR #19829). Re-read by this seat onorigin/mainc11852406, ⛔ not adopted from the report. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.What the declaration says, three ways
/^[a-z][a-z0-9_]{1,19}$/— the FIRST character must be a lowercase letterNamespace must be 2-20 chars, lowercase alphanumeric + underscoreRules:line2-20 characters, lowercase letters, digits, and underscores only.⇒⚠️ This seat re-read the declaration text, not the built output.
1leaveand_leavesatisfy every clause the sentence and the TSDoc state, and the regex refuses both. The dev measured this on the built spec:ManifestSchema.shape.namespace.safeParse('1leave')andsafeParse('_leave')both refuse, with exactly that sentence. That is the dev's measurement on its branch base.Why it matters now, not only in principle
defineStackmanifests and every door that parsesmanifest.namespacesurface it.duplicatePackagerefuse an explicittargetNamespacewith this sentence verbatim, the declaration's own remedy by design. The refusal an author gets for1leaveis therefore the sentence that does not explain it. That PR's changeset states the leading-letter rule in its own prose. A changelog is not the refusal, though, and the fix belongs at the producer.Suggested shape (⛔ not a ruling)
Make the sentence and the TSDoc rule say what the regex enforces, e.g.
Namespace must be 2-20 chars: a lowercase letter, then lowercase letters, digits or underscores. Then sweep the tree for pins that assert the old sentence (a message change is a published-byte change; the owning seat decides the changeset level).Filing-gate answers
packages/specafter triage routes it (the domain table putspackages/specindomain:spec). ⛔ This seat writes nodomain:*.closedincluded:Namespace must be 2-20 chars message leading letter regex manifest namespace→ 3 hits, all closed, none this defect (nearest [finding]ManifestSchema.version's own TSDoc@example "2.1.0-beta.1"is refused by its regex — copy the documented example andparsethrows #17461,ManifestSchema.version's TSDoc example refused by its regex — the same shape on a different key);manifest namespace refusal message starts with letter→ 1 hit, closed finding(metadata-protocol): 30 refusal messages open with a bracketed tag that restates the code the same throw declares — the shape #12975 rules out, and it reaches the wire #16245, unrelated.Dedupe words:
Namespace must be 2-20 chars·manifest.namespace regex message mismatch·namespace leading letter refusal·namespace TSDoc rule starts with letterGenerated by Claude Code