Skip to content

specs: mark 1/COSS superseded by process/ - #33

Closed
phipsae wants to merge 7 commits into
ci/registry-generatorfrom
process/supersede-coss
Closed

phipsae wants to merge 7 commits into
ci/registry-generatorfrom
process/supersede-coss

Conversation

@phipsae

@phipsae phipsae commented Sep 14, 2026 •

Copy link
Copy Markdown
Collaborator

A question with a proposed answer, not a decision. Needs agreement before it merges. Based on #32, so it is last in the stack.

#30 adds process/, which defines how this repository works. 1/COSS already defines that, differently. Two process documents governing one repository is the kind of thing nobody notices until a spec gets promoted under the wrong rules, so it needs settling either way.

Where they actually disagree

Topic 1/COSS process/
Lifecycle raw, draft, stable, deprecated, retired, deleted idea, draft, review, stable, deprecated, plus stagnant, withdrawn, living
Reaching stable "when draft specifications are used by third parties" conformance fixtures passing, or two independent interoperating implementations
Editorial control COSS editor model named editor per spec, reviewer other than the editor for promotion

Where they agree

Worth saying plainly, because it is most of the substance.

So process/ inherited from COSS more than it replaced.

What this pull request does

Sets 1/COSS to status: deprecated with replaced_by: process/, adds a note at the top pointing at the current rules, and leaves every word of the text in place so links keep resolving. Specs 2, 3 and 4 declared themselves governed by 1/COSS, so they now point at process/ while still naming COSS as what came before.

It sits on top of #32 rather than #31 so it can carry its own regenerated registry.yaml and README row. Without that ordering, merging this would leave the generated files stale and turn main red, which is the check in #32 doing its job. If #32 is dropped, drop the two generated files from this branch and it rebases onto #31 cleanly.

The alternative

Keep 1/COSS as the process and cut process/lifecycle.md back to a pointer. That is a real option and it keeps continuity. It costs the evidence gate for stable, the review stage, and the stagnant and living statuses, which are the parts #29 argued for on the grounds that builders need to know what is safe to build against. Saying "used by third parties" does not answer that question.

This changes the governed-by line in specs 2, 3 and 4.

🤖 Generated with Claude Code

@phipsae
phipsae force-pushed the process/supersede-coss branch from a49a64a to a490f6e Compare September 14, 2026 22:22
@phipsae
phipsae force-pushed the specs/normalize-front-matter branch from afc78b0 to 3269bdd Compare September 14, 2026 22:22
@phipsae
phipsae force-pushed the process/supersede-coss branch from a490f6e to 0736307 Compare September 14, 2026 22:23
@phipsae
phipsae changed the base branch from specs/normalize-front-matter to ci/registry-generator September 14, 2026 22:24
@phipsae
phipsae force-pushed the ci/registry-generator branch from 7e3d247 to c232a3a Compare September 14, 2026 22:46
@phipsae
phipsae force-pushed the process/supersede-coss branch from 0736307 to 0d4d771 Compare September 14, 2026 22:46
Philip Krause and others added 7 commits September 14, 2026 18:01
Puts the five existing specs on the schema in process/front-matter.md and
renames their folders so listings are readable. Spec text is unchanged
apart from the fixes listed below.

Folders:
  specs/1 -> specs/1-coss
  specs/2 -> specs/2-anon-aadhaar-v2
  specs/3 -> specs/3-semaphore-v4
  specs/4 -> specs/4-excubiae
  specs/5 -> specs/5-zk-proof-of-personhood

Fixes carried in the same pass:
- spec 2's front matter sat below a heading, so it never parsed as front
  matter at all. It is now at the top of the file, and the heading became
  a normal H1 with the spec's name.
- specs 2 and 4 declared slug CS-02 and CS-04 while their folders and
  titles said 2 and 4. The id now matches the folder in every case.
- specs 2, 3 and 4 carried a nested "- tags:" entry inside contributors,
  which made every tag part of the contributor list. Tags are now a
  top-level field.
- spec 4's contributor list held a literal "...".
- spec 3 linked to 1/COSS at github.com/zkspecs/zkspecs, which only
  resolves through a redirect. Spec 1 linked to itself at "spec/1", which
  never existed. Both are now relative.

Statuses map old to new: raw becomes idea, draft stays draft, and COSS
becomes living because a process doc is never meant to freeze.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two fixes from review.

The folder rename 404s every existing link to specs/1 through specs/5.
A repo rename redirects the repo, not renamed file paths, and the zkID
repo links to specs/1 right now. Each old path keeps a one-line pointer
at the new folder.

Spec 5 was tagged mirrored while holding no copy, only a link, which is
the definition of indexed rather than mirrored. It is now indexed, with
an index_reason recording that the text was written here in March,
imported into zkID in May, and removed here in #24. Its upstream also
pointed at privacy-ethereum/zkID, which now only resolves by redirect.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
index_basis: formerly-hosted is exactly this case, a spec whose text was
hosted here and moved to another repository. The reason line stays as the
human explanation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Makes front matter the only place spec metadata is written down. The
index table and registry are derived, so they cannot drift from the
specs they describe.

scripts/build_registry.py writes registry.yaml and splices the README
table between markers. With --check it writes nothing and fails if the
committed output is stale, which is what CI runs on every pull request
touching specs, the script, or either generated file.

The same pass validates front matter and fails on:
- a folder not named number-slug
- front matter that is missing, unparseable, or not a mapping
- a missing required field
- an id that disagrees with its folder number, or a duplicate id
- a role, type, status or domain outside the allowed set
- a mirrored or indexed spec with no upstream URL
- depends_on or replaces naming a spec that does not exist
- an indexed entry that no hosted spec depends on

That last one is the guardrail from process/front-matter.md, which stops
the repo becoming a catalogue of every spec in the world.

Adds an optional description field so the table keeps the one-line
summaries the README already had. Without it the table falls back to the
spec title.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three defects found in review.

The indexing guardrail accepted an entry only when a hosted spec named it
in depends_on. That made graduation impossible, because a spec nothing
depends on could never flip to indexed on its way out to another body,
which is exactly what #29 promises graduated specs can do. An indexed
entry now qualifies either that way or by carrying index_reason, one line
saying why it is here.

replaced_by was never checked at all. A pointer at spec 9999 passed. A
numeric target is now validated like replaces, while an external id or a
repo path is left alone.

Bare-number spec folders are skipped rather than rejected. They are the
legacy pointers kept so links from before the folder rename still work.
Any other misnamed folder still fails.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The previous fix let any non-empty index_reason satisfy the guardrail,
which is the original hole wearing a different hat. Reproduced with an
unrelated external standard carrying 'index_reason: interesting', and it
passed.

An indexed entry now qualifies one of three ways, each with a field
behind it. A hosted spec names it in depends_on, or index_basis is
graduated with replaced_by set, or index_basis is formerly-hosted with
upstream set. Either basis also requires an index_reason. Any other
index_basis value is rejected.

Ten cases tested, covering both bases with and without their required
field, a missing reason, an unknown basis, the free-text hole, and the
earlier replaced_by, folder naming and legacy pointer checks.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The repo now defines its working rules in process/, and 1/COSS defines a
different set. Two process documents governing one repo is the kind of
thing nobody notices until a spec is promoted under the wrong rules.

COSS stays in place, at status deprecated with replaced_by pointing at
process/, and gains a note at the top saying where the current rules
live. Specs 2, 3 and 4 said they were governed by 1/COSS, so they now
point at process/ while still naming COSS as what came before.

Where the two agree, on incremental numbering and on a functional change
getting a new number rather than an edit in place, process/ inherited the
rule from COSS rather than replacing it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@phipsae
phipsae force-pushed the ci/registry-generator branch from c232a3a to 8484514 Compare September 14, 2026 23:02
@phipsae
phipsae force-pushed the process/supersede-coss branch from 0d4d771 to 370fe70 Compare September 14, 2026 23:02
phipsae added a commit that referenced this pull request Sep 16, 2026
The five existing specs go onto the schema #30 defines, and their folders
are renamed from a bare number to the number plus the spec's shortname in
lowercase. No spec text is rewritten, apart from spec 5's one-sentence
pointer.

Spec 5 is indexed rather than mirrored, because the file holds no copy of
the spec, only a pointer. It carries index_reason: moved with upstream
pointing at zkID, and status: draft, which is what the upstream calls
itself in its own front matter (COSS status: raw, and #30 has no raw).
Being a stub it has no contributors, and its editor is whoever keeps the
link correct here rather than the people who wrote the text upstream.

Specs 2, 3 and 4 do not list 1/COSS in depends_on. They declare
themselves governed by it, which is a governance link, not something
they cannot be used without. The governed-by line in each spec's prose
already says it, and #33 repoints those lines to process/.

The bare-number folders stay as one-line pointers so links made before
the rename keep resolving.

Pre-existing bugs fixed on the way, all in lines being touched anyway.
Spec 2's front matter sat below a heading so it never parsed. Specs 2 and
4 declared slug CS-02 and CS-04 against folders and titles saying 2 and 4.
Specs 2, 3 and 4 nested tags inside contributors, and specs 3 and 4
wrote multi-word tags with spaces where the others used hyphens. Spec 4 listed a literal
... as a contributor. Spec 3 linked to 1/COSS at the old zkspecs org and
spec 1 linked to itself at spec/1, a path that never existed.
@phipsae
phipsae force-pushed the ci/registry-generator branch from 8484514 to 74cb2bd Compare September 16, 2026 22:05
@phipsae
phipsae force-pushed the ci/registry-generator branch from 74cb2bd to 8740432 Compare September 16, 2026 23:09
@phipsae

phipsae commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator Author

Folded into #31, which already migrates every spec's front matter and rewrites the same three governed-by lines. Keeping it separate made a reviewer read those lines twice. The change is unaltered, 1/COSS at status: deprecated with replaced_by: process/, the full text kept, a note at the top pointing at the current rules, and specs 2, 3 and 4 repointed. The regenerated registry.yaml moved to #32.

@phipsae phipsae closed this Sep 16, 2026
phipsae added a commit that referenced this pull request Sep 17, 2026
The five existing specs go onto the schema #30 defines, and their folders
are renamed from a bare number to the number plus the spec's shortname in
lowercase. No spec text is rewritten, apart from spec 5's one-sentence
pointer.

Spec 5 is indexed rather than mirrored, because the file holds no copy of
the spec, only a pointer. It carries index_reason: moved with upstream
pointing at zkID, and status: draft, which is what the upstream calls
itself in its own front matter (COSS status: raw, and #30 has no raw).
Being a stub it has no contributors, and its editor is whoever keeps the
link correct here rather than the people who wrote the text upstream.

Specs 2, 3 and 4 do not list 1/COSS in depends_on. They declare
themselves governed by it, which is a governance link, not something
they cannot be used without. The governed-by line in each spec's prose
already says it, and #33 repoints those lines to process/.

The bare-number folders stay as one-line pointers so links made before
the rename keep resolving.

Pre-existing bugs fixed on the way, all in lines being touched anyway.
Spec 2's front matter sat below a heading so it never parsed. Specs 2 and
4 declared slug CS-02 and CS-04 against folders and titles saying 2 and 4.
Specs 2, 3 and 4 nested tags inside contributors, and specs 3 and 4
wrote multi-word tags with spaces where the others used hyphens. Spec 4 listed a literal
... as a contributor. Spec 3 linked to 1/COSS at the old zkspecs org and
spec 1 linked to itself at spec/1, a path that never existed.
phipsae added a commit that referenced this pull request Sep 17, 2026
…ame (#31)

* specs: normalise front matter and rename folders to number and shortname

The five existing specs go onto the schema #30 defines, and their folders
are renamed from a bare number to the number plus the spec's shortname in
lowercase. No spec text is rewritten, apart from spec 5's one-sentence
pointer.

Spec 5 is indexed rather than mirrored, because the file holds no copy of
the spec, only a pointer. It carries index_reason: moved with upstream
pointing at zkID, and status: draft, which is what the upstream calls
itself in its own front matter (COSS status: raw, and #30 has no raw).
Being a stub it has no contributors, and its editor is whoever keeps the
link correct here rather than the people who wrote the text upstream.

Specs 2, 3 and 4 do not list 1/COSS in depends_on. They declare
themselves governed by it, which is a governance link, not something
they cannot be used without. The governed-by line in each spec's prose
already says it, and #33 repoints those lines to process/.

The bare-number folders stay as one-line pointers so links made before
the rename keep resolving.

Pre-existing bugs fixed on the way, all in lines being touched anyway.
Spec 2's front matter sat below a heading so it never parsed. Specs 2 and
4 declared slug CS-02 and CS-04 against folders and titles saying 2 and 4.
Specs 2, 3 and 4 nested tags inside contributors, and specs 3 and 4
wrote multi-word tags with spaces where the others used hyphens. Spec 4 listed a literal
... as a contributor. Spec 3 linked to 1/COSS at the old zkspecs org and
spec 1 linked to itself at spec/1, a path that never existed.

* specs: retire 1/COSS in favour of process/

#30 adds process/, which defines how this repository works. 1/COSS already defines that, differently, so two process documents govern one repository. This settles which one wins.

1/COSS goes to status: deprecated with replaced_by: process/ and gets a note at the top pointing at the current rules. Every word of the text stays in place, so links keep resolving and the specs written under it can still be read against it. Specs 2, 3 and 4 declared themselves governed by 1/COSS, so they now point at process/ while still naming COSS as what came before.

The two differ on the lifecycle stages, on the evidence required to reach stable, and on editorial control. They agree on incremental numbering and on a functional change getting a new number rather than an edit, both of which process/ inherited from COSS rather than replacing.

Folded in here rather than kept as its own pull request, because this branch already migrates every spec's front matter and rewrites the same three governed-by lines.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* README: COSS row shows deprecated

Same change as the previous commit, in the hand-kept index table that #32 later replaces with a generated one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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