Skip to main content

Proposal Intake Backend Contract

Purpose

This page defines the backend contract for the proposal intake interface.

A repo-local durable intake backend is installed as a Node script.

A public browser/API endpoint is not installed yet.

Current Status

repo_local_backend: installed
backend_script: scripts/proposal-intake-backend.mjs
durable_candidate_write: installed
durable_receipt_issuance: installed_repo_local
durable_queue_write: installed_repo_local
queue_index_write: installed_repo_local
browser_api_endpoint: not_installed
automatic_ai_review: not_installed
automatic_decision_publication: not_installed

Repo-Local Command

npm run intake:proposal -- fixtures/intake/submission.valid.example.json

The command writes durable artifacts under:

static/governance/intake/candidates/
static/governance/intake/receipts/
static/governance/intake/queue/
static/governance/intake/queue/index.json

Runtime Validation

The runtime validator executes the backend in a temporary directory and verifies candidate, receipt, queue, and index output without polluting the repository.

npm run validate:proposal-intake-runtime

Intended Endpoint Shape

POST /api/wiki/proposals/intake

This endpoint shape is reserved for a future browser/API wrapper around the repo-local backend contract.

Request Body

{
"manifest": {
"schema": "admissibility_wiki_submission_manifest.v1"
},
"receipt_request": {
"include_submission_timing": true,
"include_hashes": true,
"include_replay_expectation": true
},
"submission_context": {
"origin": "browser | api | ecosystem_agent | maintainer_tool",
"user_visible_mode": "guided_builder | direct_paste",
"submitted_at_client": "2026-06-19T00:00:00Z"
}
}

Response Body

{
"receipt": {
"schema": "admissibility_wiki_submission_receipt.v1",
"receipt_id": "receipt.generated.example",
"proposal_id": "proposal.generated.example",
"received_at": "2026-06-19T00:00:00Z",
"receipt_issued_at": "2026-06-19T00:00:05Z",
"submission_lane": "lane_1_manifest_receipt",
"preference_posture": "preferred_triage",
"validation_posture": "valid_manifest",
"tasks": []
},
"queue_result": {
"queued": true,
"queue_id": "queue.generated.example",
"review_route": "admissibility_wiki_ai_entity"
},
"non_claims": [
"Receipt does not accept the proposal.",
"Receipt does not prove the submitted claim.",
"Receipt does not create equivalent-term standing.",
"Queue placement does not create decision authority."
]
}

Required Backend Tasks

The backend records timing for:

receive_request
parse_manifest
validate_manifest_schema
classify_submission_lane
assign_preference_posture
compute_submission_hashes
write_candidate_record
write_queue_record
issue_submission_receipt

Required Hashes

A backend implementation should generate hashes for:

  • raw submitted body;
  • normalized manifest;
  • issued receipt;
  • queue record;
  • related evidence attachments when present.

Queue Boundary

Queue placement does not accept a proposal.

Queue placement only means the proposal is available for review.

Review Boundary

AI review may recommend classification, duplicate status, relationship type, transition-origin posture, and evidence posture.

AI review must not silently publish glossary changes or decision records.

Decision Boundary

Only a decision record can accept, deny, defer, escalate, refuse, or supersede a proposal.

Receipt issuance and queue placement are not decision records.

Browser/API Active Criteria

The public browser/API backend can be called active only when:

  • a deployed endpoint accepts a manifest/receipt preview object;
  • schema validation runs server-side;
  • malformed submissions produce bounded error receipts or rejection records;
  • valid submissions receive durable receipt IDs;
  • queue records are written durably;
  • timing tasks are recorded;
  • hashes are recorded;
  • decision records remain separate from receipts;
  • test fixtures exist for guided-builder and direct-paste submissions.