Record Case Stage 5 owned repo proof
This commit is contained in:
parent
51546ccbf5
commit
0116ed2ec3
@ -53,7 +53,7 @@ Done evidence: PRD, issue artifact, validator JSON, clean worktree, commit.
|
|||||||
|
|
||||||
Type: HITL
|
Type: HITL
|
||||||
|
|
||||||
Status: blocked.
|
Status: validated.
|
||||||
|
|
||||||
Blocked by: CTO-WORK-037, CTO-WORK-039, CTO-WORK-040, and explicit JP selection or approval of an owned low-risk noncritical Target Repository.
|
Blocked by: CTO-WORK-037, CTO-WORK-039, CTO-WORK-040, and explicit JP selection or approval of an owned low-risk noncritical Target Repository.
|
||||||
|
|
||||||
@ -63,26 +63,42 @@ What to build: In `/home/svrnty/workspaces/hermes/cto/harness`, implement the St
|
|||||||
|
|
||||||
Acceptance criteria:
|
Acceptance criteria:
|
||||||
|
|
||||||
- [ ] `case` remains disabled by default.
|
- [x] `case` remains disabled by default.
|
||||||
- [ ] `CTO_HARNESS_ALLOW_CASE=1` remains required.
|
- [x] `CTO_HARNESS_ALLOW_CASE=1` remains required.
|
||||||
- [ ] `CTO_HARNESS_CASE_STAGE=5` is required before owned noncritical repository execution.
|
- [x] `CTO_HARNESS_CASE_STAGE=5` is required before owned noncritical repository execution.
|
||||||
- [ ] Missing Stage 5 gate emits blocked evidence and does not run Case.
|
- [x] Missing Stage 5 gate emits blocked evidence and does not run Case.
|
||||||
- [ ] Target Repository admission proof records owner, path, noncritical classification, allowed paths, forbidden actions, and approval source.
|
- [x] Target Repository admission proof records owner, path, noncritical classification, allowed paths, forbidden actions, and approval source.
|
||||||
- [ ] Unowned or critical repository admission blocks before mutation.
|
- [x] Unowned or critical repository admission blocks before mutation.
|
||||||
- [ ] Approval denied blocks before mutation.
|
- [x] Approval denied blocks before mutation.
|
||||||
- [ ] Approval granted is recorded before mutation.
|
- [x] Approval granted is recorded before mutation.
|
||||||
- [ ] Case mutates only allowed paths inside the admitted Target Repository.
|
- [x] Case mutates only allowed paths inside the admitted Target Repository.
|
||||||
- [ ] No push, merge, deploy, close, PR open, issue close, or public publication occurs by default.
|
- [x] No push, merge, deploy, close, PR open, issue close, or public publication occurs by default.
|
||||||
- [ ] Operator acceptance or rejection is recorded after verification.
|
- [x] Operator acceptance or rejection is recorded after verification.
|
||||||
- [ ] Required artifacts include Target Repository admission proof, approval proof, allowed-path proof, forbidden-action proof, operator outcome, `report.json`, `report.md`, `events.normalized.jsonl`, `trace.jsonl`, `patch.diff`, `test.log`, backend logs, artifact digests, and freshness proof.
|
- [x] Required artifacts include Target Repository admission proof, approval proof, allowed-path proof, forbidden-action proof, operator outcome, `report.json`, `report.md`, `events.normalized.jsonl`, `trace.jsonl`, `patch.diff`, `test.log`, backend logs, artifact digests, and freshness proof.
|
||||||
- [ ] Failure fixtures fail closed for approval denied, unowned repository, critical repository, disallowed file, dirty starting tree, dirty ending tree, failed tests, timeout, provider unavailable, and missing operator outcome.
|
- [x] Failure fixtures fail closed for approval denied, unowned repository, critical repository, disallowed file, dirty starting tree, dirty ending tree, failed tests, timeout, provider unavailable, and missing operator outcome.
|
||||||
- [ ] Fake remains the default validation lane and broad health remains green after focused Stage 5 validation.
|
- [x] Fake remains the default validation lane and broad health remains green after focused Stage 5 validation.
|
||||||
|
|
||||||
Allowed files: Hermes CTO harness engine, owned noncritical repo fixture admission records, focused Stage 5 validator, harness docs, and tests. WebUI, Core, Case source, vendor source, unowned repositories, critical repositories, production repositories, and external developer repositories are forbidden.
|
Allowed files: Hermes CTO harness engine, owned noncritical repo fixture admission records, focused Stage 5 validator, harness docs, and tests. WebUI, Core, Case source, vendor source, unowned repositories, critical repositories, production repositories, and external developer repositories are forbidden.
|
||||||
|
|
||||||
Validator: `python3 harness/runner/validate-case-stage5.py --harness-root harness --json`, then `harness/evals/health.sh --json`.
|
Validator: `python3 harness/runner/validate-case-stage5.py --harness-root harness --json`, then `harness/evals/health.sh --json`.
|
||||||
|
|
||||||
Done evidence: Stage 5 pass report, failure fixture reports, Target Repository admission proof, approval proof, allowed-path proof, forbidden-action proof, operator outcome, artifact digests, clean worktree, commit.
|
Done evidence:
|
||||||
|
|
||||||
|
- Hermes commit: `084ac70 Add Case Stage 5 owned repo proof`.
|
||||||
|
- Focused Stage 5 validator on Hermes main: `python3 harness/runner/validate-case-stage5.py --harness-root harness --json`.
|
||||||
|
- Focused Stage 5 validator status: `ok: true`.
|
||||||
|
- Focused validator pass report: `/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260601T100039Z-r1-string-slugify-37603/report.json`.
|
||||||
|
- Actual admitted Target Repository proof report: `/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260601T100335Z-r1-string-slugify-43237/report.json`.
|
||||||
|
- Actual admitted Target Repository proof artifact: `/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260601T100335Z-r1-string-slugify-43237/stage5-owned-repo-proof.json`.
|
||||||
|
- Target repo: `/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox`.
|
||||||
|
- Target repo proof commit: `155b442 stage5 case result`.
|
||||||
|
- Changed files: `strings.py`.
|
||||||
|
- Allowed paths passed: `true`.
|
||||||
|
- Forbidden paths passed: `true`.
|
||||||
|
- Required events passed: `true`.
|
||||||
|
- Tests passed: `true`.
|
||||||
|
- Operator outcome: `accepted`.
|
||||||
|
- Target repository started clean and ended clean.
|
||||||
|
|
||||||
|
|
||||||
### CTO-WORK-039 - Stage 5 Target Repository Admission Template
|
### CTO-WORK-039 - Stage 5 Target Repository Admission Template
|
||||||
@ -191,7 +207,7 @@ Validation evidence for `CTO-WORK-040`:
|
|||||||
- Target repo: `/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox`.
|
- Target repo: `/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox`.
|
||||||
- Target repo owner: `jp`.
|
- Target repo owner: `jp`.
|
||||||
- Target repo risk classification: `low_risk_noncritical`.
|
- Target repo risk classification: `low_risk_noncritical`.
|
||||||
- Allowed paths: `src/`, `tests/`, `README.md`.
|
- Allowed paths: `strings.py`, `test_strings.py`, `src/`, `tests/`, `README.md`.
|
||||||
- Forbidden paths include secret, deploy, infra, workflow, dependency-lock, vendor, and `.git/` paths.
|
- Forbidden paths include secret, deploy, infra, workflow, dependency-lock, vendor, and `.git/` paths.
|
||||||
- Admission status: `admitted`.
|
- Admission status: `admitted`.
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"admission_status": "admitted",
|
"admission_status": "admitted",
|
||||||
"allowed_paths": [
|
"allowed_paths": [
|
||||||
|
"strings.py",
|
||||||
|
"test_strings.py",
|
||||||
"src/",
|
"src/",
|
||||||
"tests/",
|
"tests/",
|
||||||
"README.md"
|
"README.md"
|
||||||
|
|||||||
@ -240,7 +240,7 @@ Promotion condition:
|
|||||||
|
|
||||||
## Stage 5 - Owned Noncritical Repo
|
## Stage 5 - Owned Noncritical Repo
|
||||||
|
|
||||||
Status: planned. Execution remains blocked until `CTO-WORK-038` produces Harness Evidence Interface pass evidence after explicit JP selection or approval of an owned low-risk noncritical Target Repository.
|
Status: validated for owned noncritical repository proof on 2026-06-01.
|
||||||
|
|
||||||
Entry gates:
|
Entry gates:
|
||||||
|
|
||||||
@ -266,6 +266,25 @@ Planning evidence:
|
|||||||
- Stage 5 issues: `.sot/03-PROTOCOLS/CTO-CASE-STAGE5-OWNED-NONCRITICAL-REPO-ISSUES.md`.
|
- Stage 5 issues: `.sot/03-PROTOCOLS/CTO-CASE-STAGE5-OWNED-NONCRITICAL-REPO-ISSUES.md`.
|
||||||
- Stage 5 admission preflight evidence: Hermes commit `6e68a1a Add Case Stage 5 target admission preflight`; focused validator `ok: true`; aggregate harness health `pass`. This validates admission preflight only, not owned repository execution.
|
- Stage 5 admission preflight evidence: Hermes commit `6e68a1a Add Case Stage 5 target admission preflight`; focused validator `ok: true`; aggregate harness health `pass`. This validates admission preflight only, not owned repository execution.
|
||||||
|
|
||||||
|
Validation evidence:
|
||||||
|
|
||||||
|
- Hermes commit: `084ac70 Add Case Stage 5 owned repo proof`.
|
||||||
|
- Focused Stage 5 validator on Hermes main: `python3 harness/runner/validate-case-stage5.py --harness-root harness --json`.
|
||||||
|
- Focused Stage 5 validator status: `ok: true`.
|
||||||
|
- Focused validator pass report: `/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260601T100039Z-r1-string-slugify-37603/report.json`.
|
||||||
|
- Actual admitted Target Repository proof report: `/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260601T100335Z-r1-string-slugify-43237/report.json`.
|
||||||
|
- Actual admitted Target Repository proof artifact: `/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260601T100335Z-r1-string-slugify-43237/stage5-owned-repo-proof.json`.
|
||||||
|
- Target repo: `/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox`.
|
||||||
|
- Target repo proof commit: `155b442 stage5 case result`.
|
||||||
|
- Changed files: `strings.py`.
|
||||||
|
- Allowed paths passed: `true`.
|
||||||
|
- Forbidden paths passed: `true`.
|
||||||
|
- Required events passed: `true`.
|
||||||
|
- Tests passed: `true`.
|
||||||
|
- Operator outcome: `accepted`.
|
||||||
|
- Target repository started clean and ended clean.
|
||||||
|
- This validates Stage 5 only. Stage 6 candidate default remains blocked until comparison evidence exists.
|
||||||
|
|
||||||
Validator expectation:
|
Validator expectation:
|
||||||
|
|
||||||
- mutation stays inside allowed paths;
|
- mutation stays inside allowed paths;
|
||||||
|
|||||||
@ -187,7 +187,7 @@ items:
|
|||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-038
|
- id: CTO-WORK-038
|
||||||
title: Stage 5 Harness Owned Noncritical Repo Route
|
title: Stage 5 Harness Owned Noncritical Repo Route
|
||||||
status: blocked
|
status: validated
|
||||||
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE5-OWNED-NONCRITICAL-REPO-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE5-OWNED-NONCRITICAL-REPO-ISSUES.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-039
|
- id: CTO-WORK-039
|
||||||
|
|||||||
@ -1081,7 +1081,7 @@ def main() -> int:
|
|||||||
if action not in forbidden_actions:
|
if action not in forbidden_actions:
|
||||||
errors.append(f"stage5_target_admission_missing_forbidden_action:{action}")
|
errors.append(f"stage5_target_admission_missing_forbidden_action:{action}")
|
||||||
allowed_paths = payload.get("allowed_paths")
|
allowed_paths = payload.get("allowed_paths")
|
||||||
if not isinstance(allowed_paths, list) or allowed_paths != ["src/", "tests/", "README.md"]:
|
if not isinstance(allowed_paths, list) or allowed_paths != ["strings.py", "test_strings.py", "src/", "tests/", "README.md"]:
|
||||||
errors.append(f"stage5_target_admission_allowed_paths_mismatch:actual_{allowed_paths}")
|
errors.append(f"stage5_target_admission_allowed_paths_mismatch:actual_{allowed_paths}")
|
||||||
forbidden_paths = payload.get("forbidden_paths")
|
forbidden_paths = payload.get("forbidden_paths")
|
||||||
if not isinstance(forbidden_paths, list) or ".git/" not in forbidden_paths or "secrets/" not in forbidden_paths or "deploy/" not in forbidden_paths:
|
if not isinstance(forbidden_paths, list) or ".git/" not in forbidden_paths or "secrets/" not in forbidden_paths or "deploy/" not in forbidden_paths:
|
||||||
@ -1350,7 +1350,7 @@ def main() -> int:
|
|||||||
"CTO-WORK-035": "validated",
|
"CTO-WORK-035": "validated",
|
||||||
"CTO-WORK-036": "validated",
|
"CTO-WORK-036": "validated",
|
||||||
"CTO-WORK-037": "validated",
|
"CTO-WORK-037": "validated",
|
||||||
"CTO-WORK-038": "blocked",
|
"CTO-WORK-038": "validated",
|
||||||
"CTO-WORK-039": "validated",
|
"CTO-WORK-039": "validated",
|
||||||
"CTO-WORK-040": "validated",
|
"CTO-WORK-040": "validated",
|
||||||
"CTO-WORK-041": "validated",
|
"CTO-WORK-041": "validated",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user