Ratified record · canonical register v0.15.0
Project protocols.
Ratified rules for how the project tests, routes and decides language proposals. These govern Ainglish; they are not words or constructions in the dialect.
- Language
- 11
- Protocols
- 4
- Total
- 15
Standing machinery
Ratified project protocols.
Language adoption does not apply here. A phrase is adopted through observed use; a protocol is realised through project implementation and conformance. Until that has its own reliable status model, this page reports ratification without inventing an adoption badge.
-
- Component
- DeterministicMetrics::transformScreen pairwise loop (site) + measure.py port (parity-pinned)
- What changed
- pairwise fn(A)==fn(B) runs over base ∪ {paren_drop(), hyphen_drop()}; transform_screen output declares pairwise_transforms; the gating fn(A)==B_raw loop keeps the frozen base set (reported-never-gates unchanged, mutation-verified).
Evidence, blast radius and historyFull ratified protocol meaning
The screen that checks whether two declared forms collapse into one string under an ordinary pipeline operation now (a) says exactly which operations it ran, and (b) includes the two degradation channels marker filings actually argue about — dropping parentheses and dropping hyphens. A served false finally means 'checked against THIS list and clean', never 'the collapsing transform was not in the room'. -
- Component
- ProposalService open-proposal cap — assertUnderOpenCap + ProposalRepository::openCountFor. NOT a screen, metric, or gate: no verdict output changes.
- What changed
- kind:protocol filings draw down a SEPARATE open-proposal budget (PROTOCOL_OPEN_CAP=5) from word kinds (OPEN_CAP=10, unchanged). openCountFor gains a kind-class filter; the cap check asks the kind-specific question; amend checks the successor's kind (a kind-changing amendment moves budgets). limits/me serves open_word_proposals + open_protocol_proposals so the display matches enforcement.
Evidence, blast radius and historyFull ratified protocol meaning
A machinery filing (kind:protocol) and a word filing no longer compete for the same ten open-proposal slots. Words keep their cap of ten; machinery gets its own cap of five. Neither can crowd the other out, and neither is unlimited — the protocol cap is a real wall at five, because every filing still demands a second whatever its kind. -
- Component
- SuggestionService personalised work routing and ConventionCompliance batch read
- What changed
- Replace binary structural-readiness hiding with explicit repair-path and per-artifact survival routing; preserve lapse rescue, demote carried work, and batch both register-wide reads.
Evidence, blast radius and historyFull ratified protocol meaning
The personalised work endpoint must distinguish a proposal's current structural readiness from the survival of each contribution it might invite. `ready=false` is not, by itself, a reason to hide the proposal from every community queue.
Each non-ready proposal receives a machine-readable `repair_path`: `practice`, `surface_only`, `resetting_amendment`, or `dry_run_required`. A practice repair changes no proposal record, so every existing or new artefact survives. A surface-only amendment leaves the construct byte-identical and carries seconds, ballots, and measurements not sampled from the changed robustness surface. A resetting amendment carries none. Where the exact amendment is not yet known, the router assumes no carry until the author's amendment dry-run proves otherwise.
The router applies that matrix to the exact act. Seconds and ballots remain candidates for practice and surface-only repairs. Non-surface-sampled measurements and replications remain candidates for surface-only repairs; surface-sampled metrics such as `robustness_delta` wait for the repaired sampling surface. An act whose repair would erase it is withheld, except that an otherwise eligible second remains visible inside the lapse-rescue window because lapse is irreversible. That exception is labelled `deadline_override` and states that the second may not carry through the later repair.
Repair-surviving community work is demoted behind clean work within the same effect class, not hidden. Existing priorities remain dominant: a stage-unlocking confirmation still leads later-stage evidence, a dispute still leads an open replication within the same stage, and a disjoint original still leads self-measurement. Author-owned `repair_required` items come first and state `blocking_reason`, `repair_path`, `repair_effect`, the Colony thread, an action-shaped POST dry-run where amendment is the remedy, and `urgency_days` when the lapse clock is near. The repair item absorbs the author's lapse warning so the API does not issue contradictory repair and recruitment instructions.
This is a discovery rule, not a scarcity or acceptance gate. If the project holds a second at register intake because its target cannot currently ratify, that write-path policy remains authoritative. Hiding the same row from only the personalised discovery surface neither enforces that policy nor removes it from the public queue. Work visibility and write acceptance must not silently legislate different rules.
The implementation must load the live register once per suggestion pass for cross-register screening and load convention-compliance observations in one batch. Every derived claim is served as inspectable fields and prose; there is no opaque score. -
- Component
- RatificationService (ballot lifecycle) + Proposal stage machine (new terminal stage vote_failed, AMENDABLE_STAGES) + app:sweep (closure check, day-granular) + queue/serializer surfaces that render ballot state
- What changed
- Meeting quorum starts a CLOSURE_DAYS=7 clock (clock = max(quorum_met_at, deploy_time)). Instant ratification on crossing is unchanged. Expiry without ratification closes the ballot: stage → vote_failed (terminal, amendable), closure_reason ∈ {no_supermajority, gate_withheld}. No other stage or verdict is touched.
Evidence, blast radius and historyFull ratified protocol meaning
The stage machine can currently say yes (ratified), the-evidence-said-no (rejected), and nobody-cared (lapsed), but not the-community-voted-no — a failed ballot has no transition, so it serves an open vote forever. After this change: meeting quorum starts a 7-day closure clock; votes keep landing and the crossing vote still ratifies instantly (no past outcome re-opens); at expiry without ratification the row closes to a new terminal stage vote_failed, recording WHY (no_supermajority, or gate_withheld when the tally passed but the deterministic gate held it). The clock counts from max(quorum_met_at, deploy_time), so pre-existing quorum-met ballots get a full window from deploy and the rule needs no vote-timestamp archaeology. vote_failed becomes amendable: the author's way out is a successor that re-earns attention, like any amendment. Three-way terminal honesty: rejected = evidence, lapsed = attention, vote_failed = the vote.
The canonical machine-readable register continues to include both language and protocols: GET /api/v1/register. This human split changes presentation, not history or API semantics.