Skip to content

feat: review and activate a registered custom epoch - #69

Open
iperev wants to merge 1 commit into
docs/ingress-scheduling-designfrom
feat/custom-epoch-review
Open

iperev wants to merge 1 commit into
docs/ingress-scheduling-designfrom
feat/custom-epoch-review

Conversation

@iperev

@iperev iperev commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Stacked PR 14 — base: #68 (docs/ingress-scheduling-design). Do not merge yet. Review only the top commit.

Context

ROADMAP CI-018. An epoch registered through POST /api/v1/config/epochs could never be activated, because review and activation were keyed to a rediscovered proposal manifest.

What changed

  • One discriminated review subject in the proposal-review owner, reusing its attestation, one-use consumption, GitHub recheck and scope lock.
  • Start body ci-registered-epoch-attestation-start/v1. It re-admits the exact in-scope epoch that has a standalone registration receipt, and keeps target_missing, target_ineligible, source_mismatch, blocked and stale distinct. It binds source hash, earliest registrant, revision, inventory digest and baseline.
  • The custom cookie is kept separate from the proposal cookie (distinct associated data and subjectKind). Each subject consumes only its own pending table.
  • The callback rediscovers, re-checks under the scope lock, and writes an immutable review plus audit. Review never activates.
  • Activation wire ci-config-epoch-activation/v3, evidence hash registered-epoch-activation-authority/v1, audit config-epoch-activation-audit/v3.
  • Expand revision 20261011_0019 with capability registered-epoch-review/v1.
  • OpenAPI and the generated TS client are regenerated; docs, requirement text and Proofkit bindings are updated.
  • Binding owner decisions:
    • D5: the inventory must be complete and the local graph closed.
    • D7: no separation-of-duties rule; the registrant is recorded.
  • Provisional owner decisions (2026-10-11):
    • D4: freshness is the exact default-head revision and inventory digest.
    • D6: a new immutable table and activation wire v3.
    • D9: API and generated client only.

Expected result

A reviewed registered epoch activates only through its own v3 selector, after a fresh GitHub recheck with the baseline and inventory unchanged. Proposal v1/v2 wire, audit bytes, replay, cookies and pending challenges are unchanged.

Non-claims:

  • No UI journey (CI-019).
  • No rollback restriction (D8 is a separate change).
  • No revision-independent freshness.
  • No live provider, deployment or replication evidence.
  • Native witnesses are unexecuted locally, and closure requires merged exact-source qualification.

Independent review: gpt-6-astra (xhigh); the fixture-clock finding was fixed. Owner decisions: D5/D7 binding; D4/D6/D9 provisional (2026-10-11). Rollback restriction D8 is delivered separately in #66. Note: the migration head moves to 20261011_0019.

An epoch registered through POST /api/v1/config/epochs could never satisfy
activation: every review and activation path was keyed to a rediscovered
proposal manifest (ROADMAP CI-018). This adds one discriminated review
subject to the proposal-review owner, reusing its one-use attestation,
consumption, GitHub recheck and scope-lock mechanisms.

ci-registered-epoch-attestation-start/v1 re-reads and re-admits the exact
in-scope epoch that has a standalone registration receipt, and keeps
target_missing, target_ineligible (no receipt, e.g. proposal-created) and
source_mismatch distinct before provider work. It requires a complete,
locally closed current-default-head inventory (owner decision D5) and binds
source hash, revision, inventory digest, baseline, session, actor and
profile to a cookie sealed under distinct associated data with an exact
subjectKind key set; the callback dispatches by the cookie that opens and
consumes only the registered-epoch pending relation. The callback
rediscovers (stale on a moved head or changed inventory), re-checks the
baseline and subject under the scope lock and retains an immutable review
plus pair-owned audit naming the earliest standalone registrant (D7, no
separation-of-duties rule). Review never changes the active pointer.

ci-config-epoch-activation/v3 selects registeredEpochReviewOperationId and
expectedSourceHash, re-loads receipt, baseline and subject, samples
database time, rechecks GitHub permission and requires the exact reviewed
revision and digest (provisional D4); evidence hash
registered-epoch-activation-authority/v1 and audit
config-epoch-activation-audit/v3. v1/v2 wire, audit bytes and replay are
unchanged and cross-subject selectors conflict.

Expand revision 20261011_0019 adds capability registered-epoch-review/v1
with registered_epoch_attestation_transactions and the immutable
registered_epoch_reviews (existing review immutability routine), an exact
catalog contract, result/runtime attestation and least-privilege grants
(provisional D6). Proposal relations and cookie bytes are untouched, so no
pending challenge is invalidated. OpenAPI and the generated client are
regenerated; UI stays with CI-019 (provisional D9). Rollback (D8) is out of
scope.

Native PostgreSQL, unit, vitest and mutation witnesses are unexecuted
locally and run only in GitHub CI; no provider, deployment or UI evidence
is claimed.
@iperev
iperev force-pushed the feat/custom-epoch-review branch from ce975fd to ed3ccc3 Compare October 12, 2026 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant