Skip to content

docs: CS-RG qualification report, supported modes, adoption and rollback (CSRG-U6) - #99

Merged
novelKR merged 2 commits into
mainfrom
claude/project-thread-af6ntg
Oct 14, 2026
Merged

novelKR merged 2 commits into
mainfrom
claude/project-thread-af6ntg

Conversation

@novelKR

@novelKR novelKR commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Records the qualification of CS-RG by CSRG-U6: what the runs on the frozen candidate ca306ee showed, the supported modes, how to adopt the qualified combination and roll it back, and one amendment to the protocol's regression command. Documentation only: the code tree stays the candidate's.

No pin change. No change to the installed service.

Issue

Scope: CSRG-U6, steps 7 to 9 of the qualification plan. Tracked in #76 and novelKR/DevGuard#14. This PR does not close an issue. DevGuard's milestone ledger records the result in its own PR after this one merges.

Item Value
Base main at ca306ee (#98's merge), the candidate
Head 68e274d
Code tree SHA-256 32235f28b930ec1487f6ca508ff6b0c7f77772275462080972c3cfe1d2b4245f on the base and on the head, as the candidate suite recorded it; everything this PR changes is under docs/
Pins Codex gitlink 6b9826e3 with the recorded patch, DevGuard 6e7e065; both unchanged

Summary

Before: the protocol said what a qualification run must show, and the integration guide said that CS-RG was not qualified. No document recorded a result, the supported modes or how to adopt and roll back.

After: CS-RG is qualified on macOS for one exact combination: CodeSpace ca306ee (or a later commit with the same code tree), DevGuard's client 6e7e065, the release 0.1.0-6e7e065-94d85365 under the policy with the codespace consumer, Codex 6b9826e with the recorded patch, and Rust 1.95.0. It covers participation required in the runner modes in-process and uds with --runtime-bin, each with pipe and PTY executions, and off and required workspaces in one gateway. Every other mode is unsupported or keeps its existing behavior, and Linux required stays unsupported until DG-LINUX.

How.

  • docs/cs-rg-qualification-report.md, new, with its Korean translation: each claim with its level (implemented, feature-verified, platform-verified or qualified), the exact combination, every run with its result, the accounting items, the regression stages and Linux CI, the amendments, the evidence directories with their MANIFEST.json SHA-256, and what stays outside CS-RG.
  • docs/devguard-integration.md and its translation: the status names the qualification, and a new section, "Qualification and adoption (CSRG-U6)", gives the combination, the supported modes, five adoption steps and the rollback.
  • docs/cs-rg-qualification.md and its translation: the status line, and the regression command corrected to the two invocations that run every stage.
  • docs/translations.json: the new pair, in the project group after the protocol, and the recorded hashes of the three changed pairs.

Contract changes

None. No tool schema, error code, status value, ID or code changes.

Tests

The qualification runs, on the qualification host (Mac mini, Apple M1, macOS 27.0), on the candidate's binaries, in the minimal environment with Rust 1.95.0. Each run is sealed, and verify recomputed its verdicts from the raw files:

Run Result MANIFEST.json SHA-256
candidate passed 3e3587d1…dc95
matrix passed: 45 of 45 scenarios (22 in in-process, 23 in uds) faf673aa…d688
faults passed: 27 of 27 cases (13 in each mode, and worker-killed in uds) b000a94a…5025
authority passed: 10 of 10 phases c4a7fb26…8256
control --rehearsal inconclusive only because a rehearsal is shorter than the protocol, as designed; all four intervals passed ac79024e…039f
control qualified: both runner modes, three repetitions each, all twelve intervals passed 7706aac7…e9be
regression stages, all every stage passed except linux-isolation, which needs Linux: 782 tests passed, none failed, 9 ignored 2825fb3c…e52e
regression stages, macos-core and macos-fork-race passed: 189 tests, none failed, 9 ignored; 400 fork-race trials, none failed 5d160894…c2bd

The control run, from 23:24 UTC on 2026-10-13 to 03:33 UTC on 2026-10-14 under DG-1's cold load against the installed release, in every interval:

Item Worst interval Target
Status p99 4.922 ms 500 ms
Termination acknowledgement p99 0.804 ms 1,000 ms
Process group gone p99, and DevGuard's release p99 92.9 ms, and 208.3 ms reported
I/O echo p99, and refusal p99 25.798 ms, and 62.233 ms reported

No slot was missed, no I/O line or MCP connection was lost, nothing stayed charged, no execution was launched twice and no uncertain attempt was admitted again. DG-1's load made 1,199 runs, all of which succeeded. Every host sample was at memory pressure level 1, the execution owner stayed within the codespace reservation (at most 19.3 MiB, 16 threads and a mean of 2.5 mCPU), and the service kept process ID 23023 throughout. A scan of both control runs' evidence and logs, 1,479 files, found no credential digest, token or environment dump.

Linux CI on the candidate: the scheduled run 38484155990 ran the full profile and passed every job, linux-isolation, integration and unit-devguard included.

Verified in the cloud (Linux) on this head:

  • python3 scripts/check_docs.py: "Documentation registry verified: 20 paired documents".
  • The documentation site with the pinned Node 24.21.0: npm test --prefix docs-site, npm run build --prefix docs-site and python3 -B docs-site/scripts/site.py check passed ("Site verified: 179 hashed files, 43 HTML pages").
  • The harness's code_tree gives 32235f28…245f for this head and for ca306ee.

CI: passed on this head in run 38522508732: the plan, the policy scan, format and upstream pin, and the rust gate. The plan selected no Rust leg, because nothing outside docs/ changed. The documentation site's run 38522509115 built the site; it deploys only from main.

Security scenarios

  • Rollback honesty. The rollback never turns required into off: a gateway restarted without --devguard register refuses a required workspace's new executions with RESOURCE_POLICY_UNSUPPORTED, and one without a launch helper with MANAGED_LAUNCH_UNAVAILABLE. Running governed processes stay under CodeSpace's control while DevGuard is down, and an attempt DevGuard cannot settle stays charged as Suspect and is never launched again.
  • What is published. The report names hashes of binaries, evidence manifests and DevGuard's qualification record. It names no credential, credential digest, host.toml hash or child environment; those stay in the sealed record on the host, and the evidence directories were scanned for them.
  • Claims match the evidence. Each claim names its level, and the unsupported modes, the untested replay on the runner wire and the unmeasured warm load are stated as such.

Out of scope

  • P1-RECOVERY, which starts only with the owner's separate authorization, and DG-LINUX, DG-CACHE, DG-ADAPTERS and Codex convergence.
  • Any other combination: a new pin, release, policy, host, toolchain or code change is a new candidate.
  • DevGuard's ledger, updated in a follow-up PR in novelKR/DevGuard.

Adds the qualification report in English and Korean: the claims by
level, the qualified combination, every run on the frozen candidate
ca306ee with its result and sealed evidence, the accounting items, the
regression stages and Linux CI, the amendments, and what stays outside
CS-RG. The integration guide gains the qualification and adoption
section, with the supported modes, the adoption steps and the rollback,
and the protocol's status names the result. The protocol's regression
command is corrected to the two invocations that run every stage.

The control-path section and its accounting cells still wait for the
measurement's per-interval values; the run itself qualified.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The control run on the candidate qualified on 2026-10-14: both runner
modes, three repetitions each, and all twelve idle and load intervals
passed under DG-1's cold load. The report now has its per-interval
values (status p99 at most 4.922 ms against 500 ms, acknowledgement p99
at most 0.804 ms against 1 second), the scope's end, release, I/O and
refusal times, the load's 1,199 runs, the host's pressure and the
execution owner's footprint against its reservation, the accounting
cells that depend on them, and both control runs' evidence hashes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@novelKR
novelKR marked this pull request as ready for review October 14, 2026 06:31
@novelKR
novelKR merged commit 241cf6c into main Oct 14, 2026
11 checks passed
novelKR pushed a commit to novelKR/DevGuard that referenced this pull request Oct 14, 2026
CodeSpace's CSRG-U6 qualified CS-RG for one exact combination
(novelKR/CodeSpace#99, merged as 241cf6c): CodeSpace ca306ee,
DevGuard's client 6e7e065, release 0.1.0-6e7e065-94d85365 under the
policy with the codespace consumer, Codex 6b9826e with its recorded
patch and Rust 1.95.0, in the runner modes in-process and uds, pipe
and PTY. Record CS-RG as implemented, qualification macos-qualified,
with its qualified_combination, and CSRG-U6 as merged-verified.

The current-state notes, CS-RG's row, V-CS-RG and the R3 gate cite
CodeSpace's report. The suspension of this plan's CSRG-C units and
the historical text are unchanged; Linux required stays unsupported
until DG-LINUX, and P1-RECOVERY starts only on the owner's separate
authorization. English and Korean; planning-readme,
planning-consumer-readiness, planning-milestones-cs-rg and
planning-verification hashes recorded.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.

2 participants