From ada090f0a267ffd938eaf6d42ebf46aded997544 Mon Sep 17 00:00:00 2001 From: Thorsten Hindermann Date: Tue, 14 Jul 2026 02:22:02 +0200 Subject: [PATCH] chore: adopt autonomous governance v0.1.4 --- .agents/skills/speckit-autonomous/SKILL.md | 30 +- .claude/skills/speckit-autonomous/SKILL.md | 20 ++ .github/agents/copilot-instructions.md | 4 +- .github/agents/speckit.autonomous.agent.md | 20 ++ .github/copilot-instructions.md | 4 +- .opencode/command/speckit.autonomous.md | 20 ++ .specify/presets/.registry | 6 +- .../autonomous-run-governance/README.md | 48 ++- .../commands/speckit.autonomous.md | 20 ++ .../man/validate-autonomous-gate-evidence.1 | 45 +++ .../autonomous-run-governance/preset.yml | 12 +- .../validate-autonomous-gate-evidence.ps1 | 302 ++++++++++++++++++ .../validate-autonomous-gate-evidence.sh | 283 ++++++++++++++++ .../templates/agent-file-addendum.md | 10 + .../autonomous-run-evidence-template.md | 18 +- ...autonomous-run-gate-evidence-template.json | 25 ++ ...nomous-run-gate-requirements-template.json | 16 + ...nomous-run-readiness-checklist-template.md | 10 + .../templates/autonomous-runbook-template.md | 19 ++ .../templates/constitution-addendum.md | 3 + .../templates/field-validation-summary.md | 17 +- .../templates/plan-addendum.md | 4 + .../templates/spec-addendum.md | 3 + .../templates/tasks-addendum.md | 11 + .specify/templates/agent-file-template.md | 26 +- AGENTS.md | 4 +- CLAUDE.md | 4 +- GEMINI.md | 4 +- docs/project-statistics.md | 75 ++--- .../preset-adoption-v0.1.4-evidence.md | 136 ++++++++ 30 files changed, 1125 insertions(+), 74 deletions(-) create mode 100644 .specify/presets/autonomous-run-governance/docs/man/validate-autonomous-gate-evidence.1 create mode 100644 .specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.ps1 create mode 100644 .specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.sh create mode 100644 .specify/presets/autonomous-run-governance/templates/autonomous-run-gate-evidence-template.json create mode 100644 .specify/presets/autonomous-run-governance/templates/autonomous-run-gate-requirements-template.json create mode 100644 specs/026-component-data-conformance-hardening/preset-adoption-v0.1.4-evidence.md diff --git a/.agents/skills/speckit-autonomous/SKILL.md b/.agents/skills/speckit-autonomous/SKILL.md index 91bbf1f2..ab1690ca 100644 --- a/.agents/skills/speckit-autonomous/SKILL.md +++ b/.agents/skills/speckit-autonomous/SKILL.md @@ -18,9 +18,10 @@ stages; this skill only orchestrates them and enforces cross-stage gates. 3. Determine the delegated delivery mode from the user's request: `LocalImplementation`, `PublishPR`, or `MergeAndSync`. Never infer remote write or merge authority from general autonomy alone. -4. Confirm intake ordering, branch identity, clean ownership boundaries, and - the six installed governance presets. Stop only for a material conflict, - missing required authority, destructive ambiguity, or an unmet hard gate. +4. Confirm intake ordering, branch identity, clean ownership boundaries, the + six baseline governance presets, and optional `autonomous-run-governance` + v0.1.4. Stop only for a material conflict, missing required authority, + destructive ambiguity, or an unmet hard gate. 5. Create the numbered feature branch through `speckit-git-feature` when a new feature is required. Resume the existing branch and feature directory when the run already exists. @@ -45,6 +46,12 @@ Create `specs/NNN-feature/pr-evidence.md` from implementation edit. Keep scope, decisions, commands, results, skipped triggers, residual risks, review state, and follow-ups current during the run. +Before implementation, resolve +`autonomous-run-gate-requirements-template` and create the reviewed +`specs/NNN-feature/autonomous-gate-requirements.json`. Give every acceptance +gate a stable ID, required scope, command tokens, optional runner/platform +tokens, and either `Applicable` or a justified `N/A` with re-evaluation trigger. + ## Converge - Clarification converges when no remaining question would materially change @@ -59,10 +66,12 @@ triggers, residual risks, review state, and follow-ups current during the run. - Remote review converges when required checks pass and no actionable review thread remains. Record unavailable reviewers or quota failures as evidence; never represent them as successful reviews. -- Before merge, map every acceptance-specific gate to the actual workflow, job, - platform, and command that produced its evidence. A green aggregate or an OS - name is insufficient when the job did not execute the required runtime, - platform, documentation, security, or other proof. Missing scope blocks merge. +- Before merge, derive every acceptance-specific gate's command and runner from + workflow definitions or job logs, never from a green aggregate, workflow, + job, or OS-shaped name. Create temporary provider-neutral exact-head evidence + from `autonomous-run-gate-evidence-template` and run the installed Bash or + PowerShell validator. Missing, stale, contradictory, empty, duplicate-Primary, + or token-mismatched evidence blocks merge; bypass supplies no proof. ## Shape Work @@ -116,6 +125,13 @@ channel contains no PowerShell error record, shell command-not-found message, or equivalent fatal signature. A nominal zero exit status does not override such an error; record the helper as failed and route the defect to bounded remediation. +For `PublishPR` or `MergeAndSync`, validate the final reviewed head with +`bash .specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.sh` +on macOS/Linux or `pwsh -NoProfile -File` with the matching `.ps1` on Windows; +installed mode bits are not a portable contract. The validator is read-only and +grants no remote authority. Keep the provider evidence snapshot temporary before +merge; committing it creates a new head and self-invalidates its reviewed-head claim. + ## Deliver Use logical Git checkpoints only after their acceptance gates pass. On numbered diff --git a/.claude/skills/speckit-autonomous/SKILL.md b/.claude/skills/speckit-autonomous/SKILL.md index e8f6ecd0..71a93a12 100644 --- a/.claude/skills/speckit-autonomous/SKILL.md +++ b/.claude/skills/speckit-autonomous/SKILL.md @@ -66,6 +66,16 @@ authority from general autonomy. restore the original index state. 10. Route out-of-scope findings to named follow-up evidence instead of silently expanding the feature. +11. Before implementation, resolve the preset's gate-requirements template and + declare every acceptance gate in a reviewed feature artifact. Applicable + gates name required command tokens and any runner or platform tokens; `N/A` + gates name their rationale and re-evaluation trigger. +12. Before merge, generate provider-neutral gate evidence for the exact current + reviewed head in a temporary location and run the installed validator through + `bash ` or `pwsh -NoProfile -File `; installers + may not preserve executable mode bits. Every gate needs exactly one Primary row; + supplemental rows must point to that primary evidence. Missing, stale, + contradictory, empty, or token-mismatched evidence blocks merge. ## Remote Closeout @@ -79,6 +89,16 @@ or platform, and command that actually executed it. A green aggregate or a platform-named job proves only its executed scope. Missing required proof blocks merge and cannot be replaced by a permission or ruleset bypass. +Derive `executedCommand` and `runnerOrPlatform` from the workflow definition or +job log, not from a check, workflow, or job name. The read-only validator checks +the accepted requirements hash, full reviewed head, gate completeness, +Applicable/N/A boundaries, required command and runner tokens, and Primary versus +Supplemental evidence. Its successful exit grants no remote authority. + +Keep exact-head provider evidence temporary during the merge decision. Committing +that evidence would create a new head and invalidate its own reviewed-head claim. +Use the existing causal-closeout boundary for post-delivery facts. + Use one pre-named causal closeout only when current-head or post-merge facts cannot be committed without invalidating themselves. Keep it evidence-only and single-commit-capable; verify its own terminal provider facts externally. diff --git a/.github/agents/copilot-instructions.md b/.github/agents/copilot-instructions.md index aecfc431..4cdcf833 100644 --- a/.github/agents/copilot-instructions.md +++ b/.github/agents/copilot-instructions.md @@ -278,12 +278,12 @@ GitHub Pages is published from `.github/workflows/pages.yml`: build root `docfx. - Repository-Prüfhelfer erhalten den Repository-Root explizit. Ein Pass benötigt erwarteten Exitcode und einen Fehlerkanal ohne PowerShell-ErrorRecord, `command not found` oder gleichwertige fatale Signatur. - Vor einem Commit wird der beabsichtigte Lieferkandidat separat gestaged und mit `git diff --cached --check` sowie einem Pfadvergleich gegen den Repository-Status geprüft; `git diff --check` allein erfasst keine ungetrackten Dateien, und fremde Änderungen bleiben ausgeschlossen. - Vor einem Merge wird jedes Acceptance-Gate dem tatsächlichen Workflow, Job, Betriebssystem und ausgeführten Command zugeordnet; ein grüner Aggregatstatus oder ein Plattformname gilt nicht als Proof, wenn der Job den geforderten Runtime-, Plattform-, Dokumentations- oder Security-Nachweis nicht ausgeführt hat. -- Optional installiert: `autonomous-run-governance` v0.1.2 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.2 prüft zusätzlich den exakt beabsichtigten Staging-Kandidaten und ordnet jedes Acceptance-Gate dem wirklich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zu; grüne Namen und Bypass ersetzen keinen technischen Nachweis. +- Optional installiert: `autonomous-run-governance` v0.1.4 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.4 verlangt vor der Implementierung deklarierte Acceptance-Gates und prüft vor dem Merge temporäre Evidence für den exakten HEAD. Der Validator gleicht Requirements-Hash, HEAD, Command-/Runner-Tokens und genau einen `Primary`-Nachweis mit echten Workflow-Definitionen oder Job-Logs ab; grüne Namen, Validator und Bypass ersetzen weder technischen Nachweis noch Remote- oder Merge-Berechtigung. - Jeder Lauf schützt den akzeptierten Scope, verwendet triggerbasierte Validierung und dokumentiert eine kurze Retrospektive für spätere Runbook-Verfeinerungen. *Fully delegated Spec-Kit runs follow `docs/spec-kit-autonomous-runbook.md` and use the repository-local `$speckit-autonomous` skill. Determine `LocalImplementation`, `PublishPR`, or `MergeAndSync` from the current user request; general autonomy does not silently grant remote write or merge authority. Create evidence before implementation, iterate optional stages to their defined convergence criteria, prove one representative vertical slice before broad rollout, serialize shared writers, require each remote or delivery task to name its exact repository evidence path, route self-invalidating reviewed-head facts to one named closeout path after verifying them before merge, validate the exact staged candidate with `git diff --cached --check` so new files are included without unrelated changes, map each acceptance gate to the actual workflow, job, platform, and executed command before merge, protect accepted scope, use trigger-based validation, and record a short retrospective for later workflow refinement.* -*Optional installed preset: `autonomous-run-governance` v0.1.2 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.2 additionally validates the exact intended staged candidate and maps every acceptance gate to the workflow, job, runner or platform, and command that actually executed it; green names and bypass do not replace technical proof.* +*Optional installed preset: `autonomous-run-governance` v0.1.4 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.4 requires acceptance gates to be declared before implementation and validates temporary exact-HEAD evidence before merge. The validator checks the requirements hash, HEAD, command and runner tokens, and exactly one `Primary` proof against actual workflow definitions or job logs; green names, the validator, and bypass grant neither technical proof nor remote or merge authority.* - Aktive Google-Agentenoberfläche ist Antigravity CLI mit Befehl `agy` und Spec-Kit-Integration `agy`. `GEMINI.md` und `~/.gemini/antigravity-cli/` bleiben Antigravity-kompatible Oberflächen; direkte `gemini`-Befehle sind nur historische oder ausdrücklich benötigte Enterprise-/API-Kompatibilität und keine lokale Pflicht. *The active Google agent surface is Antigravity CLI through the `agy` command and Spec Kit `agy` integration. `GEMINI.md` and `~/.gemini/antigravity-cli/` remain Antigravity-compatible surfaces; direct `gemini` commands are historical or explicitly required enterprise/API compatibility, not a local requirement.* diff --git a/.github/agents/speckit.autonomous.agent.md b/.github/agents/speckit.autonomous.agent.md index 8b9de89a..b6b94a96 100644 --- a/.github/agents/speckit.autonomous.agent.md +++ b/.github/agents/speckit.autonomous.agent.md @@ -63,6 +63,16 @@ authority from general autonomy. restore the original index state. 10. Route out-of-scope findings to named follow-up evidence instead of silently expanding the feature. +11. Before implementation, resolve the preset's gate-requirements template and + declare every acceptance gate in a reviewed feature artifact. Applicable + gates name required command tokens and any runner or platform tokens; `N/A` + gates name their rationale and re-evaluation trigger. +12. Before merge, generate provider-neutral gate evidence for the exact current + reviewed head in a temporary location and run the installed validator through + `bash ` or `pwsh -NoProfile -File `; installers + may not preserve executable mode bits. Every gate needs exactly one Primary row; + supplemental rows must point to that primary evidence. Missing, stale, + contradictory, empty, or token-mismatched evidence blocks merge. ## Remote Closeout @@ -76,6 +86,16 @@ or platform, and command that actually executed it. A green aggregate or a platform-named job proves only its executed scope. Missing required proof blocks merge and cannot be replaced by a permission or ruleset bypass. +Derive `executedCommand` and `runnerOrPlatform` from the workflow definition or +job log, not from a check, workflow, or job name. The read-only validator checks +the accepted requirements hash, full reviewed head, gate completeness, +Applicable/N/A boundaries, required command and runner tokens, and Primary versus +Supplemental evidence. Its successful exit grants no remote authority. + +Keep exact-head provider evidence temporary during the merge decision. Committing +that evidence would create a new head and invalidate its own reviewed-head claim. +Use the existing causal-closeout boundary for post-delivery facts. + Use one pre-named causal closeout only when current-head or post-merge facts cannot be committed without invalidating themselves. Keep it evidence-only and single-commit-capable; verify its own terminal provider facts externally. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index f991b97f..b1a06510 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -537,9 +537,9 @@ For GitLab repositories, use the authenticated `glab` CLI first for equivalent a ## Spec-Kit-Preset-Pflege / Spec Kit Preset Maintenance - Standard-Preset-Set: `security-governance` v0.6.0 prio 10, `architecture-governance` v0.5.0 prio 20, `isaqb-architecture-governance` v0.2.0 prio 30, `a11y-governance` v0.4.0 prio 40, `cross-platform-governance` v0.2.0 prio 50, `agent-parity-governance` v0.3.0 prio 60. -- Optional installiert: `autonomous-run-governance` v0.1.2 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.2 prüft zusätzlich den exakt beabsichtigten Staging-Kandidaten und ordnet jedes Acceptance-Gate dem wirklich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zu; grüne Namen und Bypass ersetzen keinen technischen Nachweis. +- Optional installiert: `autonomous-run-governance` v0.1.4 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.4 verlangt vor der Implementierung deklarierte Acceptance-Gates und prüft vor dem Merge temporäre Evidence für den exakten HEAD. Der Validator gleicht Requirements-Hash, HEAD, Command-/Runner-Tokens und genau einen `Primary`-Nachweis mit echten Workflow-Definitionen oder Job-Logs ab; grüne Namen, Validator und Bypass ersetzen weder technischen Nachweis noch Remote- oder Merge-Berechtigung. -*Optional installed preset: `autonomous-run-governance` v0.1.2 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.2 additionally validates the exact intended staged candidate and maps every acceptance gate to the workflow, job, runner or platform, and command that actually executed it; green names and bypass do not replace technical proof.* +*Optional installed preset: `autonomous-run-governance` v0.1.4 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.4 requires acceptance gates to be declared before implementation and validates temporary exact-HEAD evidence before merge. The validator checks the requirements hash, HEAD, command and runner tokens, and exactly one `Primary` proof against actual workflow definitions or job logs; green names, the validator, and bypass grant neither technical proof nor remote or merge authority.* - Aktive Google-Agentenoberfläche ist Antigravity CLI mit Befehl `agy` und Spec-Kit-Integration `agy`. `GEMINI.md` und `~/.gemini/antigravity-cli/` bleiben Antigravity-kompatible Oberflächen; direkte `gemini`-Befehle sind nur historische oder ausdrücklich benötigte Enterprise-/API-Kompatibilität und keine lokale Pflicht. *The active Google agent surface is Antigravity CLI through the `agy` command and Spec Kit `agy` integration. `GEMINI.md` and `~/.gemini/antigravity-cli/` remain Antigravity-compatible surfaces; direct `gemini` commands are historical or explicitly required enterprise/API compatibility, not a local requirement.* diff --git a/.opencode/command/speckit.autonomous.md b/.opencode/command/speckit.autonomous.md index 8b9de89a..b6b94a96 100644 --- a/.opencode/command/speckit.autonomous.md +++ b/.opencode/command/speckit.autonomous.md @@ -63,6 +63,16 @@ authority from general autonomy. restore the original index state. 10. Route out-of-scope findings to named follow-up evidence instead of silently expanding the feature. +11. Before implementation, resolve the preset's gate-requirements template and + declare every acceptance gate in a reviewed feature artifact. Applicable + gates name required command tokens and any runner or platform tokens; `N/A` + gates name their rationale and re-evaluation trigger. +12. Before merge, generate provider-neutral gate evidence for the exact current + reviewed head in a temporary location and run the installed validator through + `bash ` or `pwsh -NoProfile -File `; installers + may not preserve executable mode bits. Every gate needs exactly one Primary row; + supplemental rows must point to that primary evidence. Missing, stale, + contradictory, empty, or token-mismatched evidence blocks merge. ## Remote Closeout @@ -76,6 +86,16 @@ or platform, and command that actually executed it. A green aggregate or a platform-named job proves only its executed scope. Missing required proof blocks merge and cannot be replaced by a permission or ruleset bypass. +Derive `executedCommand` and `runnerOrPlatform` from the workflow definition or +job log, not from a check, workflow, or job name. The read-only validator checks +the accepted requirements hash, full reviewed head, gate completeness, +Applicable/N/A boundaries, required command and runner tokens, and Primary versus +Supplemental evidence. Its successful exit grants no remote authority. + +Keep exact-head provider evidence temporary during the merge decision. Committing +that evidence would create a new head and invalidate its own reviewed-head claim. +Use the existing causal-closeout boundary for post-delivery facts. + Use one pre-named causal closeout only when current-head or post-merge facts cannot be committed without invalidating themselves. Keep it evidence-only and single-commit-capable; verify its own terminal provider facts externally. diff --git a/.specify/presets/.registry b/.specify/presets/.registry index f7a55434..5d1da906 100644 --- a/.specify/presets/.registry +++ b/.specify/presets/.registry @@ -272,9 +272,9 @@ "installed_at": "2026-06-14T14:52:13.912681+00:00" }, "autonomous-run-governance": { - "version": "0.1.2", + "version": "0.1.4", "source": "local", - "manifest_hash": "sha256:48a1f54367a8302683a14bc5e01e6f2b1b97139d4255e5d0426e3192a7144ce7", + "manifest_hash": "sha256:6430a1f8a303f455d90e4610d08b650390796fc79a43bdeca91a90fad8c23977", "enabled": true, "priority": 70, "registered_commands": { @@ -307,7 +307,7 @@ "speckit-autonomous", "speckit-autonomous-retrospective" ], - "installed_at": "2026-07-13T21:20:44.102462+00:00" + "installed_at": "2026-07-14T00:09:48.171477+00:00" } } } \ No newline at end of file diff --git a/.specify/presets/autonomous-run-governance/README.md b/.specify/presets/autonomous-run-governance/README.md index 8587ed06..2af8bdef 100644 --- a/.specify/presets/autonomous-run-governance/README.md +++ b/.specify/presets/autonomous-run-governance/README.md @@ -1,6 +1,6 @@ # Autonomous Run Governance Preset -Version: `0.1.2` +Version: `0.1.4` Requires: `spec-kit >= 0.8.3` Recommended priority: `70` @@ -14,6 +14,8 @@ It provides: - `speckit.autonomous-retrospective` for classified workflow learning - Constitution, Spec, Plan, Tasks, and Agent addenda - runbook, evidence, retrospective, and readiness-checklist templates +- machine-readable gate-requirements and exact-head evidence templates +- read-only Bash and PowerShell gate-evidence validators - field-validation evidence from six product runs plus audit and closure runs `LocalImplementation` is the safe default. `PublishPR` and `MergeAndSync` @@ -33,9 +35,51 @@ specify preset add --dev /path/to/autonomous-run-governance --priority 70 Published install: ```bash -specify preset add --from https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/archive/refs/tags/v0.1.2.zip --priority 70 +specify preset add --from https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/archive/refs/tags/v0.1.4.zip --priority 70 ``` +Version 0.1.4 retains the machine-checkable gate contract introduced in v0.1.3 +and makes its invocation stable after ZIP installation. Declare every acceptance +gate before implementation with +`autonomous-run-gate-requirements-template`, then collect exact-head execution +evidence with `autonomous-run-gate-evidence-template`. The requirements define +command and optional runner/platform tokens, so a green tooling-only job cannot +satisfy a runtime gate merely because its name contains a platform. + +Validate the final reviewed head on macOS/Linux: + +```bash +bash .specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.sh \ + --requirements specs/NNN-feature/autonomous-gate-requirements.json \ + --evidence /temporary/provider-gate-evidence.json \ + --head "$(git rev-parse HEAD)" +``` + +The Bash validator requires `python3` or `python` for strict JSON parsing. On +Windows use PowerShell 7: + +```powershell +pwsh -NoProfile -File .specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.ps1 ` + -Requirements specs/NNN-feature/autonomous-gate-requirements.json ` + -Evidence $env:TEMP/provider-gate-evidence.json ` + -Head (git rev-parse HEAD) +``` + +Dot-source the PowerShell script to use the equivalent Advanced Function +`Test-AutonomousGateEvidence` in an existing session. + +Always invoke the installed scripts through `bash` or `pwsh -File`. Git records +the Bash source as executable, but a preset installer or ZIP extraction may copy +it without that mode bit. Direct path execution is therefore not a portable +contract. + +The accepted requirements file is a reviewed feature artifact. The provider +evidence file SHOULD be generated in a temporary directory after checks finish, +because committing exact-head evidence before merge would create a new head and +self-invalidate the proof. A causal closeout may record the immutable run and +validator result after delivery without claiming that the closeout proves its +own new revision. + Validate with `specify preset list`, `specify preset info autonomous-run-governance`, and `specify preset resolve` for the affected templates. Installation does not itself execute a feature or grant remote diff --git a/.specify/presets/autonomous-run-governance/commands/speckit.autonomous.md b/.specify/presets/autonomous-run-governance/commands/speckit.autonomous.md index b38fc6f9..1b67494e 100644 --- a/.specify/presets/autonomous-run-governance/commands/speckit.autonomous.md +++ b/.specify/presets/autonomous-run-governance/commands/speckit.autonomous.md @@ -60,6 +60,16 @@ authority from general autonomy. restore the original index state. 10. Route out-of-scope findings to named follow-up evidence instead of silently expanding the feature. +11. Before implementation, resolve the preset's gate-requirements template and + declare every acceptance gate in a reviewed feature artifact. Applicable + gates name required command tokens and any runner or platform tokens; `N/A` + gates name their rationale and re-evaluation trigger. +12. Before merge, generate provider-neutral gate evidence for the exact current + reviewed head in a temporary location and run the installed validator through + `bash ` or `pwsh -NoProfile -File `; installers + may not preserve executable mode bits. Every gate needs exactly one Primary row; + supplemental rows must point to that primary evidence. Missing, stale, + contradictory, empty, or token-mismatched evidence blocks merge. ## Remote Closeout @@ -73,6 +83,16 @@ or platform, and command that actually executed it. A green aggregate or a platform-named job proves only its executed scope. Missing required proof blocks merge and cannot be replaced by a permission or ruleset bypass. +Derive `executedCommand` and `runnerOrPlatform` from the workflow definition or +job log, not from a check, workflow, or job name. The read-only validator checks +the accepted requirements hash, full reviewed head, gate completeness, +Applicable/N/A boundaries, required command and runner tokens, and Primary versus +Supplemental evidence. Its successful exit grants no remote authority. + +Keep exact-head provider evidence temporary during the merge decision. Committing +that evidence would create a new head and invalidate its own reviewed-head claim. +Use the existing causal-closeout boundary for post-delivery facts. + Use one pre-named causal closeout only when current-head or post-merge facts cannot be committed without invalidating themselves. Keep it evidence-only and single-commit-capable; verify its own terminal provider facts externally. diff --git a/.specify/presets/autonomous-run-governance/docs/man/validate-autonomous-gate-evidence.1 b/.specify/presets/autonomous-run-governance/docs/man/validate-autonomous-gate-evidence.1 new file mode 100644 index 00000000..7168e977 --- /dev/null +++ b/.specify/presets/autonomous-run-governance/docs/man/validate-autonomous-gate-evidence.1 @@ -0,0 +1,45 @@ +.TH VALIDATE-AUTONOMOUS-GATE-EVIDENCE 1 "2026-07-14" "autonomous-run-governance 0.1.4" "User Commands" +.SH NAME +validate-autonomous-gate-evidence \- validate exact-head delivery gates +.SH SYNOPSIS +.B bash validate-autonomous-gate-evidence.sh +.BR --requirements " FILE " +.BR --evidence " FILE " +.BR --head " SHA" +.SH DESCRIPTION +Validates a reviewed gate-requirements JSON file against a provider-neutral +execution-evidence JSON file for one full Git object ID. The command checks the +requirements hash, complete gate coverage, Applicable and N/A boundaries, +required command and runner tokens, and Primary versus Supplemental evidence. +.PP +The command is read-only. Success grants no commit, push, pull-request, merge, +bypass, cancellation, secret, or provider-administration authority. +.SH OPTIONS +.TP +.B --requirements FILE +Accepted gate requirements declared before delivery. +.TP +.B --evidence FILE +Temporary exact-head execution evidence derived from workflow definitions or +job logs. +.TP +.B --head SHA +Expected full 40- or 64-character hexadecimal Git object ID. +.TP +.B -h, --help +Show command help. +.SH EXIT STATUS +Zero means the machine-checkable contract passed. One means evidence validation +failed. Two means invocation or dependency setup failed. +.SH NOTES +The Bash variant requires Python 3 or Python for strict JSON parsing. Invoke it +through bash because preset installation or ZIP extraction may not preserve the +Git executable mode. On Windows, use pwsh -NoProfile -File with +validate-autonomous-gate-evidence.ps1. Keep provider evidence temporary before +merge because committing it creates a new head and self-invalidates the +reviewed-head claim. +.PP +Dot-source the PowerShell script to make the equivalent advanced function +Test-AutonomousGateEvidence available in the current session. +.SH SEE ALSO +specify(1), git(1) diff --git a/.specify/presets/autonomous-run-governance/preset.yml b/.specify/presets/autonomous-run-governance/preset.yml index 4c9eea5d..47ce6b9e 100644 --- a/.specify/presets/autonomous-run-governance/preset.yml +++ b/.specify/presets/autonomous-run-governance/preset.yml @@ -3,7 +3,7 @@ schema_version: "1.0" preset: id: "autonomous-run-governance" name: "Autonomous Run Governance" - version: "0.1.2" + version: "0.1.4" description: "Adds permission-bounded, evidence-first governance for autonomous Spec Kit delivery, convergence, resume, closeout, and retrospective learning." author: "Thorsten Hindermann" repository: "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance" @@ -53,6 +53,16 @@ provides: file: "templates/autonomous-run-evidence-template.md" description: "Starter evidence ledger for convergence, validation, and delivery" + - type: "template" + name: "autonomous-run-gate-requirements-template" + file: "templates/autonomous-run-gate-requirements-template.json" + description: "Machine-readable acceptance gates declared before delivery" + + - type: "template" + name: "autonomous-run-gate-evidence-template" + file: "templates/autonomous-run-gate-evidence-template.json" + description: "Machine-readable exact-head execution evidence for acceptance gates" + - type: "template" name: "autonomous-run-retrospective-template" file: "templates/autonomous-run-retrospective-template.md" diff --git a/.specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.ps1 b/.specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.ps1 new file mode 100644 index 00000000..0117efb3 --- /dev/null +++ b/.specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.ps1 @@ -0,0 +1,302 @@ +<# +.SYNOPSIS +Prueft Gate-Anforderungen und exakte Ausfuehrungsnachweise eines autonomen Laufs. + +Validates gate requirements and exact execution evidence for an autonomous run. + +.DESCRIPTION +Die Pruefung ist read-only und verleiht keine Commit-, Push-, PR-, Merge-, +Bypass- oder Provider-Administrationsrechte. + +The validator is read-only and grants no commit, push, pull-request, merge, +bypass, or provider-administration authority. + +.PARAMETER Requirements +JSON-Datei mit den vor der Auslieferung akzeptierten Gate-Anforderungen. + +JSON file containing gate requirements accepted before delivery. + +.PARAMETER Evidence +JSON-Datei mit providerneutraler Ausfuehrungsevidence fuer den geprueften Head. + +JSON file containing provider-neutral execution evidence for the reviewed head. + +.PARAMETER Head +Vollstaendige 40- oder 64-stellige Git-Objekt-ID des geprueften Heads. + +Full 40- or 64-character Git object ID of the reviewed head. + +.EXAMPLE +pwsh -NoProfile -File scripts/validate-autonomous-gate-evidence.ps1 -Requirements gates.json -Evidence evidence.json -Head $sha +#> +[CmdletBinding()] +param( + [string]$Requirements = '', + + [string]$Evidence = '', + + [string]$Head = '' +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Test-AutonomousGateEvidence { + <# + .SYNOPSIS + Prueft Gate-Anforderungen gegen exakte Head-Evidence. + + Validates gate requirements against exact-head evidence. + + .DESCRIPTION + Die Advanced Function ist read-only. Sie verleiht keine Remote-Rechte. + + The advanced function is read-only. It grants no remote authority. + #> + [CmdletBinding()] + [OutputType([string])] + param( + [Parameter(Mandatory)] + [string]$Requirements, + + [Parameter(Mandatory)] + [string]$Evidence, + + [Parameter(Mandatory)] + [string]$Head + ) + +$Errors = [System.Collections.Generic.List[string]]::new() + +function Get-TextProperty { + param( + [object]$Object, + [string]$Name + ) + + $property = $Object.PSObject.Properties[$Name] + if ($null -eq $property -or $null -eq $property.Value) { return '' } + if ($property.Value -isnot [string]) { return '' } + return [string]$property.Value +} + +function Get-ArrayProperty { + param( + [object]$Object, + [string]$Name, + [string]$Label + ) + + $property = $Object.PSObject.Properties[$Name] + if ($null -eq $property -or $null -eq $property.Value) { + $Errors.Add("$Label must be an array of non-empty strings") + return @() + } + $items = @($property.Value) + foreach ($item in $items) { + if ($item -isnot [string] -or [string]::IsNullOrWhiteSpace([string]$item)) { + $Errors.Add("$Label must be an array of non-empty strings") + return @() + } + } + return $items +} + +function Test-NonEmpty { + param([object]$Object, [string]$Name) + return -not [string]::IsNullOrWhiteSpace((Get-TextProperty -Object $Object -Name $Name)) +} + +if (-not (Test-Path -LiteralPath $Requirements -PathType Leaf)) { + throw "Requirements file not found: $Requirements" +} +if (-not (Test-Path -LiteralPath $Evidence -PathType Leaf)) { + throw "Evidence file not found: $Evidence" +} +if ($Head -notmatch '^(?:[0-9a-fA-F]{40}|[0-9a-fA-F]{64})$') { + $Errors.Add('-Head must be a full 40- or 64-character hexadecimal Git object ID') +} + +try { + $RequirementsData = Get-Content -LiteralPath $Requirements -Raw -Encoding UTF8 | ConvertFrom-Json +} catch { + throw "Requirements is not valid UTF-8 JSON: $($_.Exception.Message)" +} +try { + $EvidenceData = Get-Content -LiteralPath $Evidence -Raw -Encoding UTF8 | ConvertFrom-Json +} catch { + throw "Evidence is not valid UTF-8 JSON: $($_.Exception.Message)" +} + +$RequirementsById = @{} +if ((Get-TextProperty -Object $RequirementsData -Name 'schemaVersion') -ne '1.0') { + $Errors.Add('Requirements schemaVersion must be 1.0') +} +$GateProperty = $RequirementsData.PSObject.Properties['gates'] +$Gates = if ($null -eq $GateProperty) { @() } else { @($GateProperty.Value) } +if ($Gates.Count -eq 0) { $Errors.Add('Requirements gates must be a non-empty array') } + +for ($Index = 0; $Index -lt $Gates.Count; $Index++) { + $Gate = $Gates[$Index] + $Label = "Requirements gate[$Index]" + $GateId = (Get-TextProperty -Object $Gate -Name 'gateId').Trim() + $Applicability = (Get-TextProperty -Object $Gate -Name 'applicability').Trim() + $Scope = (Get-TextProperty -Object $Gate -Name 'requiredScope').Trim() + if ([string]::IsNullOrWhiteSpace($GateId)) { + $Errors.Add("$Label.gateId must be non-empty") + continue + } + if ($RequirementsById.ContainsKey($GateId)) { + $Errors.Add("Duplicate requirement gateId: $GateId") + continue + } + if ($Applicability -notin @('Applicable', 'N/A')) { + $Errors.Add("$Label.applicability must be Applicable or N/A") + } + if ([string]::IsNullOrWhiteSpace($Scope)) { + $Errors.Add("$Label.requiredScope must be non-empty") + } + $CommandTokens = @(Get-ArrayProperty -Object $Gate -Name 'requiredCommandTokens' -Label "$Label.requiredCommandTokens") + $RunnerTokens = @(Get-ArrayProperty -Object $Gate -Name 'requiredRunnerOrPlatformTokens' -Label "$Label.requiredRunnerOrPlatformTokens") + $Rationale = (Get-TextProperty -Object $Gate -Name 'rationale').Trim() + $Trigger = (Get-TextProperty -Object $Gate -Name 'reevaluationTrigger').Trim() + if ($Applicability -eq 'Applicable' -and $CommandTokens.Count -eq 0) { + $Errors.Add("$Label Applicable gates need at least one required command token") + } + if ($Applicability -eq 'N/A') { + if ($CommandTokens.Count -gt 0 -or $RunnerTokens.Count -gt 0) { + $Errors.Add("$Label N/A gates cannot require command or runner tokens") + } + if ([string]::IsNullOrWhiteSpace($Rationale)) { $Errors.Add("$Label N/A gates need a rationale") } + if ([string]::IsNullOrWhiteSpace($Trigger)) { $Errors.Add("$Label N/A gates need a reevaluation trigger") } + } + $RequirementsById[$GateId] = [pscustomobject]@{ + Applicability = $Applicability + RequiredScope = $Scope + RequiredCommandTokens = $CommandTokens + RequiredRunnerOrPlatformTokens = $RunnerTokens + Rationale = $Rationale + ReevaluationTrigger = $Trigger + } +} + +if ((Get-TextProperty -Object $EvidenceData -Name 'schemaVersion') -ne '1.0') { + $Errors.Add('Evidence schemaVersion must be 1.0') +} +$ExpectedRequirementsHash = (Get-FileHash -LiteralPath $Requirements -Algorithm SHA256).Hash.ToLowerInvariant() +if ((Get-TextProperty -Object $EvidenceData -Name 'requirementsSha256').ToLowerInvariant() -ne $ExpectedRequirementsHash) { + $Errors.Add('Evidence requirementsSha256 does not match the requirements file') +} +if ((Get-TextProperty -Object $EvidenceData -Name 'reviewedHead').ToLowerInvariant() -ne $Head.ToLowerInvariant()) { + $Errors.Add('Evidence reviewedHead does not match -Head') +} + +$EntryProperty = $EvidenceData.PSObject.Properties['entries'] +$Entries = if ($null -eq $EntryProperty) { @() } else { @($EntryProperty.Value) } +if ($Entries.Count -eq 0) { $Errors.Add('Evidence entries must be a non-empty array') } +$EntriesById = @{} + +for ($Index = 0; $Index -lt $Entries.Count; $Index++) { + $Entry = $Entries[$Index] + $Label = "Evidence entry[$Index]" + $GateId = (Get-TextProperty -Object $Entry -Name 'gateId').Trim() + $Role = (Get-TextProperty -Object $Entry -Name 'evidenceRole').Trim() + if ([string]::IsNullOrWhiteSpace($GateId)) { + $Errors.Add("$Label.gateId must be non-empty") + continue + } + if (-not $RequirementsById.ContainsKey($GateId)) { + $Errors.Add("$Label references undeclared gateId: $GateId") + continue + } + if ($Role -notin @('Primary', 'Supplemental')) { + $Errors.Add("$Label.evidenceRole must be Primary or Supplemental") + } + if (-not $EntriesById.ContainsKey($GateId)) { + $EntriesById[$GateId] = [System.Collections.Generic.List[object]]::new() + } + $EntriesById[$GateId].Add($Entry) + + $Requirement = $RequirementsById[$GateId] + $Applicability = (Get-TextProperty -Object $Entry -Name 'applicability').Trim() + $Scope = (Get-TextProperty -Object $Entry -Name 'requiredScope').Trim() + $EntryHead = (Get-TextProperty -Object $Entry -Name 'headSha').Trim() + $Result = (Get-TextProperty -Object $Entry -Name 'result').Trim() + if ($Applicability -ne $Requirement.Applicability) { + $Errors.Add("$Label.applicability does not match requirement $GateId") + } + if ($Scope -ne $Requirement.RequiredScope) { + $Errors.Add("$Label.requiredScope does not match requirement $GateId") + } + if ($EntryHead.ToLowerInvariant() -ne $Head.ToLowerInvariant()) { + $Errors.Add("$Label.headSha does not match -Head") + } + + if ($Applicability -eq 'Applicable') { + foreach ($Field in @('provider', 'runId', 'workflow', 'job', 'runnerOrPlatform', 'executedCommand', 'evidenceReference')) { + if (-not (Test-NonEmpty -Object $Entry -Name $Field)) { + $Errors.Add("$Label.$Field must be non-empty for Applicable gates") + } + } + if ($Result -ne 'Pass') { $Errors.Add("$Label.result must be Pass for Applicable gates") } + $ExecutedCommand = Get-TextProperty -Object $Entry -Name 'executedCommand' + $Runner = Get-TextProperty -Object $Entry -Name 'runnerOrPlatform' + foreach ($Token in $Requirement.RequiredCommandTokens) { + if (-not $ExecutedCommand.Contains([string]$Token)) { + $Errors.Add("$Label.executedCommand is missing required token: $Token") + } + } + foreach ($Token in $Requirement.RequiredRunnerOrPlatformTokens) { + if (-not $Runner.Contains([string]$Token)) { + $Errors.Add("$Label.runnerOrPlatform is missing required token: $Token") + } + } + if ($Role -eq 'Supplemental' -and -not (Test-NonEmpty -Object $Entry -Name 'supplementalFor')) { + $Errors.Add("$Label.supplementalFor is required for Supplemental evidence") + } + } elseif ($Applicability -eq 'N/A') { + if ($Role -ne 'Primary') { $Errors.Add("$Label N/A evidence must be Primary") } + if ($Result -ne 'N/A') { $Errors.Add("$Label.result must be N/A") } + if ((Get-TextProperty -Object $Entry -Name 'rationale').Trim() -ne $Requirement.Rationale) { + $Errors.Add("$Label.rationale does not match requirement $GateId") + } + if ((Get-TextProperty -Object $Entry -Name 'reevaluationTrigger').Trim() -ne $Requirement.ReevaluationTrigger) { + $Errors.Add("$Label.reevaluationTrigger does not match requirement $GateId") + } + if (-not (Test-NonEmpty -Object $Entry -Name 'evidenceReference')) { + $Errors.Add("$Label.evidenceReference must identify the N/A decision") + } + } +} + +$SupplementalCount = 0 +foreach ($GateId in $RequirementsById.Keys) { + $Rows = if ($EntriesById.ContainsKey($GateId)) { @($EntriesById[$GateId]) } else { @() } + $Primary = @($Rows | Where-Object { (Get-TextProperty -Object $_ -Name 'evidenceRole').Trim() -eq 'Primary' }) + if ($Primary.Count -ne 1) { + $Errors.Add("Gate $GateId needs exactly one Primary evidence entry; found $($Primary.Count)") + } + if ($Primary.Count -eq 1) { + $PrimaryReference = (Get-TextProperty -Object $Primary[0] -Name 'evidenceReference').Trim() + foreach ($Row in $Rows) { + if ((Get-TextProperty -Object $Row -Name 'evidenceRole').Trim() -eq 'Supplemental') { + $SupplementalCount++ + if ((Get-TextProperty -Object $Row -Name 'supplementalFor').Trim() -ne $PrimaryReference) { + $Errors.Add("Gate $GateId Supplemental evidence must reference the Primary evidenceReference") + } + } + } + } +} + +if ($Errors.Count -gt 0) { + foreach ($Message in $Errors) { [Console]::Error.WriteLine("ERROR: $Message") } + throw "Autonomous gate evidence validation failed with $($Errors.Count) error(s)." +} + +Write-Output "PASS: $($RequirementsById.Count) gate requirements, $($RequirementsById.Count) primary entries, $SupplementalCount supplemental entries, reviewed head $Head" +} + +if ($MyInvocation.InvocationName -ne '.') { + Test-AutonomousGateEvidence -Requirements $Requirements -Evidence $Evidence -Head $Head +} diff --git a/.specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.sh b/.specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.sh new file mode 100644 index 00000000..dce3183f --- /dev/null +++ b/.specify/presets/autonomous-run-governance/scripts/validate-autonomous-gate-evidence.sh @@ -0,0 +1,283 @@ +#!/usr/bin/env bash +# Validate autonomous-run acceptance gates without changing repository state. + +set -euo pipefail + +usage() { + cat <<'EOF' +validate-autonomous-gate-evidence.sh - validate exact-head gate evidence + +Usage: + bash validate-autonomous-gate-evidence.sh --requirements FILE --evidence FILE --head SHA + +Options: + --requirements FILE Accepted gate requirements declared before delivery. + --evidence FILE Provider-neutral exact-head execution evidence. + --head SHA Full reviewed Git object ID expected for every row. + -h, --help Show this help. + +The command is read-only. A successful result does not grant commit, push, +pull-request, merge, bypass, or provider-administration authority. +EOF +} + +die() { + printf 'ERROR: %s\n' "$*" >&2 + exit 2 +} + +requirements="" +evidence="" +expected_head="" + +while [ $# -gt 0 ]; do + case "$1" in + --requirements) + [ $# -ge 2 ] || die "--requirements needs a file" + requirements="$2" + shift 2 + ;; + --evidence) + [ $# -ge 2 ] || die "--evidence needs a file" + evidence="$2" + shift 2 + ;; + --head) + [ $# -ge 2 ] || die "--head needs a full Git object ID" + expected_head="$2" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + *) + die "unknown option: $1" + ;; + esac +done + +[ -n "$requirements" ] || die "--requirements is required" +[ -n "$evidence" ] || die "--evidence is required" +[ -n "$expected_head" ] || die "--head is required" +[ -f "$requirements" ] || die "requirements file not found: $requirements" +[ -f "$evidence" ] || die "evidence file not found: $evidence" + +python_command="" +if command -v python3 >/dev/null 2>&1; then + python_command="python3" +elif command -v python >/dev/null 2>&1; then + python_command="python" +else + die "python3 or python is required to validate JSON on macOS/Linux" +fi + +"$python_command" - "$requirements" "$evidence" "$expected_head" <<'PY' +import hashlib +import json +import re +import sys +from pathlib import Path + + +requirements_path = Path(sys.argv[1]) +evidence_path = Path(sys.argv[2]) +expected_head = sys.argv[3] +errors = [] + + +def load_json(path, label): + try: + return json.loads(path.read_text(encoding="utf-8")) + except (OSError, UnicodeError, json.JSONDecodeError) as exc: + errors.append(f"{label} is not valid UTF-8 JSON: {exc}") + return None + + +def text(value): + return value if isinstance(value, str) else "" + + +def non_empty(value): + return bool(text(value).strip()) + + +def validate_tokens(value, label): + if not isinstance(value, list) or any(not non_empty(item) for item in value): + errors.append(f"{label} must be an array of non-empty strings") + return [] + return value + + +if not re.fullmatch(r"(?:[0-9a-fA-F]{40}|[0-9a-fA-F]{64})", expected_head): + errors.append("--head must be a full 40- or 64-character hexadecimal Git object ID") + +requirements = load_json(requirements_path, "requirements") +evidence = load_json(evidence_path, "evidence") + +requirements_by_id = {} +if isinstance(requirements, dict): + if requirements.get("schemaVersion") != "1.0": + errors.append("requirements schemaVersion must be 1.0") + gates = requirements.get("gates") + if not isinstance(gates, list) or not gates: + errors.append("requirements gates must be a non-empty array") + gates = [] + for index, gate in enumerate(gates): + label = f"requirements gate[{index}]" + if not isinstance(gate, dict): + errors.append(f"{label} must be an object") + continue + gate_id = text(gate.get("gateId")).strip() + applicability = text(gate.get("applicability")).strip() + scope = text(gate.get("requiredScope")).strip() + if not gate_id: + errors.append(f"{label}.gateId must be non-empty") + continue + if gate_id in requirements_by_id: + errors.append(f"duplicate requirement gateId: {gate_id}") + continue + if applicability not in ("Applicable", "N/A"): + errors.append(f"{label}.applicability must be Applicable or N/A") + if not scope: + errors.append(f"{label}.requiredScope must be non-empty") + command_tokens = validate_tokens( + gate.get("requiredCommandTokens"), f"{label}.requiredCommandTokens" + ) + runner_tokens = validate_tokens( + gate.get("requiredRunnerOrPlatformTokens"), + f"{label}.requiredRunnerOrPlatformTokens", + ) + rationale = text(gate.get("rationale")).strip() + trigger = text(gate.get("reevaluationTrigger")).strip() + if applicability == "Applicable" and not command_tokens: + errors.append(f"{label} Applicable gates need at least one required command token") + if applicability == "N/A": + if command_tokens or runner_tokens: + errors.append(f"{label} N/A gates cannot require command or runner tokens") + if not rationale: + errors.append(f"{label} N/A gates need a rationale") + if not trigger: + errors.append(f"{label} N/A gates need a reevaluation trigger") + requirements_by_id[gate_id] = { + "applicability": applicability, + "requiredScope": scope, + "requiredCommandTokens": command_tokens, + "requiredRunnerOrPlatformTokens": runner_tokens, + "rationale": rationale, + "reevaluationTrigger": trigger, + } +else: + errors.append("requirements root must be an object") + +entries_by_id = {} +if isinstance(evidence, dict): + if evidence.get("schemaVersion") != "1.0": + errors.append("evidence schemaVersion must be 1.0") + expected_requirements_hash = hashlib.sha256(requirements_path.read_bytes()).hexdigest() + if text(evidence.get("requirementsSha256")).lower() != expected_requirements_hash: + errors.append("evidence requirementsSha256 does not match the requirements file") + if text(evidence.get("reviewedHead")).lower() != expected_head.lower(): + errors.append("evidence reviewedHead does not match --head") + entries = evidence.get("entries") + if not isinstance(entries, list) or not entries: + errors.append("evidence entries must be a non-empty array") + entries = [] + for index, entry in enumerate(entries): + label = f"evidence entry[{index}]" + if not isinstance(entry, dict): + errors.append(f"{label} must be an object") + continue + gate_id = text(entry.get("gateId")).strip() + role = text(entry.get("evidenceRole")).strip() + if not gate_id: + errors.append(f"{label}.gateId must be non-empty") + continue + if gate_id not in requirements_by_id: + errors.append(f"{label} references undeclared gateId: {gate_id}") + continue + if role not in ("Primary", "Supplemental"): + errors.append(f"{label}.evidenceRole must be Primary or Supplemental") + entries_by_id.setdefault(gate_id, []).append(entry) + + requirement = requirements_by_id[gate_id] + applicability = text(entry.get("applicability")).strip() + scope = text(entry.get("requiredScope")).strip() + head = text(entry.get("headSha")).strip() + result = text(entry.get("result")).strip() + if applicability != requirement["applicability"]: + errors.append(f"{label}.applicability does not match requirement {gate_id}") + if scope != requirement["requiredScope"]: + errors.append(f"{label}.requiredScope does not match requirement {gate_id}") + if head.lower() != expected_head.lower(): + errors.append(f"{label}.headSha does not match --head") + + if applicability == "Applicable": + for field in ( + "provider", + "runId", + "workflow", + "job", + "runnerOrPlatform", + "executedCommand", + "evidenceReference", + ): + if not non_empty(entry.get(field)): + errors.append(f"{label}.{field} must be non-empty for Applicable gates") + if result != "Pass": + errors.append(f"{label}.result must be Pass for Applicable gates") + executed_command = text(entry.get("executedCommand")) + runner = text(entry.get("runnerOrPlatform")) + for token in requirement["requiredCommandTokens"]: + if token not in executed_command: + errors.append(f"{label}.executedCommand is missing required token: {token}") + for token in requirement["requiredRunnerOrPlatformTokens"]: + if token not in runner: + errors.append(f"{label}.runnerOrPlatform is missing required token: {token}") + if role == "Supplemental" and not non_empty(entry.get("supplementalFor")): + errors.append(f"{label}.supplementalFor is required for Supplemental evidence") + elif applicability == "N/A": + if role != "Primary": + errors.append(f"{label} N/A evidence must be Primary") + if result != "N/A": + errors.append(f"{label}.result must be N/A") + if text(entry.get("rationale")).strip() != requirement["rationale"]: + errors.append(f"{label}.rationale does not match requirement {gate_id}") + if text(entry.get("reevaluationTrigger")).strip() != requirement["reevaluationTrigger"]: + errors.append(f"{label}.reevaluationTrigger does not match requirement {gate_id}") + if not non_empty(entry.get("evidenceReference")): + errors.append(f"{label}.evidenceReference must identify the N/A decision") +else: + errors.append("evidence root must be an object") + +for gate_id in requirements_by_id: + rows = entries_by_id.get(gate_id, []) + primary = [row for row in rows if text(row.get("evidenceRole")).strip() == "Primary"] + if len(primary) != 1: + errors.append(f"gate {gate_id} needs exactly one Primary evidence entry; found {len(primary)}") + if primary: + primary_ref = text(primary[0].get("evidenceReference")).strip() + for row in rows: + if text(row.get("evidenceRole")).strip() == "Supplemental": + if text(row.get("supplementalFor")).strip() != primary_ref: + errors.append( + f"gate {gate_id} Supplemental evidence must reference the Primary evidenceReference" + ) + +if errors: + for error in errors: + print(f"ERROR: {error}", file=sys.stderr) + sys.exit(1) + +supplemental_count = sum( + 1 + for rows in entries_by_id.values() + for row in rows + if text(row.get("evidenceRole")).strip() == "Supplemental" +) +print( + f"PASS: {len(requirements_by_id)} gate requirements, " + f"{len(requirements_by_id)} primary entries, {supplemental_count} supplemental entries, " + f"reviewed head {expected_head}" +) +PY diff --git a/.specify/presets/autonomous-run-governance/templates/agent-file-addendum.md b/.specify/presets/autonomous-run-governance/templates/agent-file-addendum.md index 7c30094a..cab7fdb8 100644 --- a/.specify/presets/autonomous-run-governance/templates/agent-file-addendum.md +++ b/.specify/presets/autonomous-run-governance/templates/agent-file-addendum.md @@ -21,6 +21,16 @@ - Treat a green check as evidence only for the commands it executed. Map each acceptance gate to its workflow, job, runner or platform, and command before merge. Missing technical scope blocks merge; bypass grants no proof. +- Declare acceptance gates in the reviewed requirements JSON before + implementation. Before merge, derive commands and runners from workflow + definitions or logs, create temporary exact-head evidence, and run the + installed validator through `bash ` or + `pwsh -NoProfile -File ` because installers may not preserve + executable mode bits. Missing or token-mismatched rows fail closed; validator + success grants no remote authority. +- Keep the exact-head provider snapshot temporary. Committing it before merge + creates a new head and self-invalidates the proof; use causal closeout for a + durable post-delivery record. - Use a causal closeout only for self-invalidating current-head or post-merge facts, and keep it single-commit-capable without recursive self-reference. - Create no empty feature, retrospective, or closeout pull request. diff --git a/.specify/presets/autonomous-run-governance/templates/autonomous-run-evidence-template.md b/.specify/presets/autonomous-run-governance/templates/autonomous-run-evidence-template.md index 0cca888e..f174218e 100644 --- a/.specify/presets/autonomous-run-governance/templates/autonomous-run-evidence-template.md +++ b/.specify/presets/autonomous-run-governance/templates/autonomous-run-evidence-template.md @@ -40,6 +40,22 @@ exit cannot override a fatal structured or error-channel signal. | Status reconciliation | `[Pass/Open]` | `[staged/untracked/unstaged boundary]` | | Index preservation | `[Pass/N/A/Open]` | `[restored prior state or authorized staged candidate]` | +## Acceptance Gate Contract + +| Item | Value | +|---|---| +| Requirements artifact | `[reviewed feature path]` | +| Requirements SHA-256 | `[lowercase hash]` | +| Temporary evidence snapshot | `[local/provider-artifact path; do not commit before merge]` | +| Reviewed head | `[full 40- or 64-character Git object ID]` | +| Validator | `[installed Bash/PowerShell command]` | +| Validator result | `[Pass/Fail/Open plus exact output]` | + +The requirements artifact is declared before implementation. Generate the +provider evidence after final checks, derive commands and runners from workflow +definitions or logs, and keep the exact-head snapshot temporary so recording it +does not create a new, unvalidated head. + ## Remote Delivery | Item | Result | Evidence | @@ -47,7 +63,7 @@ exit cannot override a fatal structured or error-channel signal. | Push | `[Pass/N/A/Open]` | `[branch/path]` | | Pull request | `[Pass/N/A/Open]` | `[URL or rationale]` | | Required checks | `[Pass/N/A/Open]` | `[review-context gate]` | -| Acceptance execution map | `[Pass/N/A/Open]` | `[gate -> workflow/job/runner-or-platform/command]` | +| Acceptance execution map | `[Pass/N/A/Open]` | `[requirements hash + validated temporary exact-head evidence]` | | Actionable threads | `[count/N/A/Open]` | `[provider evidence]` | | Unavailable reviews | `[None/limitation]` | `[provider evidence]` | | Merge | `[Pass/N/A/Open]` | `[authority and result]` | diff --git a/.specify/presets/autonomous-run-governance/templates/autonomous-run-gate-evidence-template.json b/.specify/presets/autonomous-run-governance/templates/autonomous-run-gate-evidence-template.json new file mode 100644 index 00000000..2da59ab6 --- /dev/null +++ b/.specify/presets/autonomous-run-governance/templates/autonomous-run-gate-evidence-template.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.0", + "requirementsSha256": "replace-with-lowercase-sha256-of-requirements-file", + "reviewedHead": "replace-with-full-reviewed-head-sha", + "entries": [ + { + "gateId": "replace-with-stable-gate-id", + "evidenceRole": "Primary", + "applicability": "Applicable", + "requiredScope": "Copy the matching requiredScope value.", + "headSha": "replace-with-full-reviewed-head-sha", + "provider": "replace-with-provider", + "runId": "replace-with-immutable-run-id", + "workflow": "replace-with-workflow", + "job": "replace-with-job", + "runnerOrPlatform": "replace-with-runner-or-platform", + "executedCommand": "replace-with-command-observed-in-definition-or-log", + "result": "Pass", + "evidenceReference": "replace-with-immutable-url-or-identifier", + "rationale": "", + "reevaluationTrigger": "", + "supplementalFor": "" + } + ] +} diff --git a/.specify/presets/autonomous-run-governance/templates/autonomous-run-gate-requirements-template.json b/.specify/presets/autonomous-run-governance/templates/autonomous-run-gate-requirements-template.json new file mode 100644 index 00000000..73a56c7f --- /dev/null +++ b/.specify/presets/autonomous-run-governance/templates/autonomous-run-gate-requirements-template.json @@ -0,0 +1,16 @@ +{ + "schemaVersion": "1.0", + "gates": [ + { + "gateId": "replace-with-stable-gate-id", + "applicability": "Applicable", + "requiredScope": "Describe the technical proof that must execute before delivery.", + "requiredCommandTokens": [ + "replace-with-required-command-token" + ], + "requiredRunnerOrPlatformTokens": [], + "rationale": "", + "reevaluationTrigger": "" + } + ] +} diff --git a/.specify/presets/autonomous-run-governance/templates/autonomous-run-readiness-checklist-template.md b/.specify/presets/autonomous-run-governance/templates/autonomous-run-readiness-checklist-template.md index d703c376..feb3e93c 100644 --- a/.specify/presets/autonomous-run-governance/templates/autonomous-run-readiness-checklist-template.md +++ b/.specify/presets/autonomous-run-governance/templates/autonomous-run-readiness-checklist-template.md @@ -31,6 +31,8 @@ - [ ] Staged paths were reconciled with untracked and unstaged repository state; unrelated work and any prior local-only index state were preserved. - [ ] Triggered validation passed; skipped gates have an explicit rationale. +- [ ] Every acceptance gate was declared before implementation in the reviewed + gate-requirements artifact with stable ID, scope, and required tokens. ## Remote Delivery @@ -38,6 +40,14 @@ - [ ] Required review-context checks pass. - [ ] Every acceptance-specific gate maps to the workflow, job, runner or platform, and command that actually executed the required proof. +- [ ] Temporary provider evidence matches the accepted requirements hash and + exact current reviewed head, and the installed validator passes. +- [ ] Every declared gate has exactly one Primary row; Supplemental evidence + points to it, and `N/A` includes rationale plus re-evaluation trigger. +- [ ] Executed commands and runners were read from workflow definitions or logs, + not inferred from green aggregate, workflow, job, or platform-shaped names. +- [ ] Exact-head provider evidence was not committed before merge and therefore + did not invalidate its own reviewed-head claim. - [ ] No green aggregate or platform-named tooling job is credited for acceptance scope that it did not execute. - [ ] No actionable review thread remains. diff --git a/.specify/presets/autonomous-run-governance/templates/autonomous-runbook-template.md b/.specify/presets/autonomous-run-governance/templates/autonomous-runbook-template.md index 580f78c3..4b9f4e30 100644 --- a/.specify/presets/autonomous-run-governance/templates/autonomous-runbook-template.md +++ b/.specify/presets/autonomous-run-governance/templates/autonomous-runbook-template.md @@ -75,6 +75,25 @@ and command that executed it. Green status and platform-shaped names are not evidence for commands the job did not run. Missing required scope blocks merge; a permission or ruleset bypass cannot supply technical proof. +Before implementation, create a reviewed gate-requirements JSON artifact from +the installed template. Use stable gate IDs and declare Applicable gates with +required command tokens plus any runner or platform tokens. `N/A` gates require +a rationale and re-evaluation trigger. + +After final checks, inspect workflow definitions or job logs and create the +provider-neutral evidence JSON in a temporary location. Hash the accepted +requirements, bind every row to the full current reviewed head, and run the +installed validator through `bash ` or +`pwsh -NoProfile -File `. Preset installation may not preserve +executable mode bits. Exactly one Primary row is required per gate; explicitly +linked Supplemental rows are allowed. Missing, stale, +contradictory, empty, or token-mismatched evidence blocks merge. + +Do not commit the temporary exact-head evidence before merge: that commit would +create a different head and invalidate its own claim. Record the immutable run +and validator result through the causal-closeout boundary when a durable +post-delivery record is required. + Use one pre-named causal closeout only when committing current-head facts would invalidate them or when facts exist only after merge. Keep it evidence-only and single-commit-capable. Do not require the closeout to write its own provider URL, diff --git a/.specify/presets/autonomous-run-governance/templates/constitution-addendum.md b/.specify/presets/autonomous-run-governance/templates/constitution-addendum.md index 5ff36f56..b825ada0 100644 --- a/.specify/presets/autonomous-run-governance/templates/constitution-addendum.md +++ b/.specify/presets/autonomous-run-governance/templates/constitution-addendum.md @@ -15,5 +15,8 @@ - Unavailable reviewers remain missing reviews. Provider bypass requires separate explicit authority and repository policy; it is never a preset default. +- Every Applicable acceptance gate is declared before implementation and must + pass machine-checkable exact-head execution mapping before merge. Green names, + aggregate status, approval, or bypass are not technical evidence. - Workflow learning separates correctness/evidence fixes from efficiency preferences and rejects project-specific behavior from portable governance. diff --git a/.specify/presets/autonomous-run-governance/templates/field-validation-summary.md b/.specify/presets/autonomous-run-governance/templates/field-validation-summary.md index 33c0bf3a..d010c7c6 100644 --- a/.specify/presets/autonomous-run-governance/templates/field-validation-summary.md +++ b/.specify/presets/autonomous-run-governance/templates/field-validation-summary.md @@ -1,8 +1,8 @@ # Autonomous Run Governance Field Validation -Version `0.1.2` is based on six consecutive product `MergeAndSync` field runs, -the Feature-024 audit, Feature-027 closure, and Feature-025 core-runtime -hardening in `hindermath/TuiVision` through 2026-07-13. +Version `0.1.3` is based on six consecutive product `MergeAndSync` field runs, +the Feature-024 audit, Feature-027 closure, and Features 025-026 conformance +hardening in `hindermath/TuiVision` through 2026-07-14. | Feature | Feature PR | Closeout | Retrospective | Primary learning | |---|---:|---:|---:|---| @@ -15,6 +15,7 @@ hardening in `hindermath/TuiVision` through 2026-07-13. | 024 Conformance Audit | #62 | #63 | #64 | no-empty remediation features and clean structured error channels | | 027 Pre-Wave-5 Closure | #66 | #67 | in closeout | executable validator dependency search before evidence-only test skips | | 025 Core Runtime Conformance | #69 | #72 | #70 and #71 | exact delivery-candidate integrity and executed acceptance-scope mapping | +| 026 Component/Data Conformance | #74 | #75 | integrated closeout | second false-ready gate mapping; promote deterministic exact-head gate validation | Across all runs, required technical checks passed before merge, actionable GraphQL review-thread count was zero, and unavailable Copilot quota was recorded @@ -27,6 +28,16 @@ versioning, DocFX, terminal, A11Y, app-loop, historical-source, branch, and test details remain excluded. Multi-word argv safety and formal proof-marker automation remain readiness guidance rather than new preset scripts. +Features 025 and 026 independently showed that correct prose did not prevent a +platform-named tooling job from being credited for runtime proof it never ran. +Version 0.1.3 therefore adds separate accepted requirements and temporary +exact-head evidence JSON templates plus read-only Bash and PowerShell validators. +The validator checks requirements hash, gate completeness, full reviewed head, +Applicable/N/A boundaries, required command and runner tokens, and Primary versus +Supplemental evidence. It does not query a provider, establish that evidence is +truthful, or grant remote authority; workflow definitions or logs remain the +source for observed command and runner values. + Validation required before release: - development install, list, info, resolve, disable, enable, remove, reinstall diff --git a/.specify/presets/autonomous-run-governance/templates/plan-addendum.md b/.specify/presets/autonomous-run-governance/templates/plan-addendum.md index 39c4f94c..a1df57f0 100644 --- a/.specify/presets/autonomous-run-governance/templates/plan-addendum.md +++ b/.specify/presets/autonomous-run-governance/templates/plan-addendum.md @@ -12,6 +12,10 @@ The plan MUST: - group negative cases only under explicit expected failures and local ownership - serialize shared evidence, version, workflow, statistics, and agent surfaces - map validation triggers to concrete commands and honest skipped conditions +- create the reviewed machine-readable gate-requirements artifact before + implementation and name the temporary exact-head evidence plus validator path +- derive executed commands and runners from workflow definitions or job logs, + not from green aggregate, workflow, job, or platform-shaped names - pass repository roots explicitly to helpers and inspect exit plus error output - map every remote task to current authority and an exact evidence path - pre-name one causal closeout path only when self-invalidating or post-merge diff --git a/.specify/presets/autonomous-run-governance/templates/spec-addendum.md b/.specify/presets/autonomous-run-governance/templates/spec-addendum.md index 028a643e..b4c6f701 100644 --- a/.specify/presets/autonomous-run-governance/templates/spec-addendum.md +++ b/.specify/presets/autonomous-run-governance/templates/spec-addendum.md @@ -10,6 +10,9 @@ Record: triggers relevant to the feature - whether a causal closeout may be required and why - whether mutable validation tokens exist; otherwise record `N/A` +- acceptance gates with stable IDs, Applicable or `N/A` state, required scope, + command tokens, optional runner/platform tokens, rationale, and re-evaluation + trigger - portable retrospective and follow-up boundaries Do not place provider credentials, transient model names, or implicit merge and diff --git a/.specify/presets/autonomous-run-governance/templates/tasks-addendum.md b/.specify/presets/autonomous-run-governance/templates/tasks-addendum.md index 1d091d56..ad6e131b 100644 --- a/.specify/presets/autonomous-run-governance/templates/tasks-addendum.md +++ b/.specify/presets/autonomous-run-governance/templates/tasks-addendum.md @@ -27,6 +27,17 @@ - Before merge, add an acceptance-scope mapping task for every required gate: record the workflow, job, runner or platform, and command that executed it. Missing technical scope blocks merge and cannot be replaced by bypass. +- Before implementation, add a serialized task to create the accepted + gate-requirements JSON from the installed template. Give each gate a stable ID, + Applicable or `N/A` state, exact scope, command tokens, optional runner or + platform tokens, and any required rationale plus re-evaluation trigger. +- After final remote checks, add a serialized task to create temporary exact-head + gate evidence, derive commands and runners from definitions or logs, and run + the installed validator through `bash ` or + `pwsh -NoProfile -File ` because installed mode bits are not a + portable contract. Missing rows, stale heads, + duplicate Primary rows, unmatched tokens, and unowned Supplemental rows block + merge. Do not commit the temporary evidence and thereby self-invalidate it. - Keep current-head verification before merge. Route self-invalidating and true post-merge facts to one pre-named, single-commit-capable closeout. - End with a retrospective task; do not add an empty retrospective branch or PR. diff --git a/.specify/templates/agent-file-template.md b/.specify/templates/agent-file-template.md index dfef2a6c..32ebfaf1 100644 --- a/.specify/templates/agent-file-template.md +++ b/.specify/templates/agent-file-template.md @@ -54,26 +54,30 @@ is documented: `security-governance`, `architecture-governance`, `isaqb-architecture-governance`, `a11y-governance`, `cross-platform-governance`, and `agent-parity-governance`. -`autonomous-run-governance` v0.1.2 mit Priorität 70 ist aus dem öffentlichen +`autonomous-run-governance` v0.1.4 mit Priorität 70 ist aus dem öffentlichen Tag-ZIP installiert. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt an seinem einzelnen Pfad als bewusster lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt. Preset-Command, Retrospektiv-Skill, Projekt-Runbook und Adoption-Evidence bleiben die portablen und gemeinsamen -Nachweisflächen. Version 0.1.2 prüft zusätzlich den exakt beabsichtigten -Staging-Kandidaten und ordnet jedes Acceptance-Gate dem wirklich ausgeführten -Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zu; grüne -Namen und Bypass ersetzen keinen technischen Nachweis. - -*`autonomous-run-governance` v0.1.2 at priority 70 is installed from the public +Nachweisflächen. Version 0.1.4 verlangt vor der Implementierung deklarierte +Acceptance-Gates und prüft vor dem Merge temporäre Evidence für den exakten +HEAD. Der Validator gleicht Requirements-Hash, HEAD, Command-/Runner-Tokens und +genau einen `Primary`-Nachweis mit echten Workflow-Definitionen oder Job-Logs +ab; grüne Namen, Validator und Bypass ersetzen weder technischen Nachweis noch +Remote- oder Merge-Berechtigung. + +*`autonomous-run-governance` v0.1.4 at priority 70 is installed from the public tag ZIP. Keep the project-owned Codex `$speckit-autonomous` skill at its single path as an intentional local override because it adds TuiVision numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, project runbook, and adoption evidence remain the portable -and shared proof surfaces. Version 0.1.2 additionally validates the exact -intended staged candidate and maps every acceptance gate to the workflow, job, -runner or platform, and command that actually executed it; green names and -bypass do not replace technical proof.* +and shared proof surfaces. Version 0.1.4 requires acceptance gates to be +declared before implementation and validates temporary exact-HEAD evidence +before merge. The validator checks the requirements hash, HEAD, command and +runner tokens, and exactly one `Primary` proof against actual workflow +definitions or job logs; green names, the validator, and bypass grant neither +technical proof nor remote or merge authority.* ## Antigravity-CLI-Übergang / Antigravity CLI Transition diff --git a/AGENTS.md b/AGENTS.md index 3d9d414d..83dcfed6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -627,9 +627,9 @@ For GitLab repositories, use the authenticated `glab` CLI first for equivalent a ## Spec-Kit-Preset-Pflege / Spec Kit Preset Maintenance - Standard-Preset-Set: `security-governance` v0.6.0 prio 10, `architecture-governance` v0.5.0 prio 20, `isaqb-architecture-governance` v0.2.0 prio 30, `a11y-governance` v0.4.0 prio 40, `cross-platform-governance` v0.2.0 prio 50, `agent-parity-governance` v0.3.0 prio 60. -- Optional installiert: `autonomous-run-governance` v0.1.2 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.2 prüft zusätzlich den exakt beabsichtigten Staging-Kandidaten und ordnet jedes Acceptance-Gate dem wirklich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zu; grüne Namen und Bypass ersetzen keinen technischen Nachweis. +- Optional installiert: `autonomous-run-governance` v0.1.4 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.4 verlangt vor der Implementierung deklarierte Acceptance-Gates und prüft vor dem Merge temporäre Evidence für den exakten HEAD. Der Validator gleicht Requirements-Hash, HEAD, Command-/Runner-Tokens und genau einen `Primary`-Nachweis mit echten Workflow-Definitionen oder Job-Logs ab; grüne Namen, Validator und Bypass ersetzen weder technischen Nachweis noch Remote- oder Merge-Berechtigung. -*Optional installed preset: `autonomous-run-governance` v0.1.2 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.2 additionally validates the exact intended staged candidate and maps every acceptance gate to the workflow, job, runner or platform, and command that actually executed it; green names and bypass do not replace technical proof.* +*Optional installed preset: `autonomous-run-governance` v0.1.4 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.4 requires acceptance gates to be declared before implementation and validates temporary exact-HEAD evidence before merge. The validator checks the requirements hash, HEAD, command and runner tokens, and exactly one `Primary` proof against actual workflow definitions or job logs; green names, the validator, and bypass grant neither technical proof nor remote or merge authority.* - Aktive Google-Agentenoberfläche ist Antigravity CLI mit Befehl `agy` und Spec-Kit-Integration `agy`. `GEMINI.md` und `~/.gemini/antigravity-cli/` bleiben Antigravity-kompatible Oberflächen; direkte `gemini`-Befehle sind nur historische oder ausdrücklich benötigte Enterprise-/API-Kompatibilität und keine lokale Pflicht. *The active Google agent surface is Antigravity CLI through the `agy` command and Spec Kit `agy` integration. `GEMINI.md` and `~/.gemini/antigravity-cli/` remain Antigravity-compatible surfaces; direct `gemini` commands are historical or explicitly required enterprise/API compatibility, not a local requirement.* diff --git a/CLAUDE.md b/CLAUDE.md index e9a75f9d..f6d6724d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -578,9 +578,9 @@ For GitLab repositories, use the authenticated `glab` CLI first for equivalent a ## Spec-Kit-Preset-Pflege / Spec Kit Preset Maintenance - Standard-Preset-Set: `security-governance` v0.6.0 prio 10, `architecture-governance` v0.5.0 prio 20, `isaqb-architecture-governance` v0.2.0 prio 30, `a11y-governance` v0.4.0 prio 40, `cross-platform-governance` v0.2.0 prio 50, `agent-parity-governance` v0.3.0 prio 60. -- Optional installiert: `autonomous-run-governance` v0.1.2 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.2 prüft zusätzlich den exakt beabsichtigten Staging-Kandidaten und ordnet jedes Acceptance-Gate dem wirklich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zu; grüne Namen und Bypass ersetzen keinen technischen Nachweis. +- Optional installiert: `autonomous-run-governance` v0.1.4 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.4 verlangt vor der Implementierung deklarierte Acceptance-Gates und prüft vor dem Merge temporäre Evidence für den exakten HEAD. Der Validator gleicht Requirements-Hash, HEAD, Command-/Runner-Tokens und genau einen `Primary`-Nachweis mit echten Workflow-Definitionen oder Job-Logs ab; grüne Namen, Validator und Bypass ersetzen weder technischen Nachweis noch Remote- oder Merge-Berechtigung. -*Optional installed preset: `autonomous-run-governance` v0.1.2 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.2 additionally validates the exact intended staged candidate and maps every acceptance gate to the workflow, job, runner or platform, and command that actually executed it; green names and bypass do not replace technical proof.* +*Optional installed preset: `autonomous-run-governance` v0.1.4 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.4 requires acceptance gates to be declared before implementation and validates temporary exact-HEAD evidence before merge. The validator checks the requirements hash, HEAD, command and runner tokens, and exactly one `Primary` proof against actual workflow definitions or job logs; green names, the validator, and bypass grant neither technical proof nor remote or merge authority.* - Aktive Google-Agentenoberfläche ist Antigravity CLI mit Befehl `agy` und Spec-Kit-Integration `agy`. `GEMINI.md` und `~/.gemini/antigravity-cli/` bleiben Antigravity-kompatible Oberflächen; direkte `gemini`-Befehle sind nur historische oder ausdrücklich benötigte Enterprise-/API-Kompatibilität und keine lokale Pflicht. *The active Google agent surface is Antigravity CLI through the `agy` command and Spec Kit `agy` integration. `GEMINI.md` and `~/.gemini/antigravity-cli/` remain Antigravity-compatible surfaces; direct `gemini` commands are historical or explicitly required enterprise/API compatibility, not a local requirement.* diff --git a/GEMINI.md b/GEMINI.md index 6348ea52..83851b14 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -736,9 +736,9 @@ For GitLab repositories, use the authenticated `glab` CLI first for equivalent a ## Spec-Kit-Preset-Pflege / Spec Kit Preset Maintenance - Standard-Preset-Set: `security-governance` v0.6.0 prio 10, `architecture-governance` v0.5.0 prio 20, `isaqb-architecture-governance` v0.2.0 prio 30, `a11y-governance` v0.4.0 prio 40, `cross-platform-governance` v0.2.0 prio 50, `agent-parity-governance` v0.3.0 prio 60. -- Optional installiert: `autonomous-run-governance` v0.1.2 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.2 prüft zusätzlich den exakt beabsichtigten Staging-Kandidaten und ordnet jedes Acceptance-Gate dem wirklich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zu; grüne Namen und Bypass ersetzen keinen technischen Nachweis. +- Optional installiert: `autonomous-run-governance` v0.1.4 prio 70 aus dem öffentlichen Tag-ZIP. Der projektgebundene Codex-Skill `$speckit-autonomous` bleibt am selben eindeutigen Pfad als lokaler Override bestehen, weil er TuiVision-spezifische Nummerierungs-, Build-Zähler-, DocFX-/A11Y- und historische Source-Verträge ergänzt; Preset-Command, Retrospektiv-Skill, Runbook und Adoption-Evidence bleiben die portablen beziehungsweise gemeinsamen Nachweisflächen. Version 0.1.4 verlangt vor der Implementierung deklarierte Acceptance-Gates und prüft vor dem Merge temporäre Evidence für den exakten HEAD. Der Validator gleicht Requirements-Hash, HEAD, Command-/Runner-Tokens und genau einen `Primary`-Nachweis mit echten Workflow-Definitionen oder Job-Logs ab; grüne Namen, Validator und Bypass ersetzen weder technischen Nachweis noch Remote- oder Merge-Berechtigung. -*Optional installed preset: `autonomous-run-governance` v0.1.2 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.2 additionally validates the exact intended staged candidate and maps every acceptance gate to the workflow, job, runner or platform, and command that actually executed it; green names and bypass do not replace technical proof.* +*Optional installed preset: `autonomous-run-governance` v0.1.4 at priority 70 comes from the public tag ZIP. The project-owned Codex `$speckit-autonomous` skill stays at its single path as a local override because it adds TuiVision-specific numbering, build-counter, DocFX/A11Y, and historical-source contracts. The preset command, retrospective skill, runbook, and adoption evidence remain the portable or shared proof surfaces. Version 0.1.4 requires acceptance gates to be declared before implementation and validates temporary exact-HEAD evidence before merge. The validator checks the requirements hash, HEAD, command and runner tokens, and exactly one `Primary` proof against actual workflow definitions or job logs; green names, the validator, and bypass grant neither technical proof nor remote or merge authority.* - Aktive Google-Agentenoberfläche ist Antigravity CLI mit Befehl `agy` und Spec-Kit-Integration `agy`. `GEMINI.md` und `~/.gemini/antigravity-cli/` bleiben Antigravity-kompatible Oberflächen; direkte `gemini`-Befehle sind nur historische oder ausdrücklich benötigte Enterprise-/API-Kompatibilität und keine lokale Pflicht. *The active Google agent surface is Antigravity CLI through the `agy` command and Spec Kit `agy` integration. `GEMINI.md` and `~/.gemini/antigravity-cli/` remain Antigravity-compatible surfaces; direct `gemini` commands are historical or explicitly required enterprise/API compatibility, not a local requirement.* diff --git a/docs/project-statistics.md b/docs/project-statistics.md index 5726d4dc..02269d46 100644 --- a/docs/project-statistics.md +++ b/docs/project-statistics.md @@ -1,6 +1,6 @@ # Projektstatistik TuiVision -Stand: 2026-07-13 (aktualisiert einschließlich Feature 026 und Preset v0.1.2) +Stand: 2026-07-14 (aktualisiert einschließlich Feature 026 und Preset v0.1.4) Aktueller Zusatz: Feature 016 dokumentiert 157/157 Secure-Development- Kontrollen, sechs behobene Medium-Funde, 498/498 grüne Release-Tests und eine @@ -28,11 +28,11 @@ bindet jede Build-Zählererhöhung an genau einen Build-/Testaufruf und lässt Repository-Prüfhelfer bei fehlenden Abhängigkeiten fail-closed abbrechen. Das aus den Feldläufen entstandene `autonomous-run-governance` ist jetzt als -v0.1.2 zusätzlich zu den sechs Standard-Presets aus dem öffentlichen Tag-ZIP -installiert. Die Version prüft den exakten Delivery-Kandidaten und bindet -Acceptance-Gates an tatsächlich ausgeführte Nachweise. Der TuiVision-spezifische -Codex-Skill bleibt bis zur vollständigen portablen Parität als einzelner lokaler -Override erhalten. +v0.1.4 zusätzlich zu den sechs Standard-Presets aus dem öffentlichen Tag-ZIP +installiert. Maschinenlesbare Gate-Requirements und exakte HEAD-Evidence +schließen die False-Readiness-Grenze; explizite Bash-/PowerShell-Aufrufe bleiben +auch ohne erhaltenes Ausführungsbit portabel. Der TuiVision-spezifische +Codex-Skill bleibt als einzelner lokaler Override erhalten. Der begrenzte Folgeabgleich führt Antigravity CLI mit `agy` als aktive Google-Agentenoberfläche. Gemini CLI bleibt nur als historische oder ausdrücklich @@ -693,30 +693,31 @@ fortgeschrieben. | 2026-07-13 | `autonomous-run-governance` v0.1.2 veröffentlicht und adoptiert | Die zwei Feature-025-Erkenntnisse zur exakten Staging-Kandidatenprüfung und zur Zuordnung jedes Acceptance-Gates zu wirklich ausgeführtem Workflow, Job, Runner beziehungsweise Plattform und Befehl sind portabel produktisiert. Home-Baseline-PR #61 und öffentlicher Preset-PR #2 wurden gemergt; Tag/Release v0.1.2 und das GitHub-ZIP mit SHA-256 `6e401289...e2d0` sind geprüft. TuiVision installiert die Version aus dem Tag-ZIP bei Priorität 70; alle sieben Presets bleiben aufgelöst, Codex/Antigravity, Claude, Copilot und OpenCode zeigen beide Commands je Oberfläche genau einmal, und der TuiVision-Codex-Override bleibt bytegleich. Der Vor-Statistik-Snapshot umfasst `+292/-29`, also 263 Nettozeilen in Preset, Registry, generierten Agent-Flächen, Guidance, Template und Evidence ohne Runtime-, Test-, Paket-, Beispiel- oder `tv203s/`-Änderung. Konservative Manualreferenz für 292 hinzugefügte oder aktualisierte Zeilen: `3,7` Tage beziehungsweise `28,5` Stunden bei 80 Zeilen/Tag; Thorsten-Solo: `2,3` Tage beziehungsweise `18,2` Stunden bei 125 Zeilen/Tag. `specify check`, Tag-ZIP-/Payload-/Resolve-/Eindeutigkeits-/Override- und Agentenparitätsprüfung sind grün; DocFX, Playwright/Axe, Lynx, Diff und Secrets schließen den Adoptions-PR ab. | | 2026-07-13 | `/speckit-autonomous` für `026-component-data-conformance-hardening` | Feature 026 schließt `F010` bis `F013` test-first: Dialoge klassifizieren nur echte Abschlussbefehle und validieren hierarchisch; `TInputLine` erhält phasenbezogene, zustandserhaltende Validierung; Dateidialoge liefern mode-spezifische, atomare Entscheidungen ohne versteckte Datei-I/O; Menü-, StatusLine- und Dialogbeschreibungen werden ausschließlich über geschlossene primitive Records und allowlist-basierte Factories rekonstruiert. Feature 024 enthält nun 139 moderne Source-Dateien, 211 öffentliche Typen und exakt 13 eindeutige Resolutionen; Wave 5 und Wave 6 bleiben bis Feature 028 blockiert. Der Vor-Statistik-Snapshot umfasst `+1761/-97` Produktionscode, `+802/-26` Tests, `+2539/-60` Dokumentation/Evidence/Guidance und `+4/-4` Metadaten, zusammen `+5106/-187` beziehungsweise 4919 Nettozeilen. Konservative Manualreferenz für 5106 hinzugefügte oder aktualisierte Zeilen: `63,8` Tage beziehungsweise `497,8` Stunden bei 80 Zeilen/Tag; Thorsten-Solo: `40,8` Tage beziehungsweise `318,6` Stunden bei 125 Zeilen/Tag. Lokale Abnahme: 748/748 Release- und Coverage-Tests; Coverage Core 92,96 %, Controls 86,66 %, Serialization 90,01 %, Compatibility 80,55 % und Drivers.Console 89,18 %; DocFX, Playwright/Axe und UTF-8-Lynx werden auf dem finalen Dokumentstand nachgewiesen. Der nächste Intake ist ausschließlich `Lastenheft_12_Pre-Wave5-and-Wave6-Conformance-Closure.md`. | | 2026-07-13 | Closeout und autonome Retrospektive nach Feature 026 | Feature-PR #74 wurde als Merge `f3586aa` geliefert. Alle PR-Kontext-Gates und Claude waren grün, GraphQL meldete null Threads, Copilot blieb quota-bedingt ein fehlender Review und der enge Admin-Bypass betraf nur Human Approval. Die Retrospektive erkannte danach, dass der grüne Windows-Homogeneity-Job keine Runtime ausführte, obwohl der Contract Windows/WSL-Proof verlangte. Der temporäre, nicht gemergte Run 29291308306 schloss die Lücke mit 748/748 Tests und DocFX 0/0 auf `windows-latest`. Der Vor-Statistik-Diff für kausalen Closeout und Retrospektive umfasst `+134/-0` Dokumentzeilen. Konservative Manualreferenz: `1,7` Tage beziehungsweise `13,1` Stunden bei 80 Zeilen/Tag; Thorsten-Solo: `1,1` Tage beziehungsweise `8,4` Stunden bei 125 Zeilen/Tag. Home-Baseline-Commit `046b65a` klassifiziert das zweite Auftreten als `PresetFollowUp` mit `Promote`: Eine spätere Paketversion muss Applicable Gate, exakten Head, Workflow, Job, Runner und ausgeführten Befehl maschinenprüfbar binden. Feature 028 bleibt der einzige nächste Intake. | +| 2026-07-14 | `autonomous-run-governance` v0.1.4 veröffentlicht und adoptiert | Die zwei unabhängigen False-Readiness-Feldfunde aus Feature 025 und 026 sind über v0.1.3/v0.1.4 als deklarierte Gate-Requirements, temporäre exakte HEAD-Evidence und read-only Bash-/PowerShell-Validatoren produktisiert. Home-Baseline-PRs #62/#63 und öffentliche Preset-PRs #3/#4 wurden gemergt; Release v0.1.4 und der GitHub-ZIP mit SHA-256 `da667e2f...967e0` sind geprüft. TuiVision installiert den exakten Tag-ZIP bei Priorität 70. Alle sieben Presets bleiben aufgelöst und beide autonomen Commands erscheinen je Agent-Oberfläche genau einmal. Der installierte Bash-Modus `0644` reproduziert die Paketgrenze; `bash ` und `pwsh -NoProfile -File ` bestehen dieselbe Fixture. Der Vor-Statistik-Snapshot umfasst `+1086/-38`, also 1048 Nettozeilen in Preset, Validatoren, Agent-Flächen, Guidance, Template und Evidence ohne Runtime-, API-, Test-, Abhängigkeits-, Beispiel-, Projekt- oder `tv203s/`-Änderung. Konservative Manualreferenz: `13,6` Tage beziehungsweise `105,9` Stunden bei 80 Zeilen/Tag; Thorsten-Solo: `8,7` Tage beziehungsweise `67,8` Stunden bei 125 Zeilen/Tag. DocFX, Playwright/Axe, Lynx, Diff und Secrets schließen den Adoptions-PR ab; Feature 028 bleibt der einzige nächste Intake. | ## Gesamtstatistik -Basis dieses Schlussblocks ist der Repository-Snapshot vom 2026-07-13. Die +Basis dieses Schlussblocks ist der Repository-Snapshot vom 2026-07-14. Die Werte schließen den aktuellen Working Tree ein und bleiben deshalb bis zum nächsten Statistiklauf eine dokumentierte Momentaufnahme. | Kennzahl | Verdichteter Gesamtblick | |---|---:| -| Artefaktbasis gesamt | 262021 Zeilen | -| Produktions- und Testcode zusammen | 51580 Zeilen (19.7 %) | -| Dokumentationsanteil | 210441 Zeilen (80.3 %) | -| Spec-Kit-Anteil innerhalb der Doku | 56251 Zeilen (26.7 %) | -| Zentrale Governance-/Agent-Dateien | 3853 Zeilen (1.8 % der Doku) | -| Projektgebundene Agent-Skills | 2485 Zeilen (1.2 % der Doku) | -| Beobachtbarer Projektzeitraum | 2026-02-08 bis 2026-07-13 | -| Git-Commits / sichtbare Aktivtage | 520 / 70 | -| Gesamtzeilen pro sichtbarem Aktivtag | 3743.2 | -| Gesamtzeilen pro Commit | 503.9 | -| Konservative Einzelentwickler-Untergrenze | 3275.3 Arbeitstage / 25547.0 Stunden | -| Thorsten-Solo-Untergrenze | 2096.2 Arbeitstage / 16350.1 Stunden | -| Kleines 3er-Team mit Koordinationsaufschlag | 1310.1 Arbeitstage | -| Repo-Speedup gegen 80-Zeilen-Referenz | 46.8x | -| Repo-Speedup gegen Thorsten-Referenz | 29.9x | +| Artefaktbasis gesamt | 263072 Zeilen | +| Produktions- und Testcode zusammen | 51580 Zeilen (19.6 %) | +| Dokumentationsanteil | 211492 Zeilen (80.4 %) | +| Spec-Kit-Anteil innerhalb der Doku | 57302 Zeilen (27.1 %) | +| Zentrale Governance-/Agent-Dateien | 3917 Zeilen (1.9 % der Doku) | +| Projektgebundene Agent-Skills | 2512 Zeilen (1.2 % der Doku) | +| Beobachtbarer Projektzeitraum | 2026-02-08 bis 2026-07-14 | +| Git-Commits / sichtbare Aktivtage | 521 / 71 | +| Gesamtzeilen pro sichtbarem Aktivtag | 3705.2 | +| Gesamtzeilen pro Commit | 504.9 | +| Konservative Einzelentwickler-Untergrenze | 3288.4 Arbeitstage / 25649.5 Stunden | +| Thorsten-Solo-Untergrenze | 2104.6 Arbeitstage / 16415.7 Stunden | +| Kleines 3er-Team mit Koordinationsaufschlag | 1315.4 Arbeitstage | +| Repo-Speedup gegen 80-Zeilen-Referenz | 46.3x | +| Repo-Speedup gegen Thorsten-Referenz | 29.6x | Die hohe Dokumentationsquote enthält die umfangreiche Secure-Development-, Governance- und Spec-Kit-Basis. Das autonome Runbook und der neue @@ -746,9 +747,9 @@ the sole next intake before either example wave. ```text Artefaktmix nach Snapshot (Zeilen) -Produktion | #### | 30604 | 11.7 % +Produktion | #### | 30604 | 11.6 % Tests | ### | 20976 | 8.0 % -Dokumentation | ##############################| 210441 | 80.3 % +Dokumentation | ##############################| 211492 | 80.4 % ``` Die Balken verwenden dieselbe Skala. Die Zahlen bleiben der genaue, @@ -951,8 +952,8 @@ before statistics maintenance. The ledger also records added or updated lines. ```text Dokumentierte Beschleunigungsfaktoren durch agentische KI + Spec-Kit/SDD -Repo 80 | ############################## | 45.6x -Repo125 | ################### | 29.2x +Repo 80 | ############################## | 46.3x +Repo125 | ################### | 29.6x 014i | ##### | 7.0x 015i-80 | #### | 5.4x 015i125 | ### | 3.4x @@ -1004,23 +1005,25 @@ AGY125 | # | 0.6x 026I125 | ################## | 40.8x 026C-80 | # | 1.7x 026C125 | # | 1.1x +V14-80 | ######### | 13.5x +V14125 | ###### | 8.6x ``` Die 017-, AUTO-, 018-, 019-, 020-, 021-, 022-, 023-, ADOPT-, AGY- und -024P-, 024I-, 024C-, 024R-, 027P-, 024V2-, 025I-, 026I- und 026C-Werte +024P-, 024I-, 024C-, 024R-, 027P-, 024V2-, 025I-, 026I-, 026C- und V14-Werte beziehen sich jeweils auf einen sichtbaren autonomen Arbeitstag. Sie beschreiben Lieferdichte, nicht die Dauer einzelner Denk-, Review-, CI- oder Wartephasen. -The 017, AUTO, 018, 019, 020, 021, 022, 023, ADOPT, AGY, 024P, 024I, 024C, 024R, 027P, 024V2, 025I, 026I, and 026C values each use one +The 017, AUTO, 018, 019, 020, 021, 022, 023, ADOPT, AGY, 024P, 024I, 024C, 024R, 027P, 024V2, 025I, 026I, 026C, and V14 values each use one visible autonomous workday. They describe delivery density, not the duration of individual thinking, review, CI, or waiting phases. ```text Vergleich Gesamtaufwand / sichtbares KI-Lieferfenster -Erfahren | ############################## | 3275.3 d -Thorsten | ################### | 2096.2 d -KI sichtbar | # | 70.0 d +Erfahren | ############################## | 3288.4 d +Thorsten | ################### | 2104.6 d +KI sichtbar | # | 71.0 d ``` Der Direktvergleich stellt die konservative 80-Zeilen-Basis, die @@ -1085,7 +1088,7 @@ X/Y: Phasenvolumen 32..47 (Y ungefähr in Zeilen) 10000 | * | 5000 | * * | 2000 | * | - 1000 | * | + 1000 | * * | 400 | * | 200 | * | 50 |* * | @@ -1100,11 +1103,11 @@ W steht für den Antigravity-Folgeabgleich, X für die Intake-Vorbereitung, Y f die Implementierung, Z für den Closeout, a für die Retrospektive des Konformitätsaudits, b für die 027-Intake-Vorbereitung, c für die 027-Ausführung, d für deren Closeout, e für Audit-Revision 2 samt 025-/026-/028-Intake- -Vorbereitung, f für Feature 025, g für Feature 026 und h für dessen Closeout; -die übrigen Slots bleiben für spätere Phasen frei. +Vorbereitung, f für Feature 025, g für Feature 026, h für dessen Closeout und i +für die v0.1.4-Preset-Adoption; die übrigen Slots bleiben für spätere Phasen frei. W represents the Antigravity follow-up, X the conformance-audit intake, Y its implementation, Z its closeout, a its retrospective, b the 027 intake preparation, c the 027 run, d its closeout, e Audit Revision 2 plus the -025/026/028 intake preparation, f Feature 025, g Feature 026, and h its -closeout. The remaining slots stay free for later documented phases. +025/026/028 intake preparation, f Feature 025, g Feature 026, h its closeout, +and i the v0.1.4 preset adoption. The remaining slots stay free for later phases. diff --git a/specs/026-component-data-conformance-hardening/preset-adoption-v0.1.4-evidence.md b/specs/026-component-data-conformance-hardening/preset-adoption-v0.1.4-evidence.md new file mode 100644 index 00000000..44c8bc9c --- /dev/null +++ b/specs/026-component-data-conformance-hardening/preset-adoption-v0.1.4-evidence.md @@ -0,0 +1,136 @@ +# Evidence: Adoption von `autonomous-run-governance` v0.1.4 + +## Zweck und Grenze + +Dieses Dokument weist die Aktualisierung des optionalen Presets von v0.1.2 auf +v0.1.4 vor Feature 028 nach. Version 0.1.3 überführt zwei unabhängige Feldfunde +aus Feature 025 und 026 in maschinenlesbare Acceptance-Gates und exakte +HEAD-Evidence. Version 0.1.4 macht den Validatoraufruf nach einer ZIP- oder +Preset-Installation portabel. Runtime, öffentliche API, Abhängigkeiten, +Beispiele, Projektdateien und `tv203s/` bleiben unverändert. + +*This document records the optional preset update from v0.1.2 to v0.1.4 before +Feature 028. Version 0.1.3 turns two independent Feature 025 and 026 field +findings into machine-readable acceptance gates and exact-HEAD evidence. Version +0.1.4 makes validator invocation portable after ZIP or preset installation. +Runtime, public API, dependencies, examples, project files, and `tv203s/` +remain unchanged.* + +Die früheren Adoptionen bleiben in +`specs/023-a11y-framework/preset-adoption-evidence.md` und +`specs/025-core-runtime-conformance-hardening/preset-adoption-v0.1.2-evidence.md` +historisch unverändert. + +*Earlier adoption records remain historically unchanged in the Feature 023 and +Feature 025 evidence files.* + +## Veröffentlichte Quelle + +| Feld | Nachweis | +|---|---| +| Gate-Evidence-Paket | `hindermath/home-baseline#62`, Merge `cb58d751ac477f95f9831a32feb4fd24a09387fb` | +| Gate-Evidence-Preset | `hindermath/spec-kit-preset-autonomous-run-governance#3`, Merge `5a6355c93e21341279eef51729f6a19ebff12d53` | +| Installer-Patch-Paket | `hindermath/home-baseline#63`, Merge `9322fad9ba689d516da2c1391f12db7ef1818652` | +| Installer-Patch-Preset | `hindermath/spec-kit-preset-autonomous-run-governance#4`, Merge `0ab22e3262ea0e44faf87408ae3a9c7366277e8b` | +| Release | | +| Tag-ZIP | | +| SHA-256 | `da667e2fd3fc5ccf0a29f7fd078d9f030f50ba267f659fc5b31bc000b59767e0` | +| Spec Kit | lokal `0.12.11`, Preset-Anforderung `>=0.8.3` | +| Priorität | `70` nach der unveränderten Sechsermatrix | + +## Installations- und Paritätsnachweis + +Der veröffentlichte v0.1.4-Tag-ZIP wurde mit +`specify preset add --from --priority 70` installiert. Die +bekannte OpenCode-Legacy-Warnung zu `.opencode/command` blieb rein informativ. +Der installierte Payload entspricht bytegleich dem öffentlichen `main`. + +*The published v0.1.4 tag ZIP was installed at priority 70. The known +`.opencode/command` legacy warning remained informational. The installed payload +is byte-identical to public `main`.* + +| Oberfläche | `autonomous` | `autonomous-retrospective` | Ergebnis | +|---|---:|---:|---| +| Codex und Antigravity `.agents/skills/` | 1 | 1 | gemeinsamer eindeutiger Pfad; lokaler Codex-Override gezielt aktualisiert | +| Claude `.claude/skills/` | 1 | 1 | v0.1.4 erzeugt | +| Copilot `.github/agents/` | 1 | 1 | v0.1.4 erzeugt | +| Copilot `.github/prompts/` | 1 | 1 | bestehender Legacy-Prompt-Pfad eindeutig | +| OpenCode `.opencode/command/` | 1 | 1 | v0.1.4 erzeugt; Legacy-Pfad dokumentiert | + +Der projektgebundene Codex-Override wurde bewusst von SHA-256 +`370b6f184a4ccd86a8675bc07faad516148326134c42353d86c2ef439c03f15a` +auf `8e17466b6dc8a6bd314e4dab054da88fa28542117c8f8301a77cba336847b037` +aktualisiert. Seine OpenAI-UI-Metadaten blieben bytegleich bei +`e6e65ee0586b82a4fbbc30bddc8d32b3866a98405d216e6419a3462ba84acff0`. + +*The project-owned Codex override changed intentionally to adopt the new gate +contract and explicit interpreter invocation. Its OpenAI UI metadata remained +byte-identical.* + +## Portable Regeln + +1. Vor der Implementierung deklariert ein geprüftes JSON-Artefakt jedes + Acceptance-Gate mit stabiler ID, Scope, Command-Tokens und optionalen + Runner-/Plattform-Tokens. `N/A` benötigt Begründung und Neubewertungstrigger. +2. Vor dem Merge bindet eine temporäre Provider-Evidence jedes Gate an den + exakten geprüften HEAD und genau einen `Primary`-Nachweis. Commands und Runner + stammen aus Workflow-Definitionen oder Job-Logs, nicht aus grünen Namen. +3. Der installierte Validator wird über `bash ` oder + `pwsh -NoProfile -File ` aufgerufen. ZIP-Extraktion und Preset- + Installation müssen das Git-Ausführungsbit nicht erhalten. +4. Der Validator ist read-only. Ein Pass erteilt keine Commit-, Push-, PR-, + Merge-, Bypass- oder Provider-Berechtigung. + +*Before implementation, a reviewed JSON artifact declares every acceptance +gate. Before merge, temporary provider evidence binds each gate to the exact +reviewed HEAD and exactly one Primary proof derived from workflow definitions or +job logs. Installed scripts run through an explicit Bash or PowerShell +interpreter because executable mode bits are not portable. Validator success is +read-only and grants no remote authority.* + +## Validierung + +| Prüfung | Ergebnis | +|---|---| +| `specify check` | Pass; Spec Kit und Antigravity verfügbar, direkte Gemini CLI nicht installiert | +| `preset list` und `preset info` | Pass; sieben Presets, v0.1.4 aktiv bei Priorität 70 und 14 Beiträgen | +| Constitution-/Spec-/Plan-/Tasks-Resolve | Pass; v0.1.4 je Kette genau einmal | +| JSON-Template-Resolve | Pass; Requirements und Evidence lösen eindeutig auf v0.1.4 auf | +| Öffentlicher Payload-Vergleich | Pass; installierter Inhalt entspricht dem gemergten öffentlichen Repository | +| GitHub-Tag-ZIP | Pass; SHA-256 geprüft und frische Installation erfolgreich | +| Installierter Bash-Modus | Erwartete Grenze; Tag-ZIP installiert das Skript als nicht ausführbares `0644` | +| Bash-Validator | Pass; expliziter `bash`-Aufruf akzeptiert zwei Gates und zwei Primary-Zeilen | +| PowerShell-Validator | Pass; äquivalente Fixture über `pwsh -NoProfile -File` | +| Agent-/Skill-Eindeutigkeit | Pass; beide Commands je gepflegter Oberfläche genau einmal | +| Codex-Override | Pass; Skill absichtlich aktualisiert, UI-Metadaten bytegleich erhalten | +| Antigravity | Pass; `agy` 1.1.1 aktiv, direkter Gemini-CLI-Befehl nicht installiert | +| Standard-Presets | Pass; Versionen 0.6.0/0.5.0/0.2.0/0.4.0/0.2.0/0.3.0 unverändert | +| Lokaler Skill | Pass; `quick_validate.py` mit der Spec-Kit-Python-Umgebung | +| Agent-Parität | Pass; gemeinsame v0.1.4-Regel auf fünf Guidance-Flächen bytegleich | +| `git diff --check` | Pass | +| `dotnet format --verify-no-changes --no-restore` | Pass | +| Secret-Scan | Pass; Gitleaks ohne Fund, keine High-Risiken | +| DocFX | Pass; viermal 0 Warnungen und 0 Fehler | +| Playwright und axe | Pass; 2/2 Tests | +| Textorientierter Review | Pass; Startseite und Projektstatistik mit UTF-8-`lynx` lesbar | +| Scope-Diff | Pass; keine Runtime-, API-, Abhängigkeits-, Beispiel-, Projekt- oder `tv203s/`-Änderung | + +## Trigger und Restrisiko + +Agent-Guidance, Repository-Template, Evidence und Projektstatistik lösen den +normalen DocFX-, A11Y- und textorientierten Nachweispfad aus. .NET-Build, Tests +und Coverage werden nicht ausgelöst, weil keine ausführbare Produktdatei, +Projektdatei, Abhängigkeit oder Testlogik geändert wird. + +*Agent guidance, a repository template, evidence, and project statistics trigger +the normal DocFX, A11Y, and text-oriented proof path. .NET build, tests, and +coverage are not triggered because no executable product file, project file, +dependency, or test logic changes.* + +Restrisiko bleibt der bewusst projektgebundene Codex-Override. Er liegt an genau +einem Pfad, besitzt eigene UI-Metadaten und wird im nächsten autonomen Lauf 028 +zusammen mit dem portablen v0.1.4-Payload erneut geprüft. + +*The intentional project-owned Codex override remains the residual risk. It has +one path, preserves its UI metadata, and will be revalidated with the portable +v0.1.4 payload during the next autonomous Feature 028 run.*