docs: correct site repository name, visibility, protection, and conformance coverage - #20
Merged
Merged
Conversation
…rmance coverage
META-246 (ledger items 21, 23) and META-267 (items 24, 25). Documentation truth
only — no schema bytes, no stable read paths, no package metadata, no types.
Site repository name (item 21)
`workspacejson/site` does not exist and never did; the repository is
`workspacejson/workspacejson.dev`. Corrected in 11 places across 8 files —
README, OWNERSHIP, GOVERNANCE, SUPPORT, CONTRIBUTING, SECURITY, AGENTS and the
Copilot instructions — not the three the audit listed. Both ASCII dependency
diagrams recentred for the longer name.
One occurrence is deliberately NOT changed: docs/adr/002-bounded-enrichment-
program.md:47. ADR-002 is a governance record under an amendment protocol, and
silently editing a record is exactly what that protocol exists to prevent. It
is flagged for amendment instead.
Repository visibility and protection (item 23)
The README claimed the repository is private and on a plan without branch
protection. It is public, and protection is enabled. But the replacement is
not simply the inverse: measured against the GitHub API on 2026-08-04,
required_approving_review_count : 0
enforce_admins : false
rulesets : []
docs/repository-settings.md asserted "a pull request with at least one
approving review" and "enforce on admins". Both are false. A pull request can
merge with no human approval once CI is green, and the code-owner requirement
cannot bind while the required count is 0 — GitHub requests code-owner review
but does not block on it.
That document then concluded the authority transfer "can proceed without
creating a supply-chain window". That conclusion does not follow and is
removed. The gap is currently harmless — this repository holds no npm
credential and ships no release workflow — but it must be closed before
authority transfers, not after.
Schema $id bullet
Also stale, in the opposite direction: `main` already carries the bare-host
$id after META-272, while published @workspacejson/spec@0.4.4 still serves the
`www.` host. Restated as the candidate-versus-released distinction rather than
a live disagreement.
Producer conformance coverage (items 24, 25)
docs/conformance.md "Known gaps" claimed producer conformance is not
mechanically checked here. It has been since PR #9. Corrected in place rather
than dropped, and expanded to describe what the suite actually does: the
invocation command, the five assertion groups, the external-candidate boundary
so the producer does not grade itself, the mutation red tests including the
baseline that stops it passing by rejecting everything, and — per the suite's
own header — what it deliberately does not assert about per-file fileIndex
values, which is ADR-003 amendment A-004's open question.
The adjacent "no external conformance suite" bullet is narrowed rather than
deleted: a producer suite exists, but it needs a caller-supplied candidate
path, so an unaided implementer still cannot point at one published battery.
Verification
pnpm -r build && pnpm -r typecheck && pnpm -r test 221 passed (48 spec, 173 rules)
check:docs 4 confirmed in the schema; 9 prose enumerations complete
check:schema, check:examples, check:architecture, check:architecture:test PASS
check:adr index matches records; no Accepted record on a placeholder
check:conformance 28 passed, 0 failed, against the local workspacejson/cli candidate
…endent reviewer The prior wording claimed `required_approving_review_count: 0` makes the code-owner requirement unable to bind. That is wrong, and it understated the problem in one place while overstating it in another. `require_code_owner_reviews` is an independent control: it blocks an affected pull request until a code owner approves, regardless of the general count. It is not inert. The actual defect is structural. Every path in .github/CODEOWNERS is owned solely by @qmarcelle, who authors the changes, and GitHub does not permit an author to approve their own pull request — so the code-owner gate cannot be satisfied from within. Administrator enforcement is off, so the same account can bypass it. The controls are configured; what is missing is a second person. Remediation restated accordingly: an independent code owner is the first requirement, not a higher approval count. Raising the count alone changes nothing while one account owns every path and authors every change. Also narrows "currently harmless". It is not a credentialed publication risk — no npm credential, no release workflow — but main here is the public canonical source of the standard, so unreviewed schema, guard and governance changes land the same way.
qmarcelle
added a commit
that referenced
this pull request
Aug 9, 2026
Steward acceptance given 2026-08-09 by Qwynn Marcelle, sole steward, in
explicit terms. Status moves Proposed → Accepted, the decision date is the date
acceptance was given rather than the drafting date, the README index row is
updated, and docs/adr/index.json is regenerated.
Acceptance authorized ratification only. It did not authorize implementation:
the executable corpus, the standard-owned validation contract, producer and
reader convergence, and the public-documentation sync remain separate work
items under the ratification issue.
Four scope corrections were issued with the acceptance and are recorded in the
record itself, because they narrow what it authorizes and a reader who has only
the record should see them:
1. validateStoredKey is standard-owned, pure, total and filesystem-free.
2. canonicalizeHostQuery is not the schema package's to implement. Hosts and
integrations implement it against these semantics; a filesystem-aware
implementation in the spec package needs its own architectural decision.
3. A genuine U+FFFD in a filename is valid. Lossy-decoding detection belongs
at raw-byte acquisition, where re-encoded bytes can be compared against
the originals, not in a pure string validator that has no bytes.
4. Acquisition repair is a separate change from stored-key validation and
needs its own caller trace and watched-red evidence first.
Rebuilt on bd14f39 rather than merged from the stale f85039b base. The only
conflict was docs/adr/index.json, resolved exclusively by regeneration — the
generator is its sole author. Regeneration also enriched ADR-003's revision pin
to bd14f39, now that #21 has published those bytes.
No file from #20 or #21 is reverted or reintroduced. The two edits to shared
files are pure additions: one README index row and one path in
scripts/check-docs.mjs.
Refs: META-278
qmarcelle
added a commit
that referenced
this pull request
Aug 10, 2026
… not commands (#19) Accepted 2026-08-09 by Qwynn Marcelle, sole steward. Stored artifact paths are data, not commands. Every path-bearing value must already be a canonical repository-relative key; readers reject non-canonical stored keys and never resolve, repair, collapse or reinterpret them. Host-query canonicalization is a separate operation, scoped to POSIX, and canonicalizing a host query into an existing tracked identity is not repairing a stored key. Decision-only. No schema bytes, no implementation, no matcher replaced. The executable corpus, the standard-owned validation contract, producer and reader convergence, and the public-documentation sync are separate work items. Four scope corrections issued with the acceptance are recorded in the record: validateStoredKey is standard-owned, pure, total and filesystem-free; canonicalizeHostQuery belongs to hosts and integrations, not the spec package; a genuine U+FFFD filename is valid and lossy-decode detection belongs at raw-byte acquisition; acquisition repair is a separate change needing its own caller trace and watched-red evidence. Rebuilt on bd14f39; docs/adr/index.json resolved exclusively by regeneration. No file from #20 or #21 reverted or reintroduced. Refs: META-278
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.
Wave 0 documentation truth for this repository. META-246 (ledger items 21, 23) and META-267 (items 24, 25).
No schema bytes, no stable read paths, no package metadata, no types. Nothing in
AGENTS.md's "do not change without an issue" list is touched.Site repository name — item 21
workspacejson/sitedoes not exist and never did. The repository isworkspacejson/workspacejson.dev.Corrected in 11 places across 8 files — README, OWNERSHIP, GOVERNANCE, SUPPORT, CONTRIBUTING, SECURITY, AGENTS, and the Copilot instructions. The audit listed three; the name had spread further than that. Both ASCII dependency diagrams were recentred for the longer label.
One occurrence is deliberately left alone:
docs/adr/002-bounded-enrichment-program.md:47. ADR-002 is a governance record under an amendment protocol, and silently editing a record is precisely what that protocol exists to prevent. It is flagged for amendment rather than fixed here. ADR-002 isProposed, so nothing currently relies on it.Branch protection — item 23
The README claimed the repository is private and on a plan without branch protection. It is public, and protection is enabled. But the correct replacement is neither the inverse of that claim nor a simple missing-control list. Measured against the GitHub API on 2026-08-04:
docs/repository-settings.mdasserted "a pull request with at least one approving review" and "enforce on admins". Both are false.The actual defect is structural, not a missing toggle
An earlier revision of this PR said the code-owner requirement "cannot bind" while the general count is
0. That was wrong and has been corrected indcdba7f.require_code_owner_reviewsis an independent control — it blocks an affected pull request until a code owner approves, regardless of the general count. It is not inert.The real problem is the combination of four facts:
0, so paths no code-owner rule reaches get no review requirement;.github/CODEOWNERSassigns*and every specific path to a single owner,@qmarcelle, who authors the changes — and GitHub does not let an author approve their own pull request, so the code-owner gate cannot be satisfied from within;enforce_admins: false, so the same account can bypass the protection entirely.The controls are configured. What is missing is a second person.
Remediation therefore is not "set the count to 1". It needs an independent maintainer/code owner first, then a required approval, then admin enforcement or a no-bypass ruleset with a bounded release exception, with
.github/CODEOWNERSitself staying protected (already true atCODEOWNERS:29).This is not currently a credentialed package-publication risk — this repository holds no npm credential and ships no release workflow. It is not harmless in general:
mainhere is the public canonical source of the standard, so unreviewed schema, guard and governance changes land the same way. Relevant to META-243, which requires reviewed release paths before a repository holds a credential.Schema
$idbullet — stale in the other directionThe README described the
$idhost as disagreeing with the canonical domain.mainalready carries the bare-host$idafter META-272; the published@workspacejson/spec@0.4.4still serveswww.. Restated as the candidate-versus-released distinction rather than a live disagreement — the same distinction META-293 assertion 7 exists to enforce.Producer conformance coverage — items 24, 25
docs/conformance.md"Known gaps" claimed producer conformance is not mechanically checked here. It has been since PR #9. Per META-267 the bullet is corrected in place rather than dropped, and expanded to state what the suite actually does:WORKSPACEJSON_CLI_CANDIDATE;fileIndexvalues, carried over from the suite's own header, which is ADR-003 amendment A-004's open question.The adjacent "no external conformance suite" bullet is narrowed, not deleted: a producer suite exists, but it requires a caller-supplied candidate path, so an unaided third-party implementer still cannot point at one published battery. That gap is real and remains stated.
Verification
check:docscarries the stable-read-path gate from PR #16, so the prose enumerations touched here are mechanically verified against the schema.Refs META-246, META-267.