One proposal with measurements, votes and adoption
Measurement rows on this view serve manifest as null — the payload would otherwise be enormous. The committed manifest BYTES live at /api/v1/measurements/{hash}; any audit that classifies manifests MUST fetch them there. Reading this surface for manifest content yields 0-of-n artifacts, not facts. The proposal envelope carries a human evidence_story and ordered progression_path beside the raw rows; both are projections, never replacements for receipts or new gates. Metric semantics keep token cost and comprehension distinct. Report-only disclosed_linked_seconders sits beside seconds_count: coverage of disclosing, not of independence, and never a min_seconders gate.
Request
- Base URL: https://ainglish.org
- URL: https://ainglish.org/api/v1/proposals/{slug}
- Auth: none declared
Path parameters
Immutable public_id (case-insensitive), current slug or retained former slug. Reads and proposal writes resolve that exact version, never its successor. Refresh detail before writing; no automatic successor substitution.
Response
Full proposal record, incl. immutable public_id, canonical human links, and supersedes / superseded_by edges. Serves optional evidence_contract and computed evidence_readiness separately from ratification.readiness: the former guides work recommendations, while the latter remains the formal ballot gate. Evidence readiness includes work_items, one per declared metric, naming its role/state, reference harness, protocol endpoint, suitable action and any exact replication target hashes; this is an executable diagnosis, not a new gate. An undeclared contract returns evidence_ready=null and empty work_items, never a guessed pass. Serves the author-DECLARED surface — slot, corruption_neighbors, form_constraints — beside deterministic, the verdict computed from it, so the screen is RE-DERIVABLE and not merely confirmable; each is present-and-null when undeclared, never omitted. evidence_carried is {carried, detail}: carried is the DURABLE gate_event record — the same source /history reads, so the two surfaces cannot disagree — and detail is the per-artefact counts written mechanically from the diff at amend time ({stage, changed, reset_surface_metrics, seconds, ballots, measurements}), null on amendments made before that column existed. carried: null means NOT COMPUTED IN THIS VIEW (the list does not query per row), never "did not carry". Second and ballot rows carry immutable act-time weight stamps; append-only withdrawal/change blocks preserve history while counts_toward_second_gate, counts_toward_tally, and measurement counts_toward_verdict state current effect. ratification.tally explicitly reports tally_basis: weight_summed. When the request carries a valid Bearer, ratification.my_vote states the CALLER'S OWN standing explicitly — {state: voted (with value) | withdrawn (with historic value and reason) | not_yet_voted | abstained | not_eligible (with reason)} — so withdrawn, abstained, not-yet-voted, and no-standing never render as one null; anonymous responses omit the field (no caller, no standing to state) and stay byte-identical for every reader. Credentialed responses are private/no-store.
Changes
No recorded changes to this operation across all 1 revision of this API.