Skip to content

feat(sp01): SafePush admission, RSI promotion gate and slice oracles - #168

Open
trukhinyuri wants to merge 3 commits into
mainfrom
codex/safepush-admission
Open

trukhinyuri wants to merge 3 commits into
mainfrom
codex/safepush-admission

Conversation

@trukhinyuri

@trukhinyuri trukhinyuri commented Sep 19, 2026 •

Copy link
Copy Markdown
Member

This PR delivers slice SP01 from roadmap/DELIVERY_SLICES.md. C02 and C08 promotion depend on it.

SafePush checks GitHub CI workflow-run provenance before it admits a push. This part is the earlier SafePush branch with 15 files.

pkg/rsi adds a deterministic promotion gate. It classifies each change and protects control files. It keeps two last-known-good slots and enforces invariants S1–S6. A kill switch lowers the autonomy ceiling when the change failure rate is too high.

pkg/sliceoracles loads 32 slice oracles from contracts/slice-oracles/oracles-32.json. It allows at most two concurrent write PRs per repository. They must target different slices and disjoint paths. Paths are normalized before the check.

The roadmap splits core and qualification work for the service slices. C24 now follows C14. C02 now requires SP01.

Checked locally on the branch head. go vet is clean. go test passes in 60 packages. The pkg/rsi fuzz test passes for 20 seconds. GitHub Actions has not run yet.

@trukhinyuri
trukhinyuri force-pushed the codex/safepush-admission branch from ec1cc52 to eb45b0c Compare November 1, 2026 17:10
Signed-off-by: Iurii Trukhin <yuri@trukhin.com>
@trukhinyuri
trukhinyuri force-pushed the codex/safepush-admission branch from eb45b0c to e982c7b Compare November 6, 2026 00:02
…ce delivery contract

SP01 adds the guardrails that let a delivery slice be accepted against a
pre-approved oracle instead of waiting on a per-slice manual sign-off:

- pkg/rsi: deterministic promotion gate (G1-G7) with change classes K0-K4,
  protected control files, two-slot last-known-good rollback invariants
  (S1-S6), mutation, holdout and seeded-error thresholds, and a kill switch
  that lowers the autonomy ceiling when the change failure rate is exceeded.
- pkg/sliceoracles and contracts/slice-oracles/oracles-32.json: the batch of
  32 slice oracles (C01-C28, SP01, DBAAS, DNSAAS, FILESAAS), the split of
  hardware-gated slices, and validation that two concurrent write PRs own
  disjoint paths.
- roadmap: C15-C17, C20 and the standalone OCS services split into CORE
  (after C11) and QUAL (after C13 and C14); C24 follows C14; at most two
  concurrent write PRs per repository for distinct slices.
@trukhinyuri trukhinyuri changed the title feat(safepush): GitHub CI provenance admission (+3009, completed Sept 9 work) feat(sp01): SafePush admission, RSI promotion gate and slice oracles Nov 8, 2026
The SP01 oracle could never pass. There was no evaluate command and no
slice profile. Every candidate also needed a live canary, deploy history
and a recovery drill, although a merge into this repository deploys
nothing.

pkg/rsi now separates merge admission from deploy admission. Deploy
admission runs every gate and needs an S1-S6 receipt. A merge claim
with deployment evidence is evaluated as deploy. Merge admission is
allowed only into opencloudtech/CloudRING main. A first deploy without
history needs K4. Profile keys must match field names exactly, and
references must name a record.

cloudringctl rsi evaluate runs a slice profile. All 32 slice oracles use
it, and the declared class of each oracle covers its allowed paths.

cmd/cloudring-mutation measures G2 on the changed lines. It mutates the
files go build compiles, needs a green baseline before and after the
mutants, and confirms each kill with a second failing run. gremlins
v0.6.0 counted build failures as kills and never ran the tests of cmd/
packages, so its statuses are no longer used.

EXECUTION_CONTRACT.md documents the admission rules and the G2 method.
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