diff --git a/.agents/skills/speckit-intake-series-next/SKILL.md b/.agents/skills/speckit-intake-series-next/SKILL.md index d78b1f9..c1ac43c 100644 --- a/.agents/skills/speckit-intake-series-next/SKILL.md +++ b/.agents/skills/speckit-intake-series-next/SKILL.md @@ -26,7 +26,8 @@ Select candidates only from a valid, current named series. evidence only and grants no implementation, push, PR, merge, bypass, or provider authority. 4. Report all eligible targets in visible order. If none are eligible, report - each exact blocker and evidence path. + each exact blocker and evidence path. For a valid `Idle` series, report that + no active intake exists and do not treat this as an error. 5. Distinguish preferred order and shared-writer serialization from binding functional dependencies. 6. Revalidate downstream review freshness and user authority only when a later diff --git a/.agents/skills/speckit-intake-series-status/SKILL.md b/.agents/skills/speckit-intake-series-status/SKILL.md index 0418590..5712c0f 100644 --- a/.agents/skills/speckit-intake-series-status/SKILL.md +++ b/.agents/skills/speckit-intake-series-status/SKILL.md @@ -21,6 +21,8 @@ Inspect one named series read-only. 2. Run Bash and PowerShell validators. 3. Report identity, status, targets, roots, dependencies, eligible targets, blockers, receipt lineage, archive/tombstone state, and drift. + `Idle` is valid only for a repository with zero active targets, roots, and + dependencies; report that state explicitly instead of inventing a target. 4. When schema-2.0 requirements governance is configured, validate it first and resolve target paths from its portable roles and collection paths. Confirm that the human-readable order and manifest use the same resolved paths. diff --git a/.claude/skills/speckit-autonomous/SKILL.md b/.claude/skills/speckit-autonomous/SKILL.md index ad82054..e933440 100644 --- a/.claude/skills/speckit-autonomous/SKILL.md +++ b/.claude/skills/speckit-autonomous/SKILL.md @@ -151,4 +151,4 @@ Finish with task and artifact counts, validation, skipped conditions, review state, follow-ups, remote identifiers when authorized, and exact local/remote synchronization. Set `Completed` only when every applicable schema-1.1 closeout field is terminal and final validation is `Completed`. Do not start the next -feature implicitly. +feature implicitly. \ No newline at end of file diff --git a/.claude/skills/speckit-intake-series-next/SKILL.md b/.claude/skills/speckit-intake-series-next/SKILL.md index 8389d6c..153aa5d 100644 --- a/.claude/skills/speckit-intake-series-next/SKILL.md +++ b/.claude/skills/speckit-intake-series-next/SKILL.md @@ -24,7 +24,8 @@ Select candidates only from a valid, current named series. evidence only and grants no implementation, push, PR, merge, bypass, or provider authority. 4. Report all eligible targets in visible order. If none are eligible, report - each exact blocker and evidence path. + each exact blocker and evidence path. For a valid `Idle` series, report that + no active intake exists and do not treat this as an error. 5. Distinguish preferred order and shared-writer serialization from binding functional dependencies. 6. Revalidate downstream review freshness and user authority only when a later diff --git a/.claude/skills/speckit-intake-series-status/SKILL.md b/.claude/skills/speckit-intake-series-status/SKILL.md index e0df78c..8b5399d 100644 --- a/.claude/skills/speckit-intake-series-status/SKILL.md +++ b/.claude/skills/speckit-intake-series-status/SKILL.md @@ -19,6 +19,8 @@ Inspect one named series read-only. 2. Run Bash and PowerShell validators. 3. Report identity, status, targets, roots, dependencies, eligible targets, blockers, receipt lineage, archive/tombstone state, and drift. + `Idle` is valid only for a repository with zero active targets, roots, and + dependencies; report that state explicitly instead of inventing a target. 4. When schema-2.0 requirements governance is configured, validate it first and resolve target paths from its portable roles and collection paths. Confirm that the human-readable order and manifest use the same resolved paths. diff --git a/.claude/skills/speckit-parallel-autonomous/SKILL.md b/.claude/skills/speckit-parallel-autonomous/SKILL.md index 537b61a..14af8e1 100644 --- a/.claude/skills/speckit-parallel-autonomous/SKILL.md +++ b/.claude/skills/speckit-parallel-autonomous/SKILL.md @@ -52,4 +52,4 @@ or incomplete result schedules zero workers. *DE: Worker-spezifische Runner-Profile duerfen das Kampagnenprofil ueberschreiben. Modell und Reasoning nur bei ausdruecklicher Deklaration -anzeigen; keine fremde Agentenkonfiguration erraten.* +anzeigen; keine fremde Agentenkonfiguration erraten.* \ No newline at end of file diff --git a/.github/agents/speckit.autonomous.agent.md b/.github/agents/speckit.autonomous.agent.md index 21af9de..5fdd7e4 100644 --- a/.github/agents/speckit.autonomous.agent.md +++ b/.github/agents/speckit.autonomous.agent.md @@ -148,4 +148,4 @@ Finish with task and artifact counts, validation, skipped conditions, review state, follow-ups, remote identifiers when authorized, and exact local/remote synchronization. Set `Completed` only when every applicable schema-1.1 closeout field is terminal and final validation is `Completed`. Do not start the next -feature implicitly. +feature implicitly. \ No newline at end of file diff --git a/.github/agents/speckit.intake-series-next.agent.md b/.github/agents/speckit.intake-series-next.agent.md index 83072b4..c0a7dc3 100644 --- a/.github/agents/speckit.intake-series-next.agent.md +++ b/.github/agents/speckit.intake-series-next.agent.md @@ -21,7 +21,8 @@ Select candidates only from a valid, current named series. evidence only and grants no implementation, push, PR, merge, bypass, or provider authority. 4. Report all eligible targets in visible order. If none are eligible, report - each exact blocker and evidence path. + each exact blocker and evidence path. For a valid `Idle` series, report that + no active intake exists and do not treat this as an error. 5. Distinguish preferred order and shared-writer serialization from binding functional dependencies. 6. Revalidate downstream review freshness and user authority only when a later diff --git a/.github/agents/speckit.intake-series-status.agent.md b/.github/agents/speckit.intake-series-status.agent.md index 5f89b8c..28435fd 100644 --- a/.github/agents/speckit.intake-series-status.agent.md +++ b/.github/agents/speckit.intake-series-status.agent.md @@ -16,6 +16,8 @@ Inspect one named series read-only. 2. Run Bash and PowerShell validators. 3. Report identity, status, targets, roots, dependencies, eligible targets, blockers, receipt lineage, archive/tombstone state, and drift. + `Idle` is valid only for a repository with zero active targets, roots, and + dependencies; report that state explicitly instead of inventing a target. 4. When schema-2.0 requirements governance is configured, validate it first and resolve target paths from its portable roles and collection paths. Confirm that the human-readable order and manifest use the same resolved paths. diff --git a/.github/agents/speckit.parallel-autonomous.agent.md b/.github/agents/speckit.parallel-autonomous.agent.md index 148bde2..8d5156a 100644 --- a/.github/agents/speckit.parallel-autonomous.agent.md +++ b/.github/agents/speckit.parallel-autonomous.agent.md @@ -49,4 +49,4 @@ or incomplete result schedules zero workers. *DE: Worker-spezifische Runner-Profile duerfen das Kampagnenprofil ueberschreiben. Modell und Reasoning nur bei ausdruecklicher Deklaration -anzeigen; keine fremde Agentenkonfiguration erraten.* +anzeigen; keine fremde Agentenkonfiguration erraten.* \ No newline at end of file diff --git a/.opencode/command/speckit.autonomous.md b/.opencode/command/speckit.autonomous.md index 21af9de..5fdd7e4 100644 --- a/.opencode/command/speckit.autonomous.md +++ b/.opencode/command/speckit.autonomous.md @@ -148,4 +148,4 @@ Finish with task and artifact counts, validation, skipped conditions, review state, follow-ups, remote identifiers when authorized, and exact local/remote synchronization. Set `Completed` only when every applicable schema-1.1 closeout field is terminal and final validation is `Completed`. Do not start the next -feature implicitly. +feature implicitly. \ No newline at end of file diff --git a/.opencode/command/speckit.intake-series-next.md b/.opencode/command/speckit.intake-series-next.md index 83072b4..c0a7dc3 100644 --- a/.opencode/command/speckit.intake-series-next.md +++ b/.opencode/command/speckit.intake-series-next.md @@ -21,7 +21,8 @@ Select candidates only from a valid, current named series. evidence only and grants no implementation, push, PR, merge, bypass, or provider authority. 4. Report all eligible targets in visible order. If none are eligible, report - each exact blocker and evidence path. + each exact blocker and evidence path. For a valid `Idle` series, report that + no active intake exists and do not treat this as an error. 5. Distinguish preferred order and shared-writer serialization from binding functional dependencies. 6. Revalidate downstream review freshness and user authority only when a later diff --git a/.opencode/command/speckit.intake-series-status.md b/.opencode/command/speckit.intake-series-status.md index 5f89b8c..28435fd 100644 --- a/.opencode/command/speckit.intake-series-status.md +++ b/.opencode/command/speckit.intake-series-status.md @@ -16,6 +16,8 @@ Inspect one named series read-only. 2. Run Bash and PowerShell validators. 3. Report identity, status, targets, roots, dependencies, eligible targets, blockers, receipt lineage, archive/tombstone state, and drift. + `Idle` is valid only for a repository with zero active targets, roots, and + dependencies; report that state explicitly instead of inventing a target. 4. When schema-2.0 requirements governance is configured, validate it first and resolve target paths from its portable roles and collection paths. Confirm that the human-readable order and manifest use the same resolved paths. diff --git a/.opencode/command/speckit.parallel-autonomous.md b/.opencode/command/speckit.parallel-autonomous.md index 148bde2..8d5156a 100644 --- a/.opencode/command/speckit.parallel-autonomous.md +++ b/.opencode/command/speckit.parallel-autonomous.md @@ -49,4 +49,4 @@ or incomplete result schedules zero workers. *DE: Worker-spezifische Runner-Profile duerfen das Kampagnenprofil ueberschreiben. Modell und Reasoning nur bei ausdruecklicher Deklaration -anzeigen; keine fremde Agentenkonfiguration erraten.* +anzeigen; keine fremde Agentenkonfiguration erraten.* \ No newline at end of file diff --git a/.specify/presets/.registry b/.specify/presets/.registry index 6b71ce9..026f143 100644 --- a/.specify/presets/.registry +++ b/.specify/presets/.registry @@ -44,7 +44,7 @@ "speckit-plan", "speckit-tasks" ], - "installed_at": "2026-07-25T16:29:07.244504+00:00" + "installed_at": "2026-07-28T11:36:26.701110+00:00" }, "architecture-governance": { "version": "0.5.1", @@ -89,7 +89,7 @@ "speckit-plan", "speckit-tasks" ], - "installed_at": "2026-07-25T16:29:08.791856+00:00" + "installed_at": "2026-07-28T11:36:28.304642+00:00" }, "isaqb-architecture-governance": { "version": "0.2.1", @@ -134,7 +134,7 @@ "speckit-plan", "speckit-tasks" ], - "installed_at": "2026-07-25T16:29:10.331128+00:00" + "installed_at": "2026-07-28T11:36:29.832951+00:00" }, "a11y-governance": { "version": "0.4.2", @@ -179,7 +179,7 @@ "speckit-plan", "speckit-tasks" ], - "installed_at": "2026-07-25T16:29:11.848012+00:00" + "installed_at": "2026-07-28T11:36:31.415223+00:00" }, "cross-platform-governance": { "version": "0.2.1", @@ -224,7 +224,7 @@ "speckit-plan", "speckit-tasks" ], - "installed_at": "2026-07-25T16:29:13.372476+00:00" + "installed_at": "2026-07-28T11:36:32.972300+00:00" }, "agent-parity-governance": { "version": "0.4.1", @@ -269,125 +269,7 @@ "speckit-plan", "speckit-tasks" ], - "installed_at": "2026-07-25T16:29:14.903568+00:00" - }, - "autonomous-run-governance": { - "version": "0.3.3", - "source": "local", - "manifest_hash": "sha256:9cc9b4f7836be65b1ccd20a0c9be41d4ae9073b609d63b112ee61ba5ab747e4d", - "enabled": true, - "priority": 70, - "registered_commands": { - "agy": [ - "speckit.autonomous", - "speckit.autonomous-retrospective", - "speckit.autonomous-status", - "speckit.autonomous-stop", - "speckit.autonomous-resume" - ], - "claude": [ - "speckit.autonomous", - "speckit.autonomous-retrospective", - "speckit.autonomous-status", - "speckit.autonomous-stop", - "speckit.autonomous-resume" - ], - "codex": [ - "speckit.autonomous", - "speckit.autonomous-retrospective", - "speckit.autonomous-status", - "speckit.autonomous-stop", - "speckit.autonomous-resume" - ], - "copilot": [ - "speckit.autonomous", - "speckit.autonomous-retrospective", - "speckit.autonomous-status", - "speckit.autonomous-stop", - "speckit.autonomous-resume" - ], - "opencode": [ - "speckit.autonomous", - "speckit.autonomous-retrospective", - "speckit.autonomous-status", - "speckit.autonomous-stop", - "speckit.autonomous-resume" - ], - "zed": [ - "speckit.autonomous", - "speckit.autonomous-retrospective", - "speckit.autonomous-status", - "speckit.autonomous-stop", - "speckit.autonomous-resume" - ] - }, - "registered_skills": [ - "speckit-autonomous", - "speckit-autonomous-retrospective", - "speckit-autonomous-status", - "speckit-autonomous-stop", - "speckit-autonomous-resume" - ], - "installed_at": "2026-07-25T16:29:20.952622+00:00" - }, - "parallel-autonomous-run-governance": { - "version": "0.2.4", - "source": "local", - "manifest_hash": "sha256:9c6c0895797e601a8227d4a8ff923709c6ab7135a33791545ab8555eadfda2bb", - "enabled": true, - "priority": 80, - "registered_commands": { - "agy": [ - "speckit.parallel-autonomous", - "speckit.parallel-autonomous-status", - "speckit.parallel-autonomous-stop", - "speckit.parallel-autonomous-resume", - "speckit.parallel-autonomous-consolidate" - ], - "claude": [ - "speckit.parallel-autonomous", - "speckit.parallel-autonomous-status", - "speckit.parallel-autonomous-stop", - "speckit.parallel-autonomous-resume", - "speckit.parallel-autonomous-consolidate" - ], - "codex": [ - "speckit.parallel-autonomous", - "speckit.parallel-autonomous-status", - "speckit.parallel-autonomous-stop", - "speckit.parallel-autonomous-resume", - "speckit.parallel-autonomous-consolidate" - ], - "copilot": [ - "speckit.parallel-autonomous", - "speckit.parallel-autonomous-status", - "speckit.parallel-autonomous-stop", - "speckit.parallel-autonomous-resume", - "speckit.parallel-autonomous-consolidate" - ], - "opencode": [ - "speckit.parallel-autonomous", - "speckit.parallel-autonomous-status", - "speckit.parallel-autonomous-stop", - "speckit.parallel-autonomous-resume", - "speckit.parallel-autonomous-consolidate" - ], - "zed": [ - "speckit.parallel-autonomous", - "speckit.parallel-autonomous-status", - "speckit.parallel-autonomous-stop", - "speckit.parallel-autonomous-resume", - "speckit.parallel-autonomous-consolidate" - ] - }, - "registered_skills": [ - "speckit-parallel-autonomous", - "speckit-parallel-autonomous-status", - "speckit-parallel-autonomous-stop", - "speckit-parallel-autonomous-resume", - "speckit-parallel-autonomous-consolidate" - ], - "installed_at": "2026-07-25T16:29:22.514101+00:00" + "installed_at": "2026-07-28T11:36:34.523410+00:00" }, "intake-authoring-governance": { "version": "0.3.0", @@ -446,7 +328,7 @@ "speckit-intake-delete", "speckit-intake-create-status" ], - "installed_at": "2026-07-28T08:58:10.612613+00:00" + "installed_at": "2026-07-28T11:36:36.078992+00:00" }, "intake-review-governance": { "version": "0.2.0", @@ -491,12 +373,12 @@ "speckit-intake-repair", "speckit-intake-review-status" ], - "installed_at": "2026-07-28T08:58:11.510811+00:00" + "installed_at": "2026-07-28T11:36:37.575491+00:00" }, "intake-sequencing-governance": { - "version": "0.2.0", + "version": "0.2.2", "source": "local", - "manifest_hash": "sha256:30ec152d1db11218f60532e4e1f2cfcf71adc0c304ff3e8d75bfab87642bbb05", + "manifest_hash": "sha256:9fe9bb521e0d985f359e0d7208e75b404f1d2a91ba68a4bc7f2384232926eb16", "enabled": true, "priority": 66, "registered_commands": { @@ -557,7 +439,125 @@ "speckit-intake-series-status", "speckit-intake-series-next" ], - "installed_at": "2026-07-28T08:58:12.395545+00:00" + "installed_at": "2026-07-28T11:36:39.066911+00:00" + }, + "autonomous-run-governance": { + "version": "0.3.3", + "source": "local", + "manifest_hash": "sha256:9cc9b4f7836be65b1ccd20a0c9be41d4ae9073b609d63b112ee61ba5ab747e4d", + "enabled": true, + "priority": 70, + "registered_commands": { + "agy": [ + "speckit.autonomous", + "speckit.autonomous-retrospective", + "speckit.autonomous-status", + "speckit.autonomous-stop", + "speckit.autonomous-resume" + ], + "claude": [ + "speckit.autonomous", + "speckit.autonomous-retrospective", + "speckit.autonomous-status", + "speckit.autonomous-stop", + "speckit.autonomous-resume" + ], + "codex": [ + "speckit.autonomous", + "speckit.autonomous-retrospective", + "speckit.autonomous-status", + "speckit.autonomous-stop", + "speckit.autonomous-resume" + ], + "copilot": [ + "speckit.autonomous", + "speckit.autonomous-retrospective", + "speckit.autonomous-status", + "speckit.autonomous-stop", + "speckit.autonomous-resume" + ], + "opencode": [ + "speckit.autonomous", + "speckit.autonomous-retrospective", + "speckit.autonomous-status", + "speckit.autonomous-stop", + "speckit.autonomous-resume" + ], + "zed": [ + "speckit.autonomous", + "speckit.autonomous-retrospective", + "speckit.autonomous-status", + "speckit.autonomous-stop", + "speckit.autonomous-resume" + ] + }, + "registered_skills": [ + "speckit-autonomous", + "speckit-autonomous-retrospective", + "speckit-autonomous-status", + "speckit-autonomous-stop", + "speckit-autonomous-resume" + ], + "installed_at": "2026-07-28T11:36:40.631702+00:00" + }, + "parallel-autonomous-run-governance": { + "version": "0.2.4", + "source": "local", + "manifest_hash": "sha256:9c6c0895797e601a8227d4a8ff923709c6ab7135a33791545ab8555eadfda2bb", + "enabled": true, + "priority": 80, + "registered_commands": { + "agy": [ + "speckit.parallel-autonomous", + "speckit.parallel-autonomous-status", + "speckit.parallel-autonomous-stop", + "speckit.parallel-autonomous-resume", + "speckit.parallel-autonomous-consolidate" + ], + "claude": [ + "speckit.parallel-autonomous", + "speckit.parallel-autonomous-status", + "speckit.parallel-autonomous-stop", + "speckit.parallel-autonomous-resume", + "speckit.parallel-autonomous-consolidate" + ], + "codex": [ + "speckit.parallel-autonomous", + "speckit.parallel-autonomous-status", + "speckit.parallel-autonomous-stop", + "speckit.parallel-autonomous-resume", + "speckit.parallel-autonomous-consolidate" + ], + "copilot": [ + "speckit.parallel-autonomous", + "speckit.parallel-autonomous-status", + "speckit.parallel-autonomous-stop", + "speckit.parallel-autonomous-resume", + "speckit.parallel-autonomous-consolidate" + ], + "opencode": [ + "speckit.parallel-autonomous", + "speckit.parallel-autonomous-status", + "speckit.parallel-autonomous-stop", + "speckit.parallel-autonomous-resume", + "speckit.parallel-autonomous-consolidate" + ], + "zed": [ + "speckit.parallel-autonomous", + "speckit.parallel-autonomous-status", + "speckit.parallel-autonomous-stop", + "speckit.parallel-autonomous-resume", + "speckit.parallel-autonomous-consolidate" + ] + }, + "registered_skills": [ + "speckit-parallel-autonomous", + "speckit-parallel-autonomous-status", + "speckit-parallel-autonomous-stop", + "speckit-parallel-autonomous-resume", + "speckit-parallel-autonomous-consolidate" + ], + "installed_at": "2026-07-28T11:36:42.215703+00:00" } } } \ No newline at end of file diff --git a/.specify/presets/intake-sequencing-governance/README.md b/.specify/presets/intake-sequencing-governance/README.md index 7234d20..74fbb7c 100644 --- a/.specify/presets/intake-sequencing-governance/README.md +++ b/.specify/presets/intake-sequencing-governance/README.md @@ -1,7 +1,7 @@ # Intake Sequencing Governance Optional Spec Kit preset for managing the order and lifecycle of existing -intakes. Version `0.2.0` uses priority `66`: after Intake Review at `65` and +intakes. Version `0.2.2` uses priority `66`: after Intake Review at `65` and before Autonomous Run at `70`. ## Why This Preset Exists @@ -11,16 +11,34 @@ delivery order. This preset stores both a learner-readable order and a machine-checkable typed graph. It never writes intake content and never starts the work it selects. -Version `0.2.0` preserves the project-declared learner contract in the readable +Version `0.2.2` preserves the project-declared learner contract in the readable order: audience, prior knowledge, language and readability, first-use terms, and a normative text representation of dependencies, blockers, status, decisions, and next actions. +Version `0.2.2` adds the explicit state `Idle` for a repository that currently +has no active intake of its own. An idle series has no targets, roots, or +dependencies. This state prevents tools from inventing a placeholder intake +only to satisfy a non-empty graph rule. + +*Version `0.2.2` ergänzt den ausdrücklichen Zustand `Idle` für ein Repository +ohne eigenen aktiven Intake. Eine solche Serie enthält keine Ziele, Roots oder +Abhängigkeiten. Werkzeuge dürfen dafür keinen künstlichen Platzhalter erzeugen.* + +Version `0.2.2` keeps canonical-index validation inside the current Git +repository boundary. An index owned by a nested repository is not a duplicate +of its parent index, while an ordinary second index in the same repository +still blocks validation. + +*Version `0.2.2` begrenzt die Indexprüfung auf das aktuelle Git-Repository. Der +Index eines verschachtelten Repositories ist kein Duplikat des Eltern-Indexes. +Ein gewöhnlicher zweiter Index im selben Repository bleibt ein Fehler.* + ## Installation ```bash specify preset add \ - --from https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance/archive/refs/tags/v0.2.0.zip \ + --from https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance/archive/refs/tags/v0.2.2.zip \ --priority 66 ``` @@ -44,6 +62,10 @@ A --> B --> C If `A` is completed, `B` may be eligible. `next` reports that fact, but does not invoke Intake Review, Specify, Autonomous, or Parallel Autonomous. +For an `Idle` series, `next` reports that no active intake exists and returns no +candidate. `Idle` is invalid as soon as a target, root, or dependency is +present. + ## Edge Types Binding types model real prerequisites. `PreferredSerialOrder` and @@ -74,7 +96,8 @@ does not grant execution or remote authority. requirements migration must finish before existing roots are released. Under schema 2.0, target paths are resolved from portable roles and collection paths. At most one target may explicitly declare `Eligible`; that state selects order -only and grants no implementation or remote authority. +only and grants no implementation or remote authority. A valid `Idle` series +has no eligible target. *`RequirementsGovernanceGate` sperrt bestehende Roots bis zum gemeinsamen Requirements-Abschluss. Schema 2.0 löst Pfade über Rollen auf. Höchstens ein diff --git a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-next.md b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-next.md index d3a24b3..a149522 100644 --- a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-next.md +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-next.md @@ -18,7 +18,8 @@ Select candidates only from a valid, current named series. evidence only and grants no implementation, push, PR, merge, bypass, or provider authority. 4. Report all eligible targets in visible order. If none are eligible, report - each exact blocker and evidence path. + each exact blocker and evidence path. For a valid `Idle` series, report that + no active intake exists and do not treat this as an error. 5. Distinguish preferred order and shared-writer serialization from binding functional dependencies. 6. Revalidate downstream review freshness and user authority only when a later diff --git a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-status.md b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-status.md index 7ccb62f..5d0d208 100644 --- a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-status.md +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-status.md @@ -14,6 +14,8 @@ Inspect one named series read-only. 2. Run Bash and PowerShell validators. 3. Report identity, status, targets, roots, dependencies, eligible targets, blockers, receipt lineage, archive/tombstone state, and drift. + `Idle` is valid only for a repository with zero active targets, roots, and + dependencies; report that state explicitly instead of inventing a target. 4. When schema-2.0 requirements governance is configured, validate it first and resolve target paths from its portable roles and collection paths. Confirm that the human-readable order and manifest use the same resolved paths. diff --git a/.specify/presets/intake-sequencing-governance/docs/README.md b/.specify/presets/intake-sequencing-governance/docs/README.md index 0d2e3d1..2692130 100644 --- a/.specify/presets/intake-sequencing-governance/docs/README.md +++ b/.specify/presets/intake-sequencing-governance/docs/README.md @@ -1,5 +1,6 @@ # Documentation The package README explains installation, commands, edge types, lifecycle, -authority, and composition. The runbook template provides operational detail. -The manpages document both Bash validator entry points. +authority, the explicit empty `Idle` state, and composition. The runbook +template provides operational detail. The manpages document both Bash validator +entry points. diff --git a/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md b/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md index caed6c3..6cdd08d 100644 --- a/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md +++ b/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md @@ -1,8 +1,12 @@ # Field Validation Summary -Version `0.2.0` is validated with: +Version `0.2.2` is validated with: - a synthetic three-target, one-root, two-edge series; +- an explicit zero-target `Idle` series; +- negative fixtures for `Idle` with content and non-idle without targets; +- a nested Git repository whose canonical index is excluded from the parent + uniqueness check, plus a blocking ordinary duplicate-directory fixture; - malformed path, type, binding, order, root, lifecycle, and hash fixtures; - Bash and PowerShell wrapper parity over one portable validation core; - the Home Baseline 18-target, 1-root, 28-edge requirements-governance series @@ -10,7 +14,7 @@ Version `0.2.0` is validated with: - optional eleven-preset composition and one-command-per-surface checks; - a versioned release ZIP and SHA-256 smoke test. -Local package validation on 2026-07-28 passed PSScriptAnalyzer across 128 +Local package validation on 2026-07-28 passed PSScriptAnalyzer across 146 tracked PowerShell files, both sequencing fixture suites, canonical/publication byte comparison, Spec Kit add/list/info/resolve/disable/enable/remove/reinstall, and one generated command per Codex, Claude, Copilot, Antigravity, and OpenCode diff --git a/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-governance-config.1 b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-governance-config.1 index 2270294..d39fc3b 100644 --- a/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-governance-config.1 +++ b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-governance-config.1 @@ -1,4 +1,4 @@ -.TH VALIDATE-INTAKE-GOVERNANCE-CONFIG 1 "2026-07-28" "0.2.0" +.TH VALIDATE-INTAKE-GOVERNANCE-CONFIG 1 "2026-07-28" "0.2.2" .SH NAME validate-intake-governance-config \- validate language-aware requirements governance .SH SYNOPSIS @@ -17,6 +17,12 @@ repository. .SH OUTCOMES Configured collections report Aligned, MigrationRequired, NeedsClarification, or Blocked. Eligibility is an ordering result and grants no delivery authority. +An Idle series is Aligned only when it contains no targets, roots, or +dependencies and therefore has no eligible candidate. +.PP +Canonical-index uniqueness follows Git repository boundaries. An index in a +nested Git checkout belongs to that checkout; an ordinary duplicate index +inside the current repository remains invalid. .SH EXIT STATUS Zero means Aligned or a valid journal. One means migration or clarification is required. Two means blocked or invalid input. diff --git a/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-manifest.1 b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-manifest.1 index ca976c0..3566519 100644 --- a/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-manifest.1 +++ b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-manifest.1 @@ -1,4 +1,4 @@ -.TH VALIDATE-INTAKE-SERIES-MANIFEST 1 "2026-07-25" "0.2.0" +.TH VALIDATE-INTAKE-SERIES-MANIFEST 1 "2026-07-25" "0.2.2" .SH NAME validate-intake-series-manifest.sh \- validate an intake-series manifest .SH SYNOPSIS @@ -8,5 +8,8 @@ validate-intake-series-manifest.sh \- validate an intake-series manifest Validates strict UTF-8, repository-relative target paths, normalized hashes, lifecycle states, roots, typed edges, declared order, and acyclicity without modifying files. +.PP +The explicit state Idle is valid only with zero targets, roots, and +dependencies. Every other active lifecycle state requires a non-empty series. .SH EXIT STATUS Returns 0 for valid evidence and 2 for invalid input or drift. diff --git a/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-receipt.1 b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-receipt.1 index c0ab859..31b4c4c 100644 --- a/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-receipt.1 +++ b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-receipt.1 @@ -1,4 +1,4 @@ -.TH VALIDATE-INTAKE-SERIES-RECEIPT 1 "2026-07-25" "0.2.0" +.TH VALIDATE-INTAKE-SERIES-RECEIPT 1 "2026-07-25" "0.2.2" .SH NAME validate-intake-series-receipt.sh \- validate an intake-series receipt .SH SYNOPSIS diff --git a/.specify/presets/intake-sequencing-governance/preset.yml b/.specify/presets/intake-sequencing-governance/preset.yml index d8d3459..47dbf84 100644 --- a/.specify/presets/intake-sequencing-governance/preset.yml +++ b/.specify/presets/intake-sequencing-governance/preset.yml @@ -3,7 +3,7 @@ schema_version: "1.0" preset: id: "intake-sequencing-governance" name: "Intake Sequencing Governance" - version: "0.2.0" + version: "0.2.2" description: "Manages language-aware intake-series order, typed dependencies, lifecycle, and authority-neutral next-candidate selection." author: "Thorsten Hindermann" repository: "https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance" @@ -16,6 +16,7 @@ provides: templates: - {type: "template", name: "intake-series-policy-template", file: "templates/intake-series-policy-template.json", description: "Project policy for series paths, edge types, lifecycle, and authority"} - {type: "template", name: "intake-series-manifest-template", file: "templates/intake-series-manifest-template.json", description: "Ordered targets, roots, typed dependencies, and lifecycle"} + - {type: "template", name: "intake-series-idle-manifest-template", file: "templates/intake-series-idle-manifest-template.json", description: "Explicit empty-series state for repositories without an active intake"} - {type: "template", name: "intake-series-receipt-template", file: "templates/intake-series-receipt-template.json", description: "Manifest hash, operation authority, lineage, and validation outcome"} - {type: "template", name: "intake-series-operation-template", file: "templates/intake-series-operation-template.json", description: "Transactional multi-file operation journal"} - {type: "template", name: "intake-series-tombstone-template", file: "templates/intake-series-tombstone-template.json", description: "Logical deletion and archive proof"} diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-governance-config.py b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-governance-config.py index 97507c2..d9ebc5a 100644 --- a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-governance-config.py +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-governance-config.py @@ -108,6 +108,18 @@ def intake_name_matches(name: str, pattern: str) -> bool: return name.startswith(prefix) and name.endswith(suffix) and len(name) > len(prefix) + len(suffix) +def belongs_to_nested_repository(path: Path, repo: Path) -> bool: + """Return true when a candidate belongs to a nested Git checkout.""" + current = path.parent + while current != repo: + if (current / ".git").exists(): + return True + if current == current.parent: + break + current = current.parent + return False + + def validate_series_manifest( path: Path, repo: Path, @@ -117,7 +129,19 @@ def validate_series_manifest( ) -> dict: manifest = load_json(path) targets = manifest.get("orderedTargets") - if not isinstance(targets, list) or not targets: + if not isinstance(targets, list): + fail("RIG014", "series manifest must contain orderedTargets") + series_status = manifest.get("status") + if series_status == "Idle": + if targets or manifest.get("roots") != [] or manifest.get("dependencies") != []: + fail("RIG017", "Idle requires zero targets, roots, and dependencies") + return { + "activeIntakeCount": 0, + "seriesTargetCount": 0, + "eligibleCandidate": "N/A", + "dependencyCount": 0, + } + if not targets: fail("RIG014", "series manifest must contain non-empty orderedTargets") active_paths = { @@ -304,6 +328,7 @@ def validate_config(data: dict, repo: Path) -> dict: if ".git" not in item.parts and "history" not in item.parts and "archive" not in item.parts + and not belongs_to_nested_repository(item, repo) ] if canonical_candidates != [repo / roles["requirements-index"]]: fail("RIG013", f"exactly one current canonical index is required: {canonical_candidates}") diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py index 68616af..43151a5 100644 --- a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py @@ -26,7 +26,7 @@ "SharedWriterSerialization", } BINDING_TYPES = EDGE_TYPES - {"PreferredSerialOrder", "SharedWriterSerialization"} -SERIES_STATES = {"Draft", "NeedsClarification", "Ready", "Active", "Completed", "Deleted"} +SERIES_STATES = {"Draft", "NeedsClarification", "Ready", "Active", "Idle", "Completed", "Deleted"} TARGET_STATES = {"Pending", "Blocked", "Eligible", "Active", "Completed", "Withdrawn"} @@ -102,7 +102,24 @@ def validate_manifest(path: Path, repo: Path) -> tuple[dict, dict]: fail("ISG009", f"unknown series status: {status}") targets = data.get("orderedTargets") - if not isinstance(targets, list) or not targets: + if not isinstance(targets, list): + fail("ISG003", "orderedTargets must be an array") + roots = data.get("roots") + dependencies = data.get("dependencies") + if status == "Idle": + if targets or roots != [] or dependencies != []: + fail("ISG009", "Idle requires zero targets, roots, and dependencies") + return data, { + "seriesId": series_id, + "status": status, + "targets": 0, + "roots": 0, + "dependencies": 0, + "eligible": [], + "declaredEligible": [], + "blockers": {}, + } + if not targets: fail("ISG003", "orderedTargets must be a non-empty array") paths: list[str] = [] target_states: dict[str, str] = {} @@ -127,13 +144,11 @@ def validate_manifest(path: Path, repo: Path) -> tuple[dict, dict]: paths.append(target_path) target_states[target_path] = target_status - roots = data.get("roots") if not isinstance(roots, list) or len(roots) != len(set(roots)): fail("ISG008", "roots must be a unique string array") if any(not isinstance(root, str) or root not in paths for root in roots): fail("ISG008", "roots contain an unknown target") - dependencies = data.get("dependencies") if not isinstance(dependencies, list): fail("ISG005", "dependencies must be an array") order = {target_path: index for index, target_path in enumerate(paths)} diff --git a/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md b/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md index 78de679..200a7a9 100644 --- a/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md +++ b/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md @@ -15,3 +15,7 @@ When schema 2.0 is configured, resolve target paths through portable roles and collection paths before validating order. `RequirementsGovernanceGate` is a binding predecessor. Exactly one evidenced `Eligible` candidate may be preferred; eligibility never grants implementation or remote authority. + +Represent a repository without an active intake as `Idle` with zero targets, +roots, and dependencies. Do not create a placeholder intake. Explain the idle +state and the condition that will require a new series in text. diff --git a/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md b/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md index 186f1ba..8deda3a 100644 --- a/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md +++ b/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md @@ -4,3 +4,11 @@ Record package version, exact commit, validator versions, synthetic cardinalities, Legacy Adoption cardinalities, malformed fixtures, shell parity, read-only hashes, preset composition, agent cardinality, release ZIP checksum, fleet status, residual risk, and reevaluation trigger. + +Record an explicit zero-target `Idle` fixture and negative cases for an idle +series with content and a non-idle series without targets. This proves that an +aggregator repository does not need a fabricated intake. + +Record a nested Git-repository fixture and an ordinary nested-directory +duplicate. The first must preserve parent/child ownership; the second must +remain blocked as a duplicate canonical index. diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-checklist-template.md b/.specify/presets/intake-sequencing-governance/templates/intake-series-checklist-template.md index ec47945..77da897 100644 --- a/.specify/presets/intake-sequencing-governance/templates/intake-series-checklist-template.md +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-checklist-template.md @@ -8,7 +8,10 @@ - [ ] Every edge uses an accepted type and correct binding flag. - [ ] `RequirementsGovernanceGate` is used only for a binding predecessor that must complete before the dependent intake becomes eligible. -- [ ] Exactly one current target is `Eligible`; eligibility grants no delivery authority. +- [ ] A non-idle series has exactly one current `Eligible` target; eligibility + grants no delivery authority. +- [ ] An `Idle` series has zero targets, roots, dependencies, and eligible + candidates. - [ ] The graph is order-consistent and acyclic. - [ ] Material ambiguity is recorded as `NeedsClarification`. - [ ] Write authority is current and bounded. diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-idle-manifest-template.json b/.specify/presets/intake-sequencing-governance/templates/intake-series-idle-manifest-template.json new file mode 100644 index 0000000..eb7d5e1 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-idle-manifest-template.json @@ -0,0 +1,15 @@ +{ + "schemaVersion": "1.0", + "documentType": "IntakeSeriesManifest", + "seriesId": "00000000-0000-4000-8000-000000000000", + "title": "Idle intake series", + "policy": "repository-policy", + "status": "Idle", + "orderedTargets": [], + "roots": [], + "dependencies": [], + "evidencePaths": [ + "Pflichtenheft.md", + "Lastenheft_Abarbeitungsreihenfolge.md" + ] +} diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-receipt-template.json b/.specify/presets/intake-sequencing-governance/templates/intake-series-receipt-template.json index 6b88a2d..1f1b106 100644 --- a/.specify/presets/intake-sequencing-governance/templates/intake-series-receipt-template.json +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-receipt-template.json @@ -3,7 +3,7 @@ "documentType": "IntakeSeriesReceipt", "receiptId": "00000000-0000-0000-0000-000000000000", "seriesId": "00000000-0000-0000-0000-000000000000", - "generator": {"preset": "intake-sequencing-governance", "version": "0.2.0"}, + "generator": {"preset": "intake-sequencing-governance", "version": "0.2.2"}, "createdAt": "1970-01-01T00:00:00Z", "operation": { "operationId": "00000000-0000-0000-0000-000000000000", diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-runbook-template.md b/.specify/presets/intake-sequencing-governance/templates/intake-series-runbook-template.md index ee17268..20e2bab 100644 --- a/.specify/presets/intake-sequencing-governance/templates/intake-series-runbook-template.md +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-runbook-template.md @@ -29,3 +29,12 @@ through `requirements/intake-governance-config.json`. Treat `RequirementsGovernanceGate` as a binding predecessor edge. Require exactly one evidenced `Eligible` target, but never interpret eligibility as implementation, remote-delivery, bypass, or follow-on authority. + +If the repository has no active intake of its own, use `status: "Idle"` with +empty `orderedTargets`, `roots`, and `dependencies`. Status and next must report +this state without inventing a placeholder target. Any target or edge makes an +idle series invalid. + +*Hat das Repository keinen eigenen aktiven Intake, wird `Idle` mit drei leeren +Listen verwendet. Status und Next erklären diesen Zustand textorientiert und +erfinden keinen Platzhalter.* diff --git a/.specify/presets/intake-sequencing-governance/tests/test-home-baseline-field.ps1 b/.specify/presets/intake-sequencing-governance/tests/test-home-baseline-field.ps1 index fc93ff2..fa54674 100644 --- a/.specify/presets/intake-sequencing-governance/tests/test-home-baseline-field.ps1 +++ b/.specify/presets/intake-sequencing-governance/tests/test-home-baseline-field.ps1 @@ -14,9 +14,9 @@ $Result = Get-Content -LiteralPath $ResultPath -Raw | ConvertFrom-Json -Depth 50 if ($Request.mode -ne 'Series' -or $Result.status -ne 'Ready') { throw 'The accepted Home Baseline Series evidence is not Ready.' } -if ($Request.targets.Count -ne 18 -or $Request.series.roots.Count -ne 1 -or - $Request.series.dependencies.Count -ne 28) { - throw 'Expected current cardinality is 18 targets, 1 root, and 28 dependencies.' +if ($Request.targets.Count -ne 17 -or $Request.series.roots.Count -ne 6 -or + $Request.series.dependencies.Count -ne 22) { + throw 'Expected current cardinality is 17 targets, 6 roots, and 22 dependencies.' } $ResultByPath = @{} @@ -66,7 +66,7 @@ try { & pwsh -NoProfile -File (Join-Path $PresetRoot 'scripts/validate-intake-series-manifest.ps1') ` -File $ManifestPath -Repo $RepositoryRoot if ($LASTEXITCODE -ne 0) { throw 'PowerShell LegacyAdoption validation failed.' } - Write-Output 'PASS: Home Baseline Series (18 targets, 1 root, 28 dependencies)' + Write-Output 'PASS: Home Baseline Series (17 targets, 6 roots, 22 dependencies)' } finally { Remove-Item -LiteralPath $TempRoot -Recurse -Force -ErrorAction SilentlyContinue } diff --git a/.specify/presets/intake-sequencing-governance/tests/test-intake-governance-config.ps1 b/.specify/presets/intake-sequencing-governance/tests/test-intake-governance-config.ps1 index 0a0ae5b..c2c1743 100644 --- a/.specify/presets/intake-sequencing-governance/tests/test-intake-governance-config.ps1 +++ b/.specify/presets/intake-sequencing-governance/tests/test-intake-governance-config.ps1 @@ -104,6 +104,20 @@ try { $Base = New-BaseConfig Invoke-Fixture (Write-JsonFixture 'de.json' $Base) 0 '"outcome": "Aligned"' + $NestedRepository = Join-Path $Root 'nested-repository' + New-Item -ItemType Directory -Path (Join-Path $NestedRepository '.git') -Force | + Out-Null + Set-Content -LiteralPath (Join-Path $NestedRepository 'Pflichtenheft.md') ` + -Value '# Nested repository index' -Encoding utf8NoBOM + Invoke-Fixture (Write-JsonFixture 'nested-repository.json' $Base) 0 '"outcome": "Aligned"' + + $NestedDirectory = Join-Path $Root 'ordinary-directory' + New-Item -ItemType Directory -Path $NestedDirectory -Force | Out-Null + Set-Content -LiteralPath (Join-Path $NestedDirectory 'Pflichtenheft.md') ` + -Value '# Invalid duplicate index' -Encoding utf8NoBOM + Invoke-Fixture (Write-JsonFixture 'nested-duplicate.json' $Base) 2 'RIG013' + Remove-Item -LiteralPath $NestedDirectory -Recurse -Force + $Bilingual = New-BaseConfig -Language 'de-DE' -NamingProfile 'de' Invoke-Fixture (Write-JsonFixture 'bilingual.json' $Bilingual) 0 '"documentationLanguage": "de-DE"' @@ -118,6 +132,34 @@ try { Invoke-Fixture (Write-JsonFixture 'series-manifest-inventory.json' $ManifestInventory) 0 '"inventoryMode": "SeriesManifest"' Remove-Item -LiteralPath $HistoricalInFlatLayout + $ManifestPath = Join-Path $Root 'requirements/intakes/series/manifest.json' + $SavedManifest = Get-Content -Raw -LiteralPath $ManifestPath + $IdleManifest = @{ + schemaVersion = '1.0' + documentType = 'IntakeSeriesManifest' + status = 'Idle' + orderedTargets = @() + roots = @() + dependencies = @() + } + $IdleManifest | ConvertTo-Json -Depth 12 | + Set-Content -LiteralPath $ManifestPath -Encoding utf8NoBOM + Invoke-Fixture (Write-JsonFixture 'idle-series.json' $ManifestInventory) 0 '"eligibleCandidate": "N/A"' + + $InvalidIdleManifest = $IdleManifest.Clone() + $InvalidIdleManifest.orderedTargets = @($Manifest.orderedTargets[0]) + $InvalidIdleManifest.roots = @('requirements/intakes/active/Lastenheft_Beispiel.md') + $InvalidIdleManifest | ConvertTo-Json -Depth 12 | + Set-Content -LiteralPath $ManifestPath -Encoding utf8NoBOM + Invoke-Fixture (Write-JsonFixture 'idle-with-target.json' $ManifestInventory) 2 'RIG017' + + $InvalidEmptyManifest = $IdleManifest.Clone() + $InvalidEmptyManifest.status = 'Ready' + $InvalidEmptyManifest | ConvertTo-Json -Depth 12 | + Set-Content -LiteralPath $ManifestPath -Encoding utf8NoBOM + Invoke-Fixture (Write-JsonFixture 'ready-without-target.json' $ManifestInventory) 2 'RIG014' + Set-Content -LiteralPath $ManifestPath -Value $SavedManifest -Encoding utf8NoBOM + $Schema1 = $Base.Clone() $Schema1.schemaVersion = '1.0' Invoke-Fixture (Write-JsonFixture 'schema1.json' $Schema1) 1 'MigrationRequired' @@ -141,8 +183,6 @@ try { $Duplicate.collections.archive = $Duplicate.collections.active Invoke-Fixture (Write-JsonFixture 'duplicate.json' $Duplicate) 2 'RIG007' - $ManifestPath = Join-Path $Root 'requirements/intakes/series/manifest.json' - $SavedManifest = Get-Content -Raw -LiteralPath $ManifestPath Set-Content -LiteralPath $ManifestPath -Value '{}' -Encoding utf8NoBOM Invoke-Fixture (Write-JsonFixture 'empty-manifest.json' $Base) 2 'RIG014' Set-Content -LiteralPath $ManifestPath -Value $SavedManifest -Encoding utf8NoBOM diff --git a/.specify/presets/intake-sequencing-governance/tests/test-intake-sequencing-validator.ps1 b/.specify/presets/intake-sequencing-governance/tests/test-intake-sequencing-validator.ps1 index a524cb0..2a9776c 100644 --- a/.specify/presets/intake-sequencing-governance/tests/test-intake-sequencing-validator.ps1 +++ b/.specify/presets/intake-sequencing-governance/tests/test-intake-sequencing-validator.ps1 @@ -73,7 +73,7 @@ function Reset-Fixture { documentType = 'IntakeSeriesReceipt' receiptId = '22222222-2222-4222-8222-222222222222' seriesId = $script:Manifest.seriesId - generator = [ordered]@{ preset = 'intake-sequencing-governance'; version = '0.2.0' } + generator = [ordered]@{ preset = 'intake-sequencing-governance'; version = '0.2.2' } createdAt = '2026-07-25T00:00:00Z' operation = [ordered]@{ operationId = '33333333-3333-4333-8333-333333333333' @@ -111,6 +111,28 @@ try { Invoke-Validator $Shell receipt 0 } + Reset-Fixture + $script:Manifest.status = 'Idle' + $script:Manifest.orderedTargets = @() + $script:Manifest.roots = @() + $script:Manifest.dependencies = @() + Save-Json $script:Manifest (Join-Path $TempRoot 'manifest.json') + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell manifest 0 + } + + Invoke-NegativeCase { + param($M) + $M.status = 'Idle' + } 'ISG009' + Invoke-NegativeCase { + param($M) + $M.status = 'Ready' + $M.orderedTargets = @() + $M.roots = @() + $M.dependencies = @() + } 'ISG003' + Invoke-NegativeCase { param($M) $M.orderedTargets[1].path = '../escape.md' } 'ISG003' Invoke-NegativeCase { param($M) $M.orderedTargets[1].path = 'intakes/a.md' } 'ISG003' Invoke-NegativeCase { param($M) $M.orderedTargets[1].normalizedSha256 = '0' * 64 } 'ISG004' diff --git a/docs/project-statistics.md b/docs/project-statistics.md index 08f8f68..0b64890 100644 --- a/docs/project-statistics.md +++ b/docs/project-statistics.md @@ -446,25 +446,25 @@ Profil 2 verwendet Git-getrackte Textdateien und sichtbare Git-Aktivitaet. Die W | Kennzahl / Metric | Wert / Value | |---|---:| -| Textbasis / Text base | 128437 lines | -| Textdateien / Text files | 909 | +| Textbasis / Text base | 128631 lines | +| Textdateien / Text files | 910 | | Beobachtbarer Zeitraum / Observable period | 2025-08-03..2026-07-28 | | Aktivtage / Active days | 126 | -| Relevante Commits / Relevant commits | 669 | -| Zeilen je Aktivtag / Lines per active day | 1019.3 | +| Relevante Commits / Relevant commits | 670 | +| Zeilen je Aktivtag / Lines per active day | 1020.9 | | Peak-Tag im Fenster / Peak day in window | 2026-04-19 / 107974 | | Peak-Woche im Fenster / Peak week in window | 2026-04-19 / 114277 | | Laengste Serie / Longest streak | 11 days | -| Speedup vs. 80 lines/day | 12.7x | +| Speedup vs. 80 lines/day | 12.8x | | Speedup vs. 100 lines/day | 10.2x | -| Methodik / Methodology | v2; source `ad8601407b38` | +| Methodik / Methodology | v2; source `83f329e42631` | ### Artefaktmix / Artifact Mix ```text -Produktiv / Production [##..................] 8.0% | 10220 +Produktiv / Production [##..................] 7.9% | 10220 Tests [#...................] 3.3% | 4273 -Dokumentation / Documentation [###############.....] 77.0% | 98840 +Dokumentation / Documentation [###############.....] 77.0% | 99034 Skripte / Scripts [##..................] 7.9% | 10103 Konfiguration / Configuration [#...................] 2.0% | 2598 Daten und Medien / Data and media [#...................] 0.9% | 1150 @@ -590,7 +590,7 @@ Die festen Slots halten den Phasenvergleich auch bei fehlenden oder spaeter erga ```text Scale: 0..20x -80 lines/day [#############.......] 12.7x +80 lines/day [#############.......] 12.8x 100 lines/day [##########..........] 10.2x ``` @@ -604,7 +604,7 @@ Die Faktoren vergleichen sichtbare Lieferdichte mit den dokumentierten manuellen Scale: 0..2000 lines/day Experienced manual [#...................] 80 Thorsten solo [#...................] 100 -Visible repository [##########..........] 1019.3 +Visible repository [##########..........] 1020.9 ``` Die gemeinsame Skala vergleicht Referenzen und sichtbare Lieferdichte. Sie schreibt die Git-Aktivitaet keiner Person oder KI pauschal zu. @@ -630,6 +630,6 @@ DE: Das Fenster beginnt am 2025-08-03 und endet am 2026-07-28. Es enthaelt 126 a | 2026-04 | 119744 | | 2026-05 | 13510 | | 2026-06 | 37685 | -| 2026-07 | 61113 | +| 2026-07 | 61641 | diff --git a/scripts/config/spec-kit-intake-sequencing-governance-presets.json b/scripts/config/spec-kit-intake-sequencing-governance-presets.json index d4ba8bc..3037f1a 100644 --- a/scripts/config/spec-kit-intake-sequencing-governance-presets.json +++ b/scripts/config/spec-kit-intake-sequencing-governance-presets.json @@ -10,7 +10,7 @@ {"id":"agent-parity-governance","version":"v0.4.1","priority":60,"repository":"https://github.com/hindermath/spec-kit-preset-agent-parity-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-agent-parity-governance/archive/refs/tags/v0.4.1.zip"}, {"id":"intake-authoring-governance","version":"v0.3.0","priority":64,"repository":"https://github.com/hindermath/spec-kit-preset-intake-authoring-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-intake-authoring-governance/archive/refs/tags/v0.3.0.zip"}, {"id":"intake-review-governance","version":"v0.2.0","priority":65,"repository":"https://github.com/hindermath/spec-kit-preset-intake-review-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-intake-review-governance/archive/refs/tags/v0.2.0.zip"}, - {"id":"intake-sequencing-governance","version":"v0.2.0","priority":66,"repository":"https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance/archive/refs/tags/v0.2.0.zip"}, + {"id":"intake-sequencing-governance","version":"v0.2.2","priority":66,"repository":"https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance/archive/refs/tags/v0.2.2.zip"}, {"id":"autonomous-run-governance","version":"v0.3.3","priority":70,"repository":"https://github.com/hindermath/spec-kit-preset-autonomous-run-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/archive/refs/tags/v0.3.3.zip"}, {"id":"parallel-autonomous-run-governance","version":"v0.2.4","priority":80,"repository":"https://github.com/hindermath/spec-kit-preset-parallel-autonomous-run-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-parallel-autonomous-run-governance/archive/refs/tags/v0.2.4.zip"} ]