diff --git a/.agents/skills/speckit-intake-series-create/SKILL.md b/.agents/skills/speckit-intake-series-create/SKILL.md new file mode 100644 index 0000000..bf29946 --- /dev/null +++ b/.agents/skills/speckit-intake-series-create/SKILL.md @@ -0,0 +1,35 @@ +--- +name: speckit-intake-series-create +description: Create one traceable intake series from explicitly named existing intakes. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: preset:intake-sequencing-governance +--- + +# Speckit Intake Series Create Skill + +## User Input + +```text +$ARGUMENTS +``` + +Create exactly one new series. Do not change intake content and do not start a +review or feature workflow. + +1. Read repository guidance, sequencing policy, and every explicitly named + target as strict UTF-8. +2. Refuse an existing active series. Never infer an update authority. +3. Present the exact target order, roles, normalized hashes, roots, typed edges, + binding flags, lifecycle states, and evidence paths before writing. +4. Ask material questions one at a time. Do not guess a dependency, root, + completion fact, or delivery authority. +5. Prepare manifest, receipt, operation journal, and learner-readable order + document under repository-owned paths. +6. Validate paths, hashes, graph, lifecycle, and receipts in Bash and + PowerShell before publishing any active file. +7. Publish all prepared files atomically. A failure leaves an explicit + incomplete operation and no partially active series. +8. Finish with series ID, cardinalities, validation results, eligible targets, + blockers, and exactly `$speckit-intake-series-status` as the next action. diff --git a/.agents/skills/speckit-intake-series-delete/SKILL.md b/.agents/skills/speckit-intake-series-delete/SKILL.md new file mode 100644 index 0000000..3a90790 --- /dev/null +++ b/.agents/skills/speckit-intake-series-delete/SKILL.md @@ -0,0 +1,28 @@ +--- +name: speckit-intake-series-delete +description: Logically delete one intake series through archive and tombstone evidence. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: preset:intake-sequencing-governance +--- + +# Speckit Intake Series Delete Skill + +## User Input + +```text +$ARGUMENTS +``` + +Logically delete exactly one named series with explicit current authority. + +1. Validate current manifest and receipt. +2. State that intake documents remain unchanged. +3. Archive manifest and receipt byte-identically. +4. Create a tombstone with identity, authority, reason, UTC time, archive paths, + hashes, and `intakeDocumentsDeleted: false`. +5. Publish deletion receipt and tombstone only after both validators pass. +6. Do not physically purge evidence or start another command. + +Finish with archive and tombstone proof plus one exact safe next action. diff --git a/.agents/skills/speckit-intake-series-next/SKILL.md b/.agents/skills/speckit-intake-series-next/SKILL.md new file mode 100644 index 0000000..d049813 --- /dev/null +++ b/.agents/skills/speckit-intake-series-next/SKILL.md @@ -0,0 +1,32 @@ +--- +name: speckit-intake-series-next +description: List every currently eligible intake target or exact blockers without + starting work. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: preset:intake-sequencing-governance +--- + +# Speckit Intake Series Next Skill + +## User Input + +```text +$ARGUMENTS +``` + +Select candidates only from a valid, current named series. + +1. Run the read-only status contract first. +2. A target is eligible only when its lifecycle permits selection and every + binding predecessor is `Completed`. +3. Report all eligible targets in visible order. If none are eligible, report + each exact blocker and evidence path. +4. Distinguish preferred order and shared-writer serialization from binding + functional dependencies. +5. Revalidate downstream review freshness and user authority only when a later + command is separately invoked. +6. Never start Intake Review, Specify, Autonomous, or Parallel Autonomous. + +Finish with a copy-ready suggested command only; do not execute it. diff --git a/.agents/skills/speckit-intake-series-read/SKILL.md b/.agents/skills/speckit-intake-series-read/SKILL.md new file mode 100644 index 0000000..f32d87d --- /dev/null +++ b/.agents/skills/speckit-intake-series-read/SKILL.md @@ -0,0 +1,29 @@ +--- +name: speckit-intake-series-read +description: Summarize one intake series without changing files. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: preset:intake-sequencing-governance +--- + +# Speckit Intake Series Read Skill + +## User Input + +```text +$ARGUMENTS +``` + +Read one named series in Summary, Detailed, or JSON form. + +1. Resolve only the named manifest and receipt. +2. Validate them before summarizing. +3. Report visible order, roots, typed dependencies, binding versus + serialization-only edges, lifecycle states, eligible targets, blockers, + evidence freshness, and residual risk. +4. Keep the explanation text-first, German-first/English-second where project + policy requires it, and understandable without graph-theory knowledge. +5. Do not modify files, stage changes, or start another Spec Kit command. + +Finish with the read-only hash proof and one exact safe next action. diff --git a/.agents/skills/speckit-intake-series-status/SKILL.md b/.agents/skills/speckit-intake-series-status/SKILL.md new file mode 100644 index 0000000..f2e57ea --- /dev/null +++ b/.agents/skills/speckit-intake-series-status/SKILL.md @@ -0,0 +1,28 @@ +--- +name: speckit-intake-series-status +description: Validate current intake-series state without changing files. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: preset:intake-sequencing-governance +--- + +# Speckit Intake Series Status Skill + +## User Input + +```text +$ARGUMENTS +``` + +Inspect one named series read-only. + +1. Hash run state and tracked evidence before inspection. +2. Run Bash and PowerShell validators. +3. Report identity, status, targets, roots, dependencies, eligible targets, + blockers, receipt lineage, archive/tombstone state, and drift. +4. Classify ambiguity or drift fail-closed. Do not repair it. +5. Prove before/after hashes and Git status are unchanged. +6. Do not stage, commit, push, review, or execute a target. + +Finish with one exact next action. diff --git a/.agents/skills/speckit-intake-series-update/SKILL.md b/.agents/skills/speckit-intake-series-update/SKILL.md new file mode 100644 index 0000000..dd9d22d --- /dev/null +++ b/.agents/skills/speckit-intake-series-update/SKILL.md @@ -0,0 +1,31 @@ +--- +name: speckit-intake-series-update +description: Update one intake series with explicit authority and preserved lineage. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: preset:intake-sequencing-governance +--- + +# Speckit Intake Series Update Skill + +## User Input + +```text +$ARGUMENTS +``` + +Update exactly one active series. Current explicit update authority is required. + +1. Validate the accepted manifest and receipt before proposing changes. +2. Present exact target, order, root, edge, lifecycle, and evidence differences. +3. Refuse ambiguous facts and unrelated intake-content changes. +4. Archive the prior manifest and receipt byte-identically. +5. Prepare successor manifest, receipt, operation journal, and order document. +6. Bind the successor through `supersedes`, prior hashes, archive paths, and + current authority evidence. +7. Run both validators before atomic publication. +8. Do not perform Intake Review or start downstream work. + +Finish with changed cardinalities, archive evidence, validation results, and +exactly `$speckit-intake-series-status` as the next action. diff --git a/.claude/skills/speckit-intake-series-create/SKILL.md b/.claude/skills/speckit-intake-series-create/SKILL.md new file mode 100644 index 0000000..d10136f --- /dev/null +++ b/.claude/skills/speckit-intake-series-create/SKILL.md @@ -0,0 +1,33 @@ +--- +name: speckit-intake-series-create +description: Create one traceable intake series from explicitly named existing intakes. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: intake-sequencing-governance:commands/speckit.intake-series-create.md +--- + +## User Input + +```text +$ARGUMENTS +``` + +Create exactly one new series. Do not change intake content and do not start a +review or feature workflow. + +1. Read repository guidance, sequencing policy, and every explicitly named + target as strict UTF-8. +2. Refuse an existing active series. Never infer an update authority. +3. Present the exact target order, roles, normalized hashes, roots, typed edges, + binding flags, lifecycle states, and evidence paths before writing. +4. Ask material questions one at a time. Do not guess a dependency, root, + completion fact, or delivery authority. +5. Prepare manifest, receipt, operation journal, and learner-readable order + document under repository-owned paths. +6. Validate paths, hashes, graph, lifecycle, and receipts in Bash and + PowerShell before publishing any active file. +7. Publish all prepared files atomically. A failure leaves an explicit + incomplete operation and no partially active series. +8. Finish with series ID, cardinalities, validation results, eligible targets, + blockers, and exactly `$speckit-intake-series-status` as the next action. \ No newline at end of file diff --git a/.claude/skills/speckit-intake-series-delete/SKILL.md b/.claude/skills/speckit-intake-series-delete/SKILL.md new file mode 100644 index 0000000..5fb7f19 --- /dev/null +++ b/.claude/skills/speckit-intake-series-delete/SKILL.md @@ -0,0 +1,26 @@ +--- +name: speckit-intake-series-delete +description: Logically delete one intake series through archive and tombstone evidence. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: intake-sequencing-governance:commands/speckit.intake-series-delete.md +--- + +## User Input + +```text +$ARGUMENTS +``` + +Logically delete exactly one named series with explicit current authority. + +1. Validate current manifest and receipt. +2. State that intake documents remain unchanged. +3. Archive manifest and receipt byte-identically. +4. Create a tombstone with identity, authority, reason, UTC time, archive paths, + hashes, and `intakeDocumentsDeleted: false`. +5. Publish deletion receipt and tombstone only after both validators pass. +6. Do not physically purge evidence or start another command. + +Finish with archive and tombstone proof plus one exact safe next action. \ 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 new file mode 100644 index 0000000..9fdd126 --- /dev/null +++ b/.claude/skills/speckit-intake-series-next/SKILL.md @@ -0,0 +1,30 @@ +--- +name: speckit-intake-series-next +description: List every currently eligible intake target or exact blockers without + starting work. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: intake-sequencing-governance:commands/speckit.intake-series-next.md +--- + +## User Input + +```text +$ARGUMENTS +``` + +Select candidates only from a valid, current named series. + +1. Run the read-only status contract first. +2. A target is eligible only when its lifecycle permits selection and every + binding predecessor is `Completed`. +3. Report all eligible targets in visible order. If none are eligible, report + each exact blocker and evidence path. +4. Distinguish preferred order and shared-writer serialization from binding + functional dependencies. +5. Revalidate downstream review freshness and user authority only when a later + command is separately invoked. +6. Never start Intake Review, Specify, Autonomous, or Parallel Autonomous. + +Finish with a copy-ready suggested command only; do not execute it. \ No newline at end of file diff --git a/.claude/skills/speckit-intake-series-read/SKILL.md b/.claude/skills/speckit-intake-series-read/SKILL.md new file mode 100644 index 0000000..57c91fd --- /dev/null +++ b/.claude/skills/speckit-intake-series-read/SKILL.md @@ -0,0 +1,27 @@ +--- +name: speckit-intake-series-read +description: Summarize one intake series without changing files. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: intake-sequencing-governance:commands/speckit.intake-series-read.md +--- + +## User Input + +```text +$ARGUMENTS +``` + +Read one named series in Summary, Detailed, or JSON form. + +1. Resolve only the named manifest and receipt. +2. Validate them before summarizing. +3. Report visible order, roots, typed dependencies, binding versus + serialization-only edges, lifecycle states, eligible targets, blockers, + evidence freshness, and residual risk. +4. Keep the explanation text-first, German-first/English-second where project + policy requires it, and understandable without graph-theory knowledge. +5. Do not modify files, stage changes, or start another Spec Kit command. + +Finish with the read-only hash proof and one exact safe next action. \ No newline at end of file diff --git a/.claude/skills/speckit-intake-series-status/SKILL.md b/.claude/skills/speckit-intake-series-status/SKILL.md new file mode 100644 index 0000000..feb4a2c --- /dev/null +++ b/.claude/skills/speckit-intake-series-status/SKILL.md @@ -0,0 +1,26 @@ +--- +name: speckit-intake-series-status +description: Validate current intake-series state without changing files. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: intake-sequencing-governance:commands/speckit.intake-series-status.md +--- + +## User Input + +```text +$ARGUMENTS +``` + +Inspect one named series read-only. + +1. Hash run state and tracked evidence before inspection. +2. Run Bash and PowerShell validators. +3. Report identity, status, targets, roots, dependencies, eligible targets, + blockers, receipt lineage, archive/tombstone state, and drift. +4. Classify ambiguity or drift fail-closed. Do not repair it. +5. Prove before/after hashes and Git status are unchanged. +6. Do not stage, commit, push, review, or execute a target. + +Finish with one exact next action. \ No newline at end of file diff --git a/.claude/skills/speckit-intake-series-update/SKILL.md b/.claude/skills/speckit-intake-series-update/SKILL.md new file mode 100644 index 0000000..cb626b3 --- /dev/null +++ b/.claude/skills/speckit-intake-series-update/SKILL.md @@ -0,0 +1,29 @@ +--- +name: speckit-intake-series-update +description: Update one intake series with explicit authority and preserved lineage. +compatibility: Requires spec-kit project structure with .specify/ directory +metadata: + author: github-spec-kit + source: intake-sequencing-governance:commands/speckit.intake-series-update.md +--- + +## User Input + +```text +$ARGUMENTS +``` + +Update exactly one active series. Current explicit update authority is required. + +1. Validate the accepted manifest and receipt before proposing changes. +2. Present exact target, order, root, edge, lifecycle, and evidence differences. +3. Refuse ambiguous facts and unrelated intake-content changes. +4. Archive the prior manifest and receipt byte-identically. +5. Prepare successor manifest, receipt, operation journal, and order document. +6. Bind the successor through `supersedes`, prior hashes, archive paths, and + current authority evidence. +7. Run both validators before atomic publication. +8. Do not perform Intake Review or start downstream work. + +Finish with changed cardinalities, archive evidence, validation results, and +exactly `$speckit-intake-series-status` as the next action. \ No newline at end of file diff --git a/.github/agents/speckit.intake-series-create.agent.md b/.github/agents/speckit.intake-series-create.agent.md new file mode 100644 index 0000000..71243d4 --- /dev/null +++ b/.github/agents/speckit.intake-series-create.agent.md @@ -0,0 +1,30 @@ +--- +description: Create one traceable intake series from explicitly named existing intakes. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Create exactly one new series. Do not change intake content and do not start a +review or feature workflow. + +1. Read repository guidance, sequencing policy, and every explicitly named + target as strict UTF-8. +2. Refuse an existing active series. Never infer an update authority. +3. Present the exact target order, roles, normalized hashes, roots, typed edges, + binding flags, lifecycle states, and evidence paths before writing. +4. Ask material questions one at a time. Do not guess a dependency, root, + completion fact, or delivery authority. +5. Prepare manifest, receipt, operation journal, and learner-readable order + document under repository-owned paths. +6. Validate paths, hashes, graph, lifecycle, and receipts in Bash and + PowerShell before publishing any active file. +7. Publish all prepared files atomically. A failure leaves an explicit + incomplete operation and no partially active series. +8. Finish with series ID, cardinalities, validation results, eligible targets, + blockers, and exactly `$speckit-intake-series-status` as the next action. \ No newline at end of file diff --git a/.github/agents/speckit.intake-series-delete.agent.md b/.github/agents/speckit.intake-series-delete.agent.md new file mode 100644 index 0000000..2053994 --- /dev/null +++ b/.github/agents/speckit.intake-series-delete.agent.md @@ -0,0 +1,23 @@ +--- +description: Logically delete one intake series through archive and tombstone evidence. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Logically delete exactly one named series with explicit current authority. + +1. Validate current manifest and receipt. +2. State that intake documents remain unchanged. +3. Archive manifest and receipt byte-identically. +4. Create a tombstone with identity, authority, reason, UTC time, archive paths, + hashes, and `intakeDocumentsDeleted: false`. +5. Publish deletion receipt and tombstone only after both validators pass. +6. Do not physically purge evidence or start another command. + +Finish with archive and tombstone proof plus one exact safe next action. \ 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 new file mode 100644 index 0000000..895bdb1 --- /dev/null +++ b/.github/agents/speckit.intake-series-next.agent.md @@ -0,0 +1,27 @@ +--- +description: List every currently eligible intake target or exact blockers without + starting work. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Select candidates only from a valid, current named series. + +1. Run the read-only status contract first. +2. A target is eligible only when its lifecycle permits selection and every + binding predecessor is `Completed`. +3. Report all eligible targets in visible order. If none are eligible, report + each exact blocker and evidence path. +4. Distinguish preferred order and shared-writer serialization from binding + functional dependencies. +5. Revalidate downstream review freshness and user authority only when a later + command is separately invoked. +6. Never start Intake Review, Specify, Autonomous, or Parallel Autonomous. + +Finish with a copy-ready suggested command only; do not execute it. \ No newline at end of file diff --git a/.github/agents/speckit.intake-series-read.agent.md b/.github/agents/speckit.intake-series-read.agent.md new file mode 100644 index 0000000..01db2e7 --- /dev/null +++ b/.github/agents/speckit.intake-series-read.agent.md @@ -0,0 +1,24 @@ +--- +description: Summarize one intake series without changing files. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Read one named series in Summary, Detailed, or JSON form. + +1. Resolve only the named manifest and receipt. +2. Validate them before summarizing. +3. Report visible order, roots, typed dependencies, binding versus + serialization-only edges, lifecycle states, eligible targets, blockers, + evidence freshness, and residual risk. +4. Keep the explanation text-first, German-first/English-second where project + policy requires it, and understandable without graph-theory knowledge. +5. Do not modify files, stage changes, or start another Spec Kit command. + +Finish with the read-only hash proof and one exact safe next action. \ No newline at end of file diff --git a/.github/agents/speckit.intake-series-status.agent.md b/.github/agents/speckit.intake-series-status.agent.md new file mode 100644 index 0000000..925934e --- /dev/null +++ b/.github/agents/speckit.intake-series-status.agent.md @@ -0,0 +1,23 @@ +--- +description: Validate current intake-series state without changing files. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Inspect one named series read-only. + +1. Hash run state and tracked evidence before inspection. +2. Run Bash and PowerShell validators. +3. Report identity, status, targets, roots, dependencies, eligible targets, + blockers, receipt lineage, archive/tombstone state, and drift. +4. Classify ambiguity or drift fail-closed. Do not repair it. +5. Prove before/after hashes and Git status are unchanged. +6. Do not stage, commit, push, review, or execute a target. + +Finish with one exact next action. \ No newline at end of file diff --git a/.github/agents/speckit.intake-series-update.agent.md b/.github/agents/speckit.intake-series-update.agent.md new file mode 100644 index 0000000..37b56e7 --- /dev/null +++ b/.github/agents/speckit.intake-series-update.agent.md @@ -0,0 +1,26 @@ +--- +description: Update one intake series with explicit authority and preserved lineage. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Update exactly one active series. Current explicit update authority is required. + +1. Validate the accepted manifest and receipt before proposing changes. +2. Present exact target, order, root, edge, lifecycle, and evidence differences. +3. Refuse ambiguous facts and unrelated intake-content changes. +4. Archive the prior manifest and receipt byte-identically. +5. Prepare successor manifest, receipt, operation journal, and order document. +6. Bind the successor through `supersedes`, prior hashes, archive paths, and + current authority evidence. +7. Run both validators before atomic publication. +8. Do not perform Intake Review or start downstream work. + +Finish with changed cardinalities, archive evidence, validation results, and +exactly `$speckit-intake-series-status` as the next action. \ No newline at end of file diff --git a/.github/prompts/speckit.intake-series-create.prompt.md b/.github/prompts/speckit.intake-series-create.prompt.md new file mode 100644 index 0000000..42f1123 --- /dev/null +++ b/.github/prompts/speckit.intake-series-create.prompt.md @@ -0,0 +1,3 @@ +--- +agent: speckit.intake-series-create +--- diff --git a/.github/prompts/speckit.intake-series-delete.prompt.md b/.github/prompts/speckit.intake-series-delete.prompt.md new file mode 100644 index 0000000..b80ee60 --- /dev/null +++ b/.github/prompts/speckit.intake-series-delete.prompt.md @@ -0,0 +1,3 @@ +--- +agent: speckit.intake-series-delete +--- diff --git a/.github/prompts/speckit.intake-series-next.prompt.md b/.github/prompts/speckit.intake-series-next.prompt.md new file mode 100644 index 0000000..45c29ab --- /dev/null +++ b/.github/prompts/speckit.intake-series-next.prompt.md @@ -0,0 +1,3 @@ +--- +agent: speckit.intake-series-next +--- diff --git a/.github/prompts/speckit.intake-series-read.prompt.md b/.github/prompts/speckit.intake-series-read.prompt.md new file mode 100644 index 0000000..a0d5995 --- /dev/null +++ b/.github/prompts/speckit.intake-series-read.prompt.md @@ -0,0 +1,3 @@ +--- +agent: speckit.intake-series-read +--- diff --git a/.github/prompts/speckit.intake-series-status.prompt.md b/.github/prompts/speckit.intake-series-status.prompt.md new file mode 100644 index 0000000..7503417 --- /dev/null +++ b/.github/prompts/speckit.intake-series-status.prompt.md @@ -0,0 +1,3 @@ +--- +agent: speckit.intake-series-status +--- diff --git a/.github/prompts/speckit.intake-series-update.prompt.md b/.github/prompts/speckit.intake-series-update.prompt.md new file mode 100644 index 0000000..d29c5b2 --- /dev/null +++ b/.github/prompts/speckit.intake-series-update.prompt.md @@ -0,0 +1,3 @@ +--- +agent: speckit.intake-series-update +--- diff --git a/.opencode/command/speckit.intake-series-create.md b/.opencode/command/speckit.intake-series-create.md new file mode 100644 index 0000000..71243d4 --- /dev/null +++ b/.opencode/command/speckit.intake-series-create.md @@ -0,0 +1,30 @@ +--- +description: Create one traceable intake series from explicitly named existing intakes. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Create exactly one new series. Do not change intake content and do not start a +review or feature workflow. + +1. Read repository guidance, sequencing policy, and every explicitly named + target as strict UTF-8. +2. Refuse an existing active series. Never infer an update authority. +3. Present the exact target order, roles, normalized hashes, roots, typed edges, + binding flags, lifecycle states, and evidence paths before writing. +4. Ask material questions one at a time. Do not guess a dependency, root, + completion fact, or delivery authority. +5. Prepare manifest, receipt, operation journal, and learner-readable order + document under repository-owned paths. +6. Validate paths, hashes, graph, lifecycle, and receipts in Bash and + PowerShell before publishing any active file. +7. Publish all prepared files atomically. A failure leaves an explicit + incomplete operation and no partially active series. +8. Finish with series ID, cardinalities, validation results, eligible targets, + blockers, and exactly `$speckit-intake-series-status` as the next action. \ No newline at end of file diff --git a/.opencode/command/speckit.intake-series-delete.md b/.opencode/command/speckit.intake-series-delete.md new file mode 100644 index 0000000..2053994 --- /dev/null +++ b/.opencode/command/speckit.intake-series-delete.md @@ -0,0 +1,23 @@ +--- +description: Logically delete one intake series through archive and tombstone evidence. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Logically delete exactly one named series with explicit current authority. + +1. Validate current manifest and receipt. +2. State that intake documents remain unchanged. +3. Archive manifest and receipt byte-identically. +4. Create a tombstone with identity, authority, reason, UTC time, archive paths, + hashes, and `intakeDocumentsDeleted: false`. +5. Publish deletion receipt and tombstone only after both validators pass. +6. Do not physically purge evidence or start another command. + +Finish with archive and tombstone proof plus one exact safe next action. \ No newline at end of file diff --git a/.opencode/command/speckit.intake-series-next.md b/.opencode/command/speckit.intake-series-next.md new file mode 100644 index 0000000..895bdb1 --- /dev/null +++ b/.opencode/command/speckit.intake-series-next.md @@ -0,0 +1,27 @@ +--- +description: List every currently eligible intake target or exact blockers without + starting work. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Select candidates only from a valid, current named series. + +1. Run the read-only status contract first. +2. A target is eligible only when its lifecycle permits selection and every + binding predecessor is `Completed`. +3. Report all eligible targets in visible order. If none are eligible, report + each exact blocker and evidence path. +4. Distinguish preferred order and shared-writer serialization from binding + functional dependencies. +5. Revalidate downstream review freshness and user authority only when a later + command is separately invoked. +6. Never start Intake Review, Specify, Autonomous, or Parallel Autonomous. + +Finish with a copy-ready suggested command only; do not execute it. \ No newline at end of file diff --git a/.opencode/command/speckit.intake-series-read.md b/.opencode/command/speckit.intake-series-read.md new file mode 100644 index 0000000..01db2e7 --- /dev/null +++ b/.opencode/command/speckit.intake-series-read.md @@ -0,0 +1,24 @@ +--- +description: Summarize one intake series without changing files. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Read one named series in Summary, Detailed, or JSON form. + +1. Resolve only the named manifest and receipt. +2. Validate them before summarizing. +3. Report visible order, roots, typed dependencies, binding versus + serialization-only edges, lifecycle states, eligible targets, blockers, + evidence freshness, and residual risk. +4. Keep the explanation text-first, German-first/English-second where project + policy requires it, and understandable without graph-theory knowledge. +5. Do not modify files, stage changes, or start another Spec Kit command. + +Finish with the read-only hash proof and one exact safe next action. \ No newline at end of file diff --git a/.opencode/command/speckit.intake-series-status.md b/.opencode/command/speckit.intake-series-status.md new file mode 100644 index 0000000..925934e --- /dev/null +++ b/.opencode/command/speckit.intake-series-status.md @@ -0,0 +1,23 @@ +--- +description: Validate current intake-series state without changing files. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Inspect one named series read-only. + +1. Hash run state and tracked evidence before inspection. +2. Run Bash and PowerShell validators. +3. Report identity, status, targets, roots, dependencies, eligible targets, + blockers, receipt lineage, archive/tombstone state, and drift. +4. Classify ambiguity or drift fail-closed. Do not repair it. +5. Prove before/after hashes and Git status are unchanged. +6. Do not stage, commit, push, review, or execute a target. + +Finish with one exact next action. \ No newline at end of file diff --git a/.opencode/command/speckit.intake-series-update.md b/.opencode/command/speckit.intake-series-update.md new file mode 100644 index 0000000..37b56e7 --- /dev/null +++ b/.opencode/command/speckit.intake-series-update.md @@ -0,0 +1,26 @@ +--- +description: Update one intake series with explicit authority and preserved lineage. +--- + + + +## User Input + +```text +$ARGUMENTS +``` + +Update exactly one active series. Current explicit update authority is required. + +1. Validate the accepted manifest and receipt before proposing changes. +2. Present exact target, order, root, edge, lifecycle, and evidence differences. +3. Refuse ambiguous facts and unrelated intake-content changes. +4. Archive the prior manifest and receipt byte-identically. +5. Prepare successor manifest, receipt, operation journal, and order document. +6. Bind the successor through `supersedes`, prior hashes, archive paths, and + current authority evidence. +7. Run both validators before atomic publication. +8. Do not perform Intake Review or start downstream work. + +Finish with changed cardinalities, archive evidence, validation results, and +exactly `$speckit-intake-series-status` as the next action. \ No newline at end of file diff --git a/.specify/presets/.registry b/.specify/presets/.registry index 961ca58..9f3ac22 100644 --- a/.specify/presets/.registry +++ b/.specify/presets/.registry @@ -492,6 +492,72 @@ "speckit-parallel-autonomous-consolidate" ], "installed_at": "2026-07-24T15:07:54.859587+00:00" + }, + "intake-sequencing-governance": { + "version": "0.1.0", + "source": "local", + "manifest_hash": "sha256:ae332ef9e3976df78fce1a859d2e39463dd06c069b99333968566bb50abd0390", + "enabled": true, + "priority": 66, + "registered_commands": { + "agy": [ + "speckit.intake-series-create", + "speckit.intake-series-read", + "speckit.intake-series-update", + "speckit.intake-series-delete", + "speckit.intake-series-status", + "speckit.intake-series-next" + ], + "claude": [ + "speckit.intake-series-create", + "speckit.intake-series-read", + "speckit.intake-series-update", + "speckit.intake-series-delete", + "speckit.intake-series-status", + "speckit.intake-series-next" + ], + "codex": [ + "speckit.intake-series-create", + "speckit.intake-series-read", + "speckit.intake-series-update", + "speckit.intake-series-delete", + "speckit.intake-series-status", + "speckit.intake-series-next" + ], + "copilot": [ + "speckit.intake-series-create", + "speckit.intake-series-read", + "speckit.intake-series-update", + "speckit.intake-series-delete", + "speckit.intake-series-status", + "speckit.intake-series-next" + ], + "opencode": [ + "speckit.intake-series-create", + "speckit.intake-series-read", + "speckit.intake-series-update", + "speckit.intake-series-delete", + "speckit.intake-series-status", + "speckit.intake-series-next" + ], + "zed": [ + "speckit.intake-series-create", + "speckit.intake-series-read", + "speckit.intake-series-update", + "speckit.intake-series-delete", + "speckit.intake-series-status", + "speckit.intake-series-next" + ] + }, + "registered_skills": [ + "speckit-intake-series-create", + "speckit-intake-series-read", + "speckit-intake-series-update", + "speckit-intake-series-delete", + "speckit-intake-series-status", + "speckit-intake-series-next" + ], + "installed_at": "2026-07-25T14:23:58.617570+00:00" } } } \ No newline at end of file diff --git a/.specify/presets/intake-sequencing-governance/LICENSE b/.specify/presets/intake-sequencing-governance/LICENSE new file mode 100644 index 0000000..d02c139 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Thorsten Hindermann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.specify/presets/intake-sequencing-governance/README.md b/.specify/presets/intake-sequencing-governance/README.md new file mode 100644 index 0000000..3500c87 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/README.md @@ -0,0 +1,67 @@ +# Intake Sequencing Governance + +Optional Spec Kit preset for managing the order and lifecycle of existing +intakes. Version `0.1.0` uses priority `66`: after Intake Review at `65` and +before Autonomous Run at `70`. + +## Why This Preset Exists + +An order table alone cannot distinguish a binding predecessor from a preferred +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. + +## Installation + +```bash +specify preset add \ + --from https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance/archive/refs/tags/v0.1.0.zip \ + --priority 66 +``` + +## Commands + +| Command | Writes | Purpose | +|---|---:|---| +| `$speckit-intake-series-create` | Yes | Create one new series | +| `$speckit-intake-series-read` | No | Summarize order and graph | +| `$speckit-intake-series-update` | Yes | Supersede one series | +| `$speckit-intake-series-delete` | Yes | Archive and tombstone a series | +| `$speckit-intake-series-status` | No | Validate current state | +| `$speckit-intake-series-next` | No | List eligible targets or blockers | + +## Example + +```text +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. + +## Edge Types + +Binding types model real prerequisites. `PreferredSerialOrder` and +`SharedWriterSerialization` coordinate delivery without pretending that one +feature is functionally required by another. + +## Safety + +- strict UTF-8 and normalized SHA-256 evidence; +- repository-relative paths only; +- no source execution; +- fail-closed ambiguity and drift; +- explicit authority for create, update, and delete; +- archive plus tombstone instead of physical purge; +- read-only status and next commands. + +## Accessibility + +Order, roots, dependencies, blockers, and next actions are always available as +text. Color or a graphical diagram is never the only information carrier. + +## Composition + +The preset composes with Intake Authoring `64`, Intake Review `65`, Autonomous +Run `70`, and Parallel Autonomous `80`. Priority controls merge order only; it +does not grant execution or remote authority. diff --git a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-create.md b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-create.md new file mode 100644 index 0000000..b155b42 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-create.md @@ -0,0 +1,28 @@ +--- +description: Create one traceable intake series from explicitly named existing intakes. +--- + +## User Input + +```text +$ARGUMENTS +``` + +Create exactly one new series. Do not change intake content and do not start a +review or feature workflow. + +1. Read repository guidance, sequencing policy, and every explicitly named + target as strict UTF-8. +2. Refuse an existing active series. Never infer an update authority. +3. Present the exact target order, roles, normalized hashes, roots, typed edges, + binding flags, lifecycle states, and evidence paths before writing. +4. Ask material questions one at a time. Do not guess a dependency, root, + completion fact, or delivery authority. +5. Prepare manifest, receipt, operation journal, and learner-readable order + document under repository-owned paths. +6. Validate paths, hashes, graph, lifecycle, and receipts in Bash and + PowerShell before publishing any active file. +7. Publish all prepared files atomically. A failure leaves an explicit + incomplete operation and no partially active series. +8. Finish with series ID, cardinalities, validation results, eligible targets, + blockers, and exactly `$speckit-intake-series-status` as the next action. diff --git a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-delete.md b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-delete.md new file mode 100644 index 0000000..4751db7 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-delete.md @@ -0,0 +1,21 @@ +--- +description: Logically delete one intake series through archive and tombstone evidence. +--- + +## User Input + +```text +$ARGUMENTS +``` + +Logically delete exactly one named series with explicit current authority. + +1. Validate current manifest and receipt. +2. State that intake documents remain unchanged. +3. Archive manifest and receipt byte-identically. +4. Create a tombstone with identity, authority, reason, UTC time, archive paths, + hashes, and `intakeDocumentsDeleted: false`. +5. Publish deletion receipt and tombstone only after both validators pass. +6. Do not physically purge evidence or start another command. + +Finish with archive and tombstone proof plus one exact safe next action. 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 new file mode 100644 index 0000000..9307126 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-next.md @@ -0,0 +1,24 @@ +--- +description: List every currently eligible intake target or exact blockers without starting work. +--- + +## User Input + +```text +$ARGUMENTS +``` + +Select candidates only from a valid, current named series. + +1. Run the read-only status contract first. +2. A target is eligible only when its lifecycle permits selection and every + binding predecessor is `Completed`. +3. Report all eligible targets in visible order. If none are eligible, report + each exact blocker and evidence path. +4. Distinguish preferred order and shared-writer serialization from binding + functional dependencies. +5. Revalidate downstream review freshness and user authority only when a later + command is separately invoked. +6. Never start Intake Review, Specify, Autonomous, or Parallel Autonomous. + +Finish with a copy-ready suggested command only; do not execute it. diff --git a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-read.md b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-read.md new file mode 100644 index 0000000..4a29aad --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-read.md @@ -0,0 +1,22 @@ +--- +description: Summarize one intake series without changing files. +--- + +## User Input + +```text +$ARGUMENTS +``` + +Read one named series in Summary, Detailed, or JSON form. + +1. Resolve only the named manifest and receipt. +2. Validate them before summarizing. +3. Report visible order, roots, typed dependencies, binding versus + serialization-only edges, lifecycle states, eligible targets, blockers, + evidence freshness, and residual risk. +4. Keep the explanation text-first, German-first/English-second where project + policy requires it, and understandable without graph-theory knowledge. +5. Do not modify files, stage changes, or start another Spec Kit command. + +Finish with the read-only hash proof and one exact safe next action. 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 new file mode 100644 index 0000000..dcab02c --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-status.md @@ -0,0 +1,21 @@ +--- +description: Validate current intake-series state without changing files. +--- + +## User Input + +```text +$ARGUMENTS +``` + +Inspect one named series read-only. + +1. Hash run state and tracked evidence before inspection. +2. Run Bash and PowerShell validators. +3. Report identity, status, targets, roots, dependencies, eligible targets, + blockers, receipt lineage, archive/tombstone state, and drift. +4. Classify ambiguity or drift fail-closed. Do not repair it. +5. Prove before/after hashes and Git status are unchanged. +6. Do not stage, commit, push, review, or execute a target. + +Finish with one exact next action. diff --git a/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-update.md b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-update.md new file mode 100644 index 0000000..cd091f8 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/commands/speckit.intake-series-update.md @@ -0,0 +1,24 @@ +--- +description: Update one intake series with explicit authority and preserved lineage. +--- + +## User Input + +```text +$ARGUMENTS +``` + +Update exactly one active series. Current explicit update authority is required. + +1. Validate the accepted manifest and receipt before proposing changes. +2. Present exact target, order, root, edge, lifecycle, and evidence differences. +3. Refuse ambiguous facts and unrelated intake-content changes. +4. Archive the prior manifest and receipt byte-identically. +5. Prepare successor manifest, receipt, operation journal, and order document. +6. Bind the successor through `supersedes`, prior hashes, archive paths, and + current authority evidence. +7. Run both validators before atomic publication. +8. Do not perform Intake Review or start downstream work. + +Finish with changed cardinalities, archive evidence, validation results, and +exactly `$speckit-intake-series-status` as the next action. diff --git a/.specify/presets/intake-sequencing-governance/docs/README.md b/.specify/presets/intake-sequencing-governance/docs/README.md new file mode 100644 index 0000000..0d2e3d1 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/docs/README.md @@ -0,0 +1,5 @@ +# 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. diff --git a/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md b/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md new file mode 100644 index 0000000..a4fa8a4 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/docs/field-validation-summary.md @@ -0,0 +1,17 @@ +# Field Validation Summary + +Version `0.1.0` is validated with: + +- a synthetic three-target, one-root, two-edge series; +- malformed path, type, binding, order, root, lifecycle, and hash fixtures; +- Bash and PowerShell wrapper parity over one portable validation core; +- the Home Baseline 13-target, 6-root, 15-edge series as read-only + `LegacyAdoption` evidence; +- 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-25 passed PSScriptAnalyzer across 114 +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 +surface. Release and fleet identifiers are added after MergeAndSync delivery. 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 new file mode 100644 index 0000000..f3c0bff --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-manifest.1 @@ -0,0 +1,12 @@ +.TH VALIDATE-INTAKE-SERIES-MANIFEST 1 "2026-07-25" "0.1.0" +.SH NAME +validate-intake-series-manifest.sh \- validate an intake-series manifest +.SH SYNOPSIS +.B validate-intake-series-manifest.sh +--file FILE [--repo PATH] [--json] +.SH DESCRIPTION +Validates strict UTF-8, repository-relative target paths, normalized hashes, +lifecycle states, roots, typed edges, declared order, and acyclicity without +modifying files. +.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 new file mode 100644 index 0000000..fcbe4a7 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/docs/man/validate-intake-series-receipt.1 @@ -0,0 +1,12 @@ +.TH VALIDATE-INTAKE-SERIES-RECEIPT 1 "2026-07-25" "0.1.0" +.SH NAME +validate-intake-series-receipt.sh \- validate an intake-series receipt +.SH SYNOPSIS +.B validate-intake-series-receipt.sh +--file FILE [--repo PATH] [--json] +.SH DESCRIPTION +Validates receipt identity, operation authority, manifest hash binding, +supersession archives, deletion tombstones, and the referenced series manifest +without modifying files. +.SH EXIT STATUS +Returns 0 for valid evidence and 2 for invalid input or drift. diff --git a/.specify/presets/intake-sequencing-governance/preset.yml b/.specify/presets/intake-sequencing-governance/preset.yml new file mode 100644 index 0000000..3856cc6 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/preset.yml @@ -0,0 +1,41 @@ +schema_version: "1.0" + +preset: + id: "intake-sequencing-governance" + name: "Intake Sequencing Governance" + version: "0.1.0" + description: "Manages traceable intake-series order, typed dependencies, lifecycle, and next-candidate selection without executing downstream workflows." + author: "Thorsten Hindermann" + repository: "https://github.com/hindermath/spec-kit-preset-intake-sequencing-governance" + license: "MIT" + +requires: + speckit_version: ">=0.8.3" + +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-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"} + - {type: "template", name: "intake-series-order-template", file: "templates/intake-series-order-template.md", description: "Learner-readable order and dependency document"} + - {type: "template", name: "intake-series-checklist-template", file: "templates/intake-series-checklist-template.md", description: "Series readiness and lifecycle checklist"} + - {type: "template", name: "intake-series-runbook-template", file: "templates/intake-series-runbook-template.md", description: "Portable CRUD, status, and next-candidate runbook"} + - {type: "template", name: "intake-series-agent-guidance-addendum", file: "templates/agent-file-addendum.md", description: "Agent-neutral sequencing and authority guidance"} + - {type: "template", name: "intake-series-field-validation-summary", file: "templates/field-validation-summary.md", description: "Synthetic, field, composition, and release evidence"} + - {type: "command", name: "speckit.intake-series-create", file: "commands/speckit.intake-series-create.md", description: "Create one new series from explicitly named existing intakes"} + - {type: "command", name: "speckit.intake-series-read", file: "commands/speckit.intake-series-read.md", description: "Summarize a series read-only"} + - {type: "command", name: "speckit.intake-series-update", file: "commands/speckit.intake-series-update.md", description: "Update one series with explicit authority and supersession evidence"} + - {type: "command", name: "speckit.intake-series-delete", file: "commands/speckit.intake-series-delete.md", description: "Logically delete one series through archive and tombstone evidence"} + - {type: "command", name: "speckit.intake-series-status", file: "commands/speckit.intake-series-status.md", description: "Validate current series state without writes"} + - {type: "command", name: "speckit.intake-series-next", file: "commands/speckit.intake-series-next.md", description: "List eligible targets or exact blockers without starting them"} + +tags: + - "intake" + - "sequencing" + - "governance" + - "dag" + - "lifecycle" + - "spec-kit" + - "autonomous" diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-manifest.ps1 b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-manifest.ps1 new file mode 100644 index 0000000..665408d --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-manifest.ps1 @@ -0,0 +1,37 @@ +<# +.SYNOPSIS +Validiert ein Intake-Serienmanifest ohne Schreibzugriff. + +.DESCRIPTION +Prueft UTF-8, Pfade, Hashes, Lifecycle, Roots und typisierte Kanten mit dem +portablen Validator. Validates UTF-8, paths, hashes, lifecycle, roots, and +typed edges without modifying files. + +.PARAMETER File +Pfad zum Manifest. Path to the manifest. + +.PARAMETER Repo +Repository-Wurzel. Repository root. + +.PARAMETER Json +Gibt eine maschinenlesbare Zusammenfassung aus. Emits a JSON summary. +#> +[CmdletBinding()] +param( + [Parameter(Mandatory)][string]$File, + [string]$Repo = '.', + [switch]$Json +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$Arguments = @( + (Join-Path $PSScriptRoot 'validate-intake-series.py'), + '--kind', 'manifest', + '--file', $File, + '--repo', $Repo +) +if ($Json) { $Arguments += '--json' } +& python3 @Arguments +exit $LASTEXITCODE diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-manifest.sh b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-manifest.sh new file mode 100644 index 0000000..a9843ce --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-manifest.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +# Validate one intake-series manifest without changing files. +set -euo pipefail + +script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +exec python3 "$script_dir/validate-intake-series.py" --kind manifest "$@" diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-receipt.ps1 b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-receipt.ps1 new file mode 100644 index 0000000..ad175df --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-receipt.ps1 @@ -0,0 +1,37 @@ +<# +.SYNOPSIS +Validiert ein Intake-Serien-Receipt und dessen Manifest ohne Schreibzugriff. + +.DESCRIPTION +Prueft Receipt-Identitaet, Authority, Hashbindung, Archive und Tombstone sowie +das gebundene Manifest. Validates receipt identity, authority, hash binding, +archives, tombstones, and the bound manifest without modifying files. + +.PARAMETER File +Pfad zum Receipt. Path to the receipt. + +.PARAMETER Repo +Repository-Wurzel. Repository root. + +.PARAMETER Json +Gibt eine maschinenlesbare Zusammenfassung aus. Emits a JSON summary. +#> +[CmdletBinding()] +param( + [Parameter(Mandatory)][string]$File, + [string]$Repo = '.', + [switch]$Json +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$Arguments = @( + (Join-Path $PSScriptRoot 'validate-intake-series.py'), + '--kind', 'receipt', + '--file', $File, + '--repo', $Repo +) +if ($Json) { $Arguments += '--json' } +& python3 @Arguments +exit $LASTEXITCODE diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-receipt.sh b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-receipt.sh new file mode 100644 index 0000000..b684e82 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series-receipt.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +# Validate one intake-series receipt and its bound manifest without writes. +set -euo pipefail + +script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +exec python3 "$script_dir/validate-intake-series.py" --kind receipt "$@" diff --git a/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py new file mode 100644 index 0000000..aa6ddcc --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/scripts/validate-intake-series.py @@ -0,0 +1,309 @@ +#!/usr/bin/env python3 +"""Validate intake-series manifests and receipts without modifying files.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import re +import sys +import uuid +from pathlib import Path, PurePosixPath + +EDGE_TYPES = { + "HardCompletionGate", + "AssessmentBaseline", + "SandboxBaseline", + "DocumentationSurfaceBaseline", + "CommentSurfaceBaseline", + "FinalAuditInput", + "PreferredSerialOrder", + "SharedWriterSerialization", +} +BINDING_TYPES = EDGE_TYPES - {"PreferredSerialOrder", "SharedWriterSerialization"} +SERIES_STATES = {"Draft", "NeedsClarification", "Ready", "Active", "Completed", "Deleted"} +TARGET_STATES = {"Pending", "Blocked", "Eligible", "Active", "Completed", "Withdrawn"} + + +class ValidationError(Exception): + """Carries a stable cross-shell error class.""" + + def __init__(self, code: str, message: str) -> None: + super().__init__(message) + self.code = code + + +def fail(code: str, message: str) -> None: + raise ValidationError(code, message) + + +def normalized_bytes(path: Path) -> bytes: + raw = path.read_bytes() + if raw.startswith(b"\xef\xbb\xbf"): + raw = raw[3:] + try: + text = raw.decode("utf-8", errors="strict") + except UnicodeDecodeError as exc: + fail("ISG001", f"{path}: not strict UTF-8: {exc}") + if "\x00" in text: + fail("ISG001", f"{path}: binary NUL detected") + return text.replace("\r\n", "\n").replace("\r", "\n").encode("utf-8") + + +def load_json(path: Path) -> dict: + try: + data = json.loads(normalized_bytes(path).decode("utf-8")) + except (OSError, json.JSONDecodeError) as exc: + fail("ISG001", f"invalid JSON: {path}: {exc}") + if not isinstance(data, dict): + fail("ISG001", f"JSON root must be an object: {path}") + return data + + +def digest(path: Path) -> str: + return hashlib.sha256(normalized_bytes(path)).hexdigest() + + +def text(obj: dict, key: str, code: str) -> str: + value = obj.get(key) + if not isinstance(value, str) or not value.strip(): + fail(code, f"{key} must be a non-empty string") + return value.strip() + + +def relative_path(value: str) -> bool: + candidate = PurePosixPath(value) + return not candidate.is_absolute() and ".." not in candidate.parts and value != "." + + +def valid_uuid(value: str) -> bool: + try: + return uuid.UUID(value).int != 0 + except ValueError: + return False + + +def validate_manifest(path: Path, repo: Path) -> tuple[dict, dict]: + data = load_json(path) + if data.get("schemaVersion") != "1.0" or data.get("documentType") != "IntakeSeriesManifest": + fail("ISG001", "manifest schema or document type is invalid") + series_id = text(data, "seriesId", "ISG002") + if not valid_uuid(series_id): + fail("ISG002", "seriesId must be a non-zero UUID") + text(data, "title", "ISG002") + text(data, "policy", "ISG002") + status = text(data, "status", "ISG009") + if status not in SERIES_STATES: + fail("ISG009", f"unknown series status: {status}") + + targets = data.get("orderedTargets") + if not isinstance(targets, list) or not targets: + fail("ISG003", "orderedTargets must be a non-empty array") + paths: list[str] = [] + target_states: dict[str, str] = {} + for index, target in enumerate(targets): + if not isinstance(target, dict): + fail("ISG003", f"orderedTargets[{index}] must be an object") + target_path = text(target, "path", "ISG003") + if not relative_path(target_path) or target_path in paths: + fail("ISG003", f"target path must be unique and repository-relative: {target_path}") + role = text(target, "role", "ISG003") + if role not in {"Primary", "OrderedMember"}: + fail("ISG003", f"invalid target role: {role}") + expected_hash = text(target, "normalizedSha256", "ISG004") + if not re.fullmatch(r"[0-9a-f]{64}", expected_hash): + fail("ISG004", f"invalid target hash: {target_path}") + full_path = repo / target_path + if not full_path.is_file() or digest(full_path) != expected_hash: + fail("ISG004", f"target missing or hash drift: {target_path}") + target_status = text(target, "status", "ISG009") + if target_status not in TARGET_STATES: + fail("ISG009", f"unknown target status: {target_status}") + 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)} + pairs: set[tuple[str, str]] = set() + binding_indegree = {target_path: 0 for target_path in paths} + all_indegree = {target_path: 0 for target_path in paths} + adjacency = {target_path: [] for target_path in paths} + for index, edge in enumerate(dependencies): + if not isinstance(edge, dict): + fail("ISG005", f"dependencies[{index}] must be an object") + source = text(edge, "from", "ISG005") + destination = text(edge, "to", "ISG005") + kind = text(edge, "kind", "ISG006") + binding = edge.get("binding") + if source not in order or destination not in order or source == destination: + fail("ISG005", f"invalid dependency reference: {source} -> {destination}") + if (source, destination) in pairs: + fail("ISG006", f"duplicate dependency pair: {source} -> {destination}") + if kind not in EDGE_TYPES: + fail("ISG006", f"unknown dependency kind: {kind}") + expected_binding = kind in BINDING_TYPES + if binding is not expected_binding: + fail("ISG006", f"binding flag disagrees with dependency kind: {kind}") + if order[source] >= order[destination]: + fail("ISG007", f"dependency contradicts declared order: {source} -> {destination}") + pairs.add((source, destination)) + adjacency[source].append(destination) + all_indegree[destination] += 1 + if binding: + binding_indegree[destination] += 1 + + actual_roots = {target_path for target_path, degree in all_indegree.items() if degree == 0} + if set(roots) != actual_roots or not roots: + fail("ISG008", "roots must equal the zero-indegree target set") + + remaining = dict(all_indegree) + queue = [target_path for target_path, degree in remaining.items() if degree == 0] + visited = 0 + while queue: + node = queue.pop() + visited += 1 + for successor in adjacency[node]: + remaining[successor] -= 1 + if remaining[successor] == 0: + queue.append(successor) + if visited != len(paths): + fail("ISG007", "dependencies must be acyclic") + + eligible: list[str] = [] + blockers: dict[str, list[str]] = {} + for target_path in paths: + if target_states[target_path] not in {"Pending", "Blocked", "Eligible"}: + continue + required = [ + source + for source, destination in pairs + if destination == target_path + and next( + edge["binding"] + for edge in dependencies + if edge["from"] == source and edge["to"] == destination + ) + ] + incomplete = [source for source in required if target_states[source] != "Completed"] + if incomplete: + blockers[target_path] = incomplete + else: + eligible.append(target_path) + + summary = { + "seriesId": series_id, + "status": status, + "targets": len(paths), + "roots": len(roots), + "dependencies": len(dependencies), + "eligible": eligible, + "blockers": blockers, + } + return data, summary + + +def validate_receipt(path: Path, repo: Path) -> dict: + data = load_json(path) + if data.get("schemaVersion") != "1.0" or data.get("documentType") != "IntakeSeriesReceipt": + fail("ISR001", "receipt schema or document type is invalid") + receipt_id = text(data, "receiptId", "ISR002") + series_id = text(data, "seriesId", "ISR002") + if not valid_uuid(receipt_id) or not valid_uuid(series_id): + fail("ISR002", "receiptId and seriesId must be non-zero UUIDs") + operation = data.get("operation") + if not isinstance(operation, dict): + fail("ISR003", "operation must be an object") + operation_id = text(operation, "operationId", "ISR003") + if not valid_uuid(operation_id): + fail("ISR003", "operationId must be a non-zero UUID") + operation_type = text(operation, "type", "ISR003") + if operation_type not in {"Create", "Update", "Delete", "LegacyAdoption"}: + fail("ISR003", f"unknown operation type: {operation_type}") + text(operation, "authorityEvidence", "ISR003") + manifest = data.get("manifest") + if not isinstance(manifest, dict): + fail("ISR004", "manifest evidence must be an object") + manifest_path = text(manifest, "path", "ISR004") + expected_hash = text(manifest, "normalizedSha256", "ISR004") + if not relative_path(manifest_path) or not re.fullmatch(r"[0-9a-f]{64}", expected_hash): + fail("ISR004", "manifest evidence is invalid") + full_manifest = repo / manifest_path + if not full_manifest.is_file() or digest(full_manifest) != expected_hash: + fail("ISR004", "manifest missing or hash drift") + manifest_data, summary = validate_manifest(full_manifest, repo) + if manifest_data.get("seriesId") != series_id: + fail("ISR004", "receipt seriesId differs from manifest") + status = text(data, "status", "ISR005") + if status not in {"Ready", "NeedsClarification", "Deleted"}: + fail("ISR005", f"unknown receipt status: {status}") + supersedes = data.get("supersedes") + if not isinstance(supersedes, dict): + fail("ISR006", "supersedes must be an object") + if operation_type in {"Update", "Delete"}: + for field in ("receiptPath", "receiptNormalizedSha256", "manifestArchivePath", "manifestArchiveSha256"): + value = text(supersedes, field, "ISR006") + if field.endswith("Path") and not relative_path(value): + fail("ISR006", f"{field} must be repository-relative") + if field.endswith("Sha256") and not re.fullmatch(r"[0-9a-f]{64}", value): + fail("ISR006", f"{field} must be a SHA-256 value") + for field in ("receiptPath", "manifestArchivePath"): + evidence_path = repo / supersedes[field] + hash_field = "receiptNormalizedSha256" if field == "receiptPath" else "manifestArchiveSha256" + if not evidence_path.is_file() or digest(evidence_path) != supersedes[hash_field]: + fail("ISR006", f"archive evidence missing or drifted: {field}") + tombstone = data.get("tombstone") + if operation_type == "Delete": + if not isinstance(tombstone, dict): + fail("ISR007", "Delete requires tombstone evidence") + tombstone_path = text(tombstone, "path", "ISR007") + tombstone_hash = text(tombstone, "normalizedSha256", "ISR007") + if not relative_path(tombstone_path) or not re.fullmatch(r"[0-9a-f]{64}", tombstone_hash): + fail("ISR007", "tombstone evidence is invalid") + full_tombstone = repo / tombstone_path + if not full_tombstone.is_file() or digest(full_tombstone) != tombstone_hash: + fail("ISR007", "tombstone missing or hash drift") + return {"receiptId": receipt_id, **summary} + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--kind", choices=("manifest", "receipt"), required=True) + parser.add_argument("--file", required=True) + parser.add_argument("--repo", default=".") + parser.add_argument("--json", action="store_true") + args = parser.parse_args() + repo = Path(args.repo).resolve() + path = Path(args.file) + if not path.is_absolute(): + path = Path.cwd() / path + try: + if args.kind == "manifest": + _, summary = validate_manifest(path, repo) + else: + summary = validate_receipt(path, repo) + except ValidationError as exc: + print(f"ERROR {exc.code}: {exc}", file=sys.stderr) + return 2 + if args.json: + print(json.dumps(summary, sort_keys=True)) + else: + print( + "PASS: " + f"{summary['seriesId']} " + f"({summary['targets']} targets, {summary['roots']} roots, " + f"{summary['dependencies']} dependencies)" + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md b/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md new file mode 100644 index 0000000..5ed3c84 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/agent-file-addendum.md @@ -0,0 +1,11 @@ +# Intake Sequencing Governance + +When installed, treat intake content, intake review, sequencing, and execution +as separate authority domains. Never infer graph edges, lifecycle completion, +or write authority. Use read-only status before selecting work. The `next` +command reports candidates only; it never starts another command. + +Keep graph explanations text-first: state visible order, roots, binding +predecessors, serialization-only edges, blockers, and the exact next safe +action. Learner-facing explanations use German first, English second, CEFR B2, +and applicable WCAG 2.2 AA. diff --git a/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md b/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md new file mode 100644 index 0000000..186f1ba --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/field-validation-summary.md @@ -0,0 +1,6 @@ +# Intake Sequencing Field Validation + +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. 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 new file mode 100644 index 0000000..cdefa11 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-checklist-template.md @@ -0,0 +1,12 @@ +# Intake Series Checklist + +- [ ] Every target path is explicit, unique, repository-relative, and hashed. +- [ ] Visible order contains every target exactly once. +- [ ] Roots equal the zero-indegree target set. +- [ ] Every edge uses an accepted type and correct binding flag. +- [ ] The graph is order-consistent and acyclic. +- [ ] Material ambiguity is recorded as `NeedsClarification`. +- [ ] Write authority is current and bounded. +- [ ] Read, status, and next remain read-only. +- [ ] No downstream command is started implicitly. +- [ ] Bash and PowerShell validators agree. diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-manifest-template.json b/.specify/presets/intake-sequencing-governance/templates/intake-series-manifest-template.json new file mode 100644 index 0000000..68989e1 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-manifest-template.json @@ -0,0 +1,19 @@ +{ + "schemaVersion": "1.0", + "documentType": "IntakeSeriesManifest", + "seriesId": "00000000-0000-0000-0000-000000000000", + "title": "Example intake series", + "policy": "default", + "status": "Draft", + "orderedTargets": [ + { + "path": "intakes/example.md", + "role": "Primary", + "normalizedSha256": "0000000000000000000000000000000000000000000000000000000000000000", + "status": "Pending" + } + ], + "roots": ["intakes/example.md"], + "dependencies": [], + "evidencePaths": [] +} diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-operation-template.json b/.specify/presets/intake-sequencing-governance/templates/intake-series-operation-template.json new file mode 100644 index 0000000..d5de47c --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-operation-template.json @@ -0,0 +1,13 @@ +{ + "schemaVersion": "1.0", + "documentType": "IntakeSeriesOperation", + "operationId": "00000000-0000-0000-0000-000000000000", + "seriesId": "00000000-0000-0000-0000-000000000000", + "type": "Create", + "status": "Prepared", + "authorityEvidence": "Explicit current user authority", + "proposalNormalizedSha256": "0000000000000000000000000000000000000000000000000000000000000000", + "preparedPaths": [], + "validation": {"bash": "Pending", "powerShell": "Pending"}, + "publication": {"status": "NotPublished", "publishedPaths": []} +} diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-order-template.md b/.specify/presets/intake-sequencing-governance/templates/intake-series-order-template.md new file mode 100644 index 0000000..7932a95 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-order-template.md @@ -0,0 +1,25 @@ +# Intake-Abarbeitungsreihenfolge / Intake Processing Order + +## Begriffe / Terms + +- **Position:** bevorzugte sichtbare Lieferreihenfolge. +- **Root:** Ziel ohne eingehende Kante. +- **Bindende Kante:** Vorgaenger muss abgeschlossen sein. +- **Serialisierung:** gemeinsame Schreibflaechen, aber keine fachliche + Abhaengigkeit. + +## Reihenfolge / Order + +| Position | Intake | Status | Zweck | +|---:|---|---|---| +| 1 | `intakes/example.md` | Pending | Beispiel | + +## Abhaengigkeiten / Dependencies + +```text +Root --> dependent intake +``` + +## Naechste Kandidaten / Next Candidates + +Diese Liste ist eine Auskunft und startet keine Arbeit. diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-policy-template.json b/.specify/presets/intake-sequencing-governance/templates/intake-series-policy-template.json new file mode 100644 index 0000000..d4a2641 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-policy-template.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": "1.0", + "manifestRoot": "specs/intake-series", + "archiveRoot": "specs/intake-series-archive", + "requireExplicitWriteAuthority": true, + "allowPhysicalPurge": false, + "allowedEdgeTypes": [ + "HardCompletionGate", + "AssessmentBaseline", + "SandboxBaseline", + "DocumentationSurfaceBaseline", + "CommentSurfaceBaseline", + "FinalAuditInput", + "PreferredSerialOrder", + "SharedWriterSerialization" + ], + "nextCommandStartsWork": false, + "languagePolicy": "RepositoryPolicy", + "accessibilityBaseline": "WCAG22AAWhereApplicable" +} 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 new file mode 100644 index 0000000..fec3bd6 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-receipt-template.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": "1.0", + "documentType": "IntakeSeriesReceipt", + "receiptId": "00000000-0000-0000-0000-000000000000", + "seriesId": "00000000-0000-0000-0000-000000000000", + "generator": {"preset": "intake-sequencing-governance", "version": "0.1.0"}, + "createdAt": "1970-01-01T00:00:00Z", + "operation": { + "operationId": "00000000-0000-0000-0000-000000000000", + "type": "Create", + "authorityEvidence": "Explicit current user authority" + }, + "status": "NeedsClarification", + "manifest": { + "path": "specs/intake-series/example/manifest.json", + "normalizedSha256": "0000000000000000000000000000000000000000000000000000000000000000" + }, + "supersedes": { + "receiptPath": "N/A", + "receiptNormalizedSha256": "N/A", + "manifestArchivePath": "N/A", + "manifestArchiveSha256": "N/A" + }, + "tombstone": {"path": "N/A", "normalizedSha256": "N/A"}, + "nextAction": "Resolve material series decisions" +} 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 new file mode 100644 index 0000000..9501b5c --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-runbook-template.md @@ -0,0 +1,25 @@ +# Intake Sequencing Runbook + +## Create + +Name every existing target, proposed order, root, edge, type, and lifecycle +state. Publish only after explicit approval and both validators pass. + +## Read + +Summarize identity, target count, roots, dependencies, statuses, blockers, and +eligible targets. Do not modify files. + +## Update + +Require current authority, archive the accepted predecessor, prepare all files, +validate, and publish atomically with `supersedes` evidence. + +## Delete + +Archive manifest and receipt, create a tombstone, and keep intake documents. + +## Status And Next + +Validate hashes and graph read-only. `next` reports candidates but never starts +Review, Specify, Autonomous, or Parallel Autonomous. diff --git a/.specify/presets/intake-sequencing-governance/templates/intake-series-tombstone-template.json b/.specify/presets/intake-sequencing-governance/templates/intake-series-tombstone-template.json new file mode 100644 index 0000000..a492301 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/templates/intake-series-tombstone-template.json @@ -0,0 +1,11 @@ +{ + "schemaVersion": "1.0", + "documentType": "IntakeSeriesTombstone", + "seriesId": "00000000-0000-0000-0000-000000000000", + "deletedAt": "1970-01-01T00:00:00Z", + "authorityEvidence": "Explicit current delete authority", + "reason": "Series no longer active", + "archiveManifestPath": "specs/intake-series-archive/example/manifest.json", + "archiveManifestSha256": "0000000000000000000000000000000000000000000000000000000000000000", + "intakeDocumentsDeleted": false +} 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 new file mode 100644 index 0000000..baa1b73 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/tests/test-home-baseline-field.ps1 @@ -0,0 +1,72 @@ +[CmdletBinding()] +param( + [string]$RepositoryRoot = (Resolve-Path (Join-Path $PSScriptRoot '../../../..')).Path +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$RequestPath = Join-Path $RepositoryRoot 'specs/active-lastenheft-normalization/intake-review-request.json' +$ResultPath = Join-Path $RepositoryRoot 'specs/active-lastenheft-normalization/intake-review-result.json' +$Request = Get-Content -LiteralPath $RequestPath -Raw | ConvertFrom-Json -Depth 50 +$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 13 -or $Request.series.roots.Count -ne 6 -or + $Request.series.dependencies.Count -ne 15) { + throw 'Expected LegacyAdoption cardinality is 13 targets, 6 roots, and 15 dependencies.' +} + +$ResultByPath = @{} +foreach ($Target in $Result.targets) { $ResultByPath[$Target.path] = $Target } +$Targets = foreach ($Path in $Request.series.orderedTargetPaths) { + $RequestTarget = $Request.targets | Where-Object path -EQ $Path + [ordered]@{ + path = $Path + role = $RequestTarget.role + normalizedSha256 = $ResultByPath[$Path].normalizedSha256 + status = 'Pending' + } +} +$Dependencies = foreach ($Dependency in $Request.series.dependencies) { + [ordered]@{ + from = $Dependency.from + to = $Dependency.to + kind = $Dependency.kind + binding = $true + } +} +$Manifest = [ordered]@{ + schemaVersion = '1.0' + documentType = 'IntakeSeriesManifest' + seriesId = $Request.reviewId + title = 'Home Baseline active intake LegacyAdoption' + policy = $Request.policy + status = 'Ready' + orderedTargets = @($Targets) + roots = @($Request.series.roots) + dependencies = @($Dependencies) + evidencePaths = @( + 'specs/active-lastenheft-normalization/intake-review-request.json', + 'specs/active-lastenheft-normalization/intake-review-result.json' + ) +} + +$TempRoot = Join-Path ([IO.Path]::GetTempPath()) "intake-series-field-$([Guid]::NewGuid())" +New-Item -ItemType Directory -Path $TempRoot -Force | Out-Null +try { + $ManifestPath = Join-Path $TempRoot 'manifest.json' + $Manifest | ConvertTo-Json -Depth 30 | Set-Content -LiteralPath $ManifestPath -Encoding utf8NoBOM + $PresetRoot = Split-Path -Parent (Split-Path -Parent $PSCommandPath) + & bash (Join-Path $PresetRoot 'scripts/validate-intake-series-manifest.sh') ` + --file $ManifestPath --repo $RepositoryRoot + if ($LASTEXITCODE -ne 0) { throw 'Bash LegacyAdoption validation failed.' } + & 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 LegacyAdoption (13 targets, 6 roots, 15 dependencies)' +} finally { + Remove-Item -LiteralPath $TempRoot -Recurse -Force -ErrorAction SilentlyContinue +} 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 new file mode 100644 index 0000000..ae062d5 --- /dev/null +++ b/.specify/presets/intake-sequencing-governance/tests/test-intake-sequencing-validator.ps1 @@ -0,0 +1,179 @@ +[CmdletBinding()] +param() + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$PresetRoot = Split-Path -Parent (Split-Path -Parent $PSCommandPath) +$TempRoot = Join-Path ([IO.Path]::GetTempPath()) "intake-sequencing-$([Guid]::NewGuid())" +New-Item -ItemType Directory -Path (Join-Path $TempRoot 'intakes') -Force | Out-Null + +function Get-NormalizedHash([string]$Path) { + $Utf8 = [Text.UTF8Encoding]::new($false, $true) + $Raw = [IO.File]::ReadAllBytes($Path) + if ($Raw.Length -ge 3 -and $Raw[0] -eq 0xEF -and $Raw[1] -eq 0xBB -and $Raw[2] -eq 0xBF) { + $Raw = $Raw[3..($Raw.Length - 1)] + } + $Text = $Utf8.GetString($Raw).Replace("`r`n", "`n").Replace("`r", "`n") + return [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($Utf8.GetBytes($Text))).ToLowerInvariant() +} + +function Save-Json([object]$Value, [string]$Path) { + $Value | ConvertTo-Json -Depth 30 | Set-Content -LiteralPath $Path -Encoding utf8NoBOM +} + +function Invoke-Validator([string]$Shell, [string]$Kind, [int]$Expected, [string]$ExpectedClass = '') { + $File = Join-Path $TempRoot "$Kind.json" + if ($Shell -eq 'Bash') { + $Output = & bash (Join-Path $PresetRoot "scripts/validate-intake-series-$Kind.sh") ` + --file $File --repo $TempRoot 2>&1 + } else { + $Output = & pwsh -NoProfile -File (Join-Path $PresetRoot "scripts/validate-intake-series-$Kind.ps1") ` + -File $File -Repo $TempRoot 2>&1 + } + if ($LASTEXITCODE -ne $Expected) { + throw "$Shell/$Kind expected $Expected, got $LASTEXITCODE`: $Output" + } + $Joined = $Output -join "`n" + if ($ExpectedClass -and $Joined -notmatch [regex]::Escape($ExpectedClass)) { + throw "$Shell/$Kind did not report $ExpectedClass`: $Joined" + } +} + +function Reset-Fixture { + foreach ($Name in @('a', 'b', 'c')) { + [IO.File]::WriteAllText( + (Join-Path $TempRoot "intakes/$Name.md"), + "# $Name`n`nExisting intake $Name.`n", + [Text.UTF8Encoding]::new($false) + ) + } + $script:Manifest = [ordered]@{ + schemaVersion = '1.0' + documentType = 'IntakeSeriesManifest' + seriesId = '11111111-1111-4111-8111-111111111111' + title = 'Three target fixture' + policy = 'fixture' + status = 'Ready' + orderedTargets = @( + [ordered]@{ path = 'intakes/a.md'; role = 'Primary'; normalizedSha256 = Get-NormalizedHash (Join-Path $TempRoot 'intakes/a.md'); status = 'Completed' } + [ordered]@{ path = 'intakes/b.md'; role = 'OrderedMember'; normalizedSha256 = Get-NormalizedHash (Join-Path $TempRoot 'intakes/b.md'); status = 'Eligible' } + [ordered]@{ path = 'intakes/c.md'; role = 'OrderedMember'; normalizedSha256 = Get-NormalizedHash (Join-Path $TempRoot 'intakes/c.md'); status = 'Blocked' } + ) + roots = @('intakes/a.md') + dependencies = @( + [ordered]@{ from = 'intakes/a.md'; to = 'intakes/b.md'; kind = 'HardCompletionGate'; binding = $true } + [ordered]@{ from = 'intakes/b.md'; to = 'intakes/c.md'; kind = 'AssessmentBaseline'; binding = $true } + ) + evidencePaths = @() + } + Save-Json $script:Manifest (Join-Path $TempRoot 'manifest.json') + $script:Receipt = [ordered]@{ + schemaVersion = '1.0' + documentType = 'IntakeSeriesReceipt' + receiptId = '22222222-2222-4222-8222-222222222222' + seriesId = $script:Manifest.seriesId + generator = [ordered]@{ preset = 'intake-sequencing-governance'; version = '0.1.0' } + createdAt = '2026-07-25T00:00:00Z' + operation = [ordered]@{ + operationId = '33333333-3333-4333-8333-333333333333' + type = 'Create' + authorityEvidence = 'Explicit fixture authority' + } + status = 'Ready' + manifest = [ordered]@{ + path = 'manifest.json' + normalizedSha256 = Get-NormalizedHash (Join-Path $TempRoot 'manifest.json') + } + supersedes = [ordered]@{ + receiptPath = 'N/A'; receiptNormalizedSha256 = 'N/A' + manifestArchivePath = 'N/A'; manifestArchiveSha256 = 'N/A' + } + tombstone = [ordered]@{ path = 'N/A'; normalizedSha256 = 'N/A' } + nextAction = '$speckit-intake-series-status' + } + Save-Json $script:Receipt (Join-Path $TempRoot 'receipt.json') +} + +function Invoke-NegativeCase([scriptblock]$Mutation, [string]$ExpectedClass) { + Reset-Fixture + & $Mutation $script:Manifest + Save-Json $script:Manifest (Join-Path $TempRoot 'manifest.json') + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell manifest 2 $ExpectedClass + } +} + +try { + Reset-Fixture + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell manifest 0 + Invoke-Validator $Shell receipt 0 + } + + 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' + Invoke-NegativeCase { param($M) $M.dependencies[0].to = 'intakes/missing.md' } 'ISG005' + Invoke-NegativeCase { param($M) $M.dependencies[0].to = 'intakes/a.md' } 'ISG005' + Invoke-NegativeCase { param($M) $M.dependencies[0].kind = 'Unknown' } 'ISG006' + Invoke-NegativeCase { param($M) $M.dependencies[0].binding = $false } 'ISG006' + Invoke-NegativeCase { + param($M) + $M.dependencies += [ordered]@{ + from = 'intakes/a.md'; to = 'intakes/b.md' + kind = 'SharedWriterSerialization'; binding = $false + } + } 'ISG006' + Invoke-NegativeCase { param($M) $M.dependencies[0].from = 'intakes/b.md'; $M.dependencies[0].to = 'intakes/a.md'; $M.roots = @('intakes/b.md') } 'ISG007' + Invoke-NegativeCase { + param($M) + $M.dependencies += [ordered]@{ + from = 'intakes/c.md'; to = 'intakes/a.md' + kind = 'FinalAuditInput'; binding = $true + } + $M.roots = @() + } 'ISG007' + Invoke-NegativeCase { param($M) $M.roots = @('intakes/a.md', 'intakes/b.md') } 'ISG008' + Invoke-NegativeCase { param($M) $M.roots = @('intakes/a.md', 'intakes/a.md') } 'ISG008' + Invoke-NegativeCase { param($M) $M.orderedTargets[0].status = 'Unknown' } 'ISG009' + + Reset-Fixture + $script:Receipt.manifest.normalizedSha256 = '0' * 64 + Save-Json $script:Receipt (Join-Path $TempRoot 'receipt.json') + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell receipt 2 'ISR004' + } + + Reset-Fixture + $script:Receipt.operation.authorityEvidence = '' + Save-Json $script:Receipt (Join-Path $TempRoot 'receipt.json') + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell receipt 2 'ISR003' + } + + Reset-Fixture + $script:Receipt.operation.type = 'Update' + Save-Json $script:Receipt (Join-Path $TempRoot 'receipt.json') + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell receipt 2 'ISR006' + } + + Reset-Fixture + $script:Receipt.operation.type = 'Delete' + $script:Receipt.status = 'Deleted' + [IO.File]::WriteAllText((Join-Path $TempRoot 'prior-receipt.json'), "{}`n", [Text.UTF8Encoding]::new($false)) + [IO.File]::WriteAllText((Join-Path $TempRoot 'prior-manifest.json'), "{}`n", [Text.UTF8Encoding]::new($false)) + $script:Receipt.supersedes.receiptPath = 'prior-receipt.json' + $script:Receipt.supersedes.receiptNormalizedSha256 = Get-NormalizedHash (Join-Path $TempRoot 'prior-receipt.json') + $script:Receipt.supersedes.manifestArchivePath = 'prior-manifest.json' + $script:Receipt.supersedes.manifestArchiveSha256 = Get-NormalizedHash (Join-Path $TempRoot 'prior-manifest.json') + Save-Json $script:Receipt (Join-Path $TempRoot 'receipt.json') + foreach ($Shell in @('Bash', 'PowerShell')) { + Invoke-Validator $Shell receipt 2 'ISR007' + } + + Write-Output 'PASS: intake sequencing validator parity and negative cases' +} finally { + Remove-Item -LiteralPath $TempRoot -Recurse -Force -ErrorAction SilentlyContinue +} diff --git a/docs/project-statistics.md b/docs/project-statistics.md index 162b588..c243267 100644 --- a/docs/project-statistics.md +++ b/docs/project-statistics.md @@ -446,26 +446,26 @@ Profil 2 verwendet Git-getrackte Textdateien und sichtbare Git-Aktivitaet. Die W | Kennzahl / Metric | Wert / Value | |---|---:| -| Textbasis / Text base | 122943 lines | -| Textdateien / Text files | 815 | -| Beobachtbarer Zeitraum / Observable period | 2025-07-27..2026-07-24 | -| Aktivtage / Active days | 127 | -| Relevante Commits / Relevant commits | 678 | -| Zeilen je Aktivtag / Lines per active day | 968.1 | +| Textbasis / Text base | 124843 lines | +| Textdateien / Text files | 876 | +| Beobachtbarer Zeitraum / Observable period | 2025-07-27..2026-07-25 | +| Aktivtage / Active days | 128 | +| Relevante Commits / Relevant commits | 679 | +| Zeilen je Aktivtag / Lines per active day | 975.3 | | 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.1x | -| Speedup vs. 100 lines/day | 9.7x | -| Methodik / Methodology | v2; source `0275e0e6b3a7` | +| Speedup vs. 80 lines/day | 12.2x | +| Speedup vs. 100 lines/day | 9.8x | +| Methodik / Methodology | v2; source `f0484cabfbe8` | ### Artefaktmix / Artifact Mix ```text -Produktiv / Production [##..................] 8.3% | 10220 -Tests [#...................] 3.4% | 4174 -Dokumentation / Documentation [###############.....] 76.5% | 94039 -Skripte / Scripts [##..................] 7.9% | 9751 +Produktiv / Production [##..................] 8.2% | 10220 +Tests [#...................] 3.3% | 4174 +Dokumentation / Documentation [###############.....] 76.8% | 95918 +Skripte / Scripts [##..................] 7.8% | 9772 Konfiguration / Configuration [#...................] 1.9% | 2356 Daten und Medien / Data and media [#...................] 0.9% | 1150 Sonstiger Text / Other text [#...................] 1.0% | 1253 @@ -496,7 +496,7 @@ Di/Tu 0 0 0 0 0 0 2 0 0 3 0 0 0 0 3 0 0 3 0 0 0 0 2 0 3 4 Mi/We 0 0 0 0 0 0 0 0 1 0 0 0 3 0 2 0 0 0 2 0 4 0 2 0 0 2 Do/Th 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 1 0 4 1 0 0 0 1 4 Fr/Fr 0 2 0 0 0 0 0 0 2 4 0 2 4 0 0 0 4 2 2 0 3 2 3 4 4 4 -Sa/Sa 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 4 0 4 4 0 - +Sa/Sa 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 4 0 4 4 0 4 ``` DE: 0 = keine Aenderung; 1 = 1..79; 2 = 80..399; 3 = 400..1599; 4 = 1600+ geaenderte Textzeilen; - = noch nicht abgelaufen. @@ -523,7 +523,7 @@ Wochen / Weeks 27..52 | 2026-01-25..2026-07-25 133333 | . . . . . . . . . . . . . . . . . . . . . . . . . . 100000 | . . . . . . . . . . . . # . . . . . . . . . . . . . 66667 | . . . . . . . . . . . . # . . . . . . . . . . . . . - 33333 | . . . . . . . . . . . . # . . . . . . . . . . . . . + 33333 | . . . . . . . . . . . . # . . . . . . . . . . . . # 0 +----------------------------------------------------- ``` @@ -590,8 +590,8 @@ Die festen Slots halten den Phasenvergleich auch bei fehlenden oder spaeter erga ```text Scale: 0..20x -80 lines/day [############........] 12.1x -100 lines/day [##########..........] 9.7x +80 lines/day [############........] 12.2x +100 lines/day [##########..........] 9.8x ``` Die Faktoren vergleichen sichtbare Lieferdichte mit den dokumentierten manuellen Referenzen. Sie messen keine Arbeitszeit. @@ -604,7 +604,7 @@ Die Faktoren vergleichen sichtbare Lieferdichte mit den dokumentierten manuellen Scale: 0..1000 lines/day Experienced manual [##..................] 80 Thorsten solo [##..................] 100 -Visible repository [###################.] 968.1 +Visible repository [####################] 975.3 ``` Die gemeinsame Skala vergleicht Referenzen und sichtbare Lieferdichte. Sie schreibt die Git-Aktivitaet keiner Person oder KI pauschal zu. @@ -613,9 +613,9 @@ Die gemeinsame Skala vergleicht Referenzen und sichtbare Lieferdichte. Sie schre ### Textalternative / Text Alternative -DE: Das Fenster beginnt am 2025-07-27 und endet am 2026-07-24. Es enthaelt 127 aktive und 236 inaktive vergangene Tage. Peak-Tag: 2026-04-19 / 107974. Peak-Woche: 2026-04-19 / 114277. Laengste Serie: 11 Tage (2025-10-25..2025-11-04). +DE: Das Fenster beginnt am 2025-07-27 und endet am 2026-07-25. Es enthaelt 128 aktive und 236 inaktive vergangene Tage. Peak-Tag: 2026-04-19 / 107974. Peak-Woche: 2026-04-19 / 114277. Laengste Serie: 11 Tage (2025-10-25..2025-11-04). -*EN: The window starts on 2025-07-27 and ends on 2026-07-24. It contains 127 active and 236 inactive elapsed days. Peak day: 2026-04-19 / 107974. Peak week: 2026-04-19 / 114277. Longest streak: 11 days (2025-10-25..2025-11-04).* +*EN: The window starts on 2025-07-27 and ends on 2026-07-25. It contains 128 active and 236 inactive elapsed days. Peak day: 2026-04-19 / 107974. Peak week: 2026-04-19 / 114277. Longest streak: 11 days (2025-10-25..2025-11-04).* | Monat / Month | Geaenderte Textzeilen / Changed text lines | |---|---:| @@ -630,6 +630,6 @@ DE: Das Fenster beginnt am 2025-07-27 und endet am 2026-07-24. Es enthaelt 127 a | 2026-04 | 119744 | | 2026-05 | 13510 | | 2026-06 | 37685 | -| 2026-07 | 54539 | +| 2026-07 | 56463 | diff --git a/scripts/config/spec-kit-intake-sequencing-governance-presets.json b/scripts/config/spec-kit-intake-sequencing-governance-presets.json new file mode 100644 index 0000000..3d59259 --- /dev/null +++ b/scripts/config/spec-kit-intake-sequencing-governance-presets.json @@ -0,0 +1,17 @@ +{ + "schemaVersion": 1, + "description": "Optional eleven-preset profile: standard eight plus intake authoring at priority 64, intake review at 65, and intake sequencing at 66.", + "presets": [ + {"id":"security-governance","version":"v0.6.1","priority":10,"repository":"https://github.com/hindermath/spec-kit-preset-security-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-security-governance/archive/refs/tags/v0.6.1.zip"}, + {"id":"architecture-governance","version":"v0.5.1","priority":20,"repository":"https://github.com/hindermath/spec-kit-preset-architecture-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-architecture-governance/archive/refs/tags/v0.5.1.zip"}, + {"id":"isaqb-architecture-governance","version":"v0.2.1","priority":30,"repository":"https://github.com/hindermath/spec-kit-preset-isaqb-architecture-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-isaqb-architecture-governance/archive/refs/tags/v0.2.1.zip"}, + {"id":"a11y-governance","version":"v0.4.1","priority":40,"repository":"https://github.com/hindermath/spec-kit-preset-a11y-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-a11y-governance/archive/refs/tags/v0.4.1.zip"}, + {"id":"cross-platform-governance","version":"v0.2.1","priority":50,"repository":"https://github.com/hindermath/spec-kit-preset-cross-platform-governance","archiveUrl":"https://github.com/hindermath/spec-kit-preset-cross-platform-governance/archive/refs/tags/v0.2.1.zip"}, + {"id":"agent-parity-governance","version":"v0.4.0","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.0.zip"}, + {"id":"intake-authoring-governance","version":"v0.2.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.2.0.zip"}, + {"id":"intake-review-governance","version":"v0.1.1","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.1.1.zip"}, + {"id":"intake-sequencing-governance","version":"v0.1.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.1.0.zip"}, + {"id":"autonomous-run-governance","version":"v0.3.2","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.2.zip"}, + {"id":"parallel-autonomous-run-governance","version":"v0.2.3","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.3.zip"} + ] +} diff --git a/scripts/templates/AGENTS.md.tmpl b/scripts/templates/AGENTS.md.tmpl index 302b951..f2ee592 100644 --- a/scripts/templates/AGENTS.md.tmpl +++ b/scripts/templates/AGENTS.md.tmpl @@ -213,6 +213,7 @@ Neue Lernreihen fuer Fachinformatiker*innen und weitere IT-Ausbildungsberufe wer - Optionale Intake-Presets: `intake-authoring-governance` v0.2.0 prio 64 und `intake-review-governance` v0.1.1 prio 65 bleiben ausserhalb der Standard-Achtermatrix. Die verwaltete Thorsten-Flotte waehlt beide ueber `intake-authoring-ten-governance-presets`; das bisherige Neunerprofil bleibt kompatibel verfuegbar. *Optional intake presets: Authoring v0.2.0 at priority 64 and Review v0.1.1 at priority 65 remain outside the standard eight.* - Intake Authoring trennt Create, Read, Update und logisches Delete, beschraenkt URL-Quellen auf oeffentliches HTTPS und publiziert mehrere Intakes erst nach einem vollstaendigen, ausdruecklich genehmigten Series-Vorschlag. Archive, Tombstones und Receipts bleiben hashgebunden. Review oder Ausfuehrung startet nie automatisch. *Intake Authoring separates CRUD, bounds public HTTPS sources, requires explicit series approval, and never starts downstream review or execution.* - Intake Review akzeptiert bei aktiver Projekt- oder Kampagnenpolicy nur aktuelle `Ready`- oder menschlich akzeptierte `ReadyWithAcceptedRisks`-Ergebnisse; Critical/High, offene materielle Fragen, Hash-Drift oder fehlende Worker-Coverage blockieren. Review und Status sind read-only, Repair benoetigt ausdrueckliche Aenderungsautoritaet. Series-Reviews verwenden Schema 1.1, binden den normalisierten Request-Hash und pruefen exakte Zielreihenfolge, explizite Roots sowie einen azyklischen Graphen; nicht belegbare Vorgaengerbeziehungen fuehren zu `NeedsClarification`. *Series reviews use schema 1.1, bind the normalized request hash, and verify exact target order, explicit roots, and an acyclic graph; unprovable predecessor relations result in `NeedsClarification`.* +- Intake Sequencing verwaltet nur Reihenfolge und Lifecycle bereits vorhandener Intakes. Create/Update/Delete benoetigen ausdrueckliche aktuelle Autoritaet; Read/Status/Next bleiben read-only. `next` meldet startfaehige Ziele oder konkrete Blocker und startet keine Folgeaktion. *Intake Sequencing manages only order and lifecycle, requires explicit write authority, and never starts downstream work.* - Community-Katalog-Einreichungen an `github/spec-kit` strikt einzeln erstellen und aktivieren: erst den erzeugten PR pruefen und mergen lassen sowie das Issue abschliessen, dann das naechste Issue einreichen. Bei einer bereits vorhandenen Warteschlange nur den naechsten Kandidaten fuer `preset-submission` benennen; keine neuen Batch-Issues oder parallelen Label-Anfragen. Grundlage ist der Maintainer-Hinweis in `github/spec-kit#3679`; der Betriebsvertrag steht in `docs/maintenance/Preset-and-Fleet-Operations-Lessons-Learned.md`. *Submit and activate `github/spec-kit` community catalog updates strictly one at a time. Complete the generated PR and issue before filing the next issue; for an existing queue, name only the next label candidate. Do not create new batch issues or parallel label requests.* - `autonomous-run-governance` v0.3.2 prio 70 ist Teil der Standard-Achtermatrix. Ein vollständiger autonomer Lauf bleibt ausdrücklich delegationspflichtig; die Installation allein erteilt weder Ausführungsberechtigung noch Remote-, Merge-, Bypass- oder Provider-Rechte und `LocalImplementation` bleibt Default. Dokumentations-, Status-, Schema- oder Evidence-Änderungen gelten erst dann als testfrei, wenn keine ausführbaren Validatoren die geänderten Pfade, Marker, Schemas oder Zustandswerte konsumieren. Vor autorisierten Commits wird der exakt beabsichtigte Kandidat mit `git diff --cached --check` und Statusabgleich geprüft; fremde Änderungen bleiben unberührt. Vor einem Merge wird jeder Acceptance-Gate dem tatsächlich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zugeordnet; grüne Namen oder ein Bypass ersetzen keinen technischen Nachweis. Bewusst pausierte Läufe werden als `PausedByUser` gespeichert und nur über `speckit.autonomous-resume` fortgesetzt; `speckit.autonomous-stop` wirkt kooperativ am nächsten sicheren Grenzpunkt, und ein gespeicherter Delivery-Modus ist keine aktuelle Berechtigung. Nach Preset- oder Governance-Drift werden neue zwingende Korrektheits-, Sicherheits-, Berechtigungs- und Evidenzregeln minimal mit akzeptierten Plan-, Task- und Checklist-Artefakten abgeglichen; reine Effizienzpräferenzen lösen keine rückwirkende Neugenerierung aus. Die lesbare Skill-Überschrift `Deliver` ist kein Run-State-Wert; für Remote-Closeout gelten ausschließlich `Publish`, `Review` oder `MergeAndSync`. - `parallel-autonomous-run-governance` v0.2.3 prio 80 ist Teil der Standard-Achtermatrix. Die Installation startet keine Kampagne und erteilt keine zusaetzlichen Remote-, Merge-, Bypass-, Abbruch-, Secret- oder Provider-Rechte. Kampagnen bleiben ausdruecklich delegationspflichtig, verwenden getrennte Worktrees und maximal drei gleichzeitig aktive Worker. Schema 1.1 erlaubt ein `runnerProfile` je Worker mit Kampagnen-Fallback; Modell und Reasoning-Stufe sind optionale, nicht geheime Metadaten und werden ohne Deklaration nicht erraten. Konsolidierung verlangt exakten Head, aktuelle Review- und Check-Evidenz, ist nach Teilmerges fortsetzbar und setzt `Completed` erst nach Synchronisation, manifestdeklarierten idempotenten Post-Merge-Aktionen und Abschlussvalidierung. diff --git a/scripts/templates/CLAUDE.md.tmpl b/scripts/templates/CLAUDE.md.tmpl index 6d1e398..b64c092 100644 --- a/scripts/templates/CLAUDE.md.tmpl +++ b/scripts/templates/CLAUDE.md.tmpl @@ -203,6 +203,7 @@ Neue Lernreihen fuer Fachinformatiker*innen und weitere IT-Ausbildungsberufe wer - Optionale Intake-Presets: `intake-authoring-governance` v0.2.0 prio 64 und `intake-review-governance` v0.1.1 prio 65 bleiben ausserhalb der Standard-Achtermatrix. Die verwaltete Thorsten-Flotte waehlt beide ueber `intake-authoring-ten-governance-presets`; das bisherige Neunerprofil bleibt kompatibel verfuegbar. *Optional intake presets: Authoring v0.2.0 at priority 64 and Review v0.1.1 at priority 65 remain outside the standard eight.* - Intake Authoring trennt Create, Read, Update und logisches Delete, beschraenkt URL-Quellen auf oeffentliches HTTPS und publiziert mehrere Intakes erst nach einem vollstaendigen, ausdruecklich genehmigten Series-Vorschlag. Archive, Tombstones und Receipts bleiben hashgebunden. Review oder Ausfuehrung startet nie automatisch. *Intake Authoring separates CRUD, bounds public HTTPS sources, requires explicit series approval, and never starts downstream review or execution.* - Intake Review akzeptiert bei aktiver Projekt- oder Kampagnenpolicy nur aktuelle `Ready`- oder menschlich akzeptierte `ReadyWithAcceptedRisks`-Ergebnisse; Critical/High, offene materielle Fragen, Hash-Drift oder fehlende Worker-Coverage blockieren. Review und Status sind read-only, Repair benoetigt ausdrueckliche Aenderungsautoritaet. Series-Reviews verwenden Schema 1.1, binden den normalisierten Request-Hash und pruefen exakte Zielreihenfolge, explizite Roots sowie einen azyklischen Graphen; nicht belegbare Vorgaengerbeziehungen fuehren zu `NeedsClarification`. *Series reviews use schema 1.1, bind the normalized request hash, and verify exact target order, explicit roots, and an acyclic graph; unprovable predecessor relations result in `NeedsClarification`.* +- Intake Sequencing verwaltet nur Reihenfolge und Lifecycle bereits vorhandener Intakes. Create/Update/Delete benoetigen ausdrueckliche aktuelle Autoritaet; Read/Status/Next bleiben read-only. `next` meldet startfaehige Ziele oder konkrete Blocker und startet keine Folgeaktion. *Intake Sequencing manages only order and lifecycle, requires explicit write authority, and never starts downstream work.* - Community-Katalog-Einreichungen an `github/spec-kit` strikt einzeln erstellen und aktivieren: erst den erzeugten PR pruefen und mergen lassen sowie das Issue abschliessen, dann das naechste Issue einreichen. Bei einer bereits vorhandenen Warteschlange nur den naechsten Kandidaten fuer `preset-submission` benennen; keine neuen Batch-Issues oder parallelen Label-Anfragen. Grundlage ist der Maintainer-Hinweis in `github/spec-kit#3679`; der Betriebsvertrag steht in `docs/maintenance/Preset-and-Fleet-Operations-Lessons-Learned.md`. *Submit and activate `github/spec-kit` community catalog updates strictly one at a time. Complete the generated PR and issue before filing the next issue; for an existing queue, name only the next label candidate. Do not create new batch issues or parallel label requests.* - `autonomous-run-governance` v0.3.2 prio 70 ist Teil der Standard-Achtermatrix. Ein vollständiger autonomer Lauf bleibt ausdrücklich delegationspflichtig; die Installation allein erteilt weder Ausführungsberechtigung noch Remote-, Merge-, Bypass- oder Provider-Rechte und `LocalImplementation` bleibt Default. Dokumentations-, Status-, Schema- oder Evidence-Änderungen gelten erst dann als testfrei, wenn keine ausführbaren Validatoren die geänderten Pfade, Marker, Schemas oder Zustandswerte konsumieren. Vor autorisierten Commits wird der exakt beabsichtigte Kandidat mit `git diff --cached --check` und Statusabgleich geprüft; fremde Änderungen bleiben unberührt. Vor einem Merge wird jeder Acceptance-Gate dem tatsächlich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zugeordnet; grüne Namen oder ein Bypass ersetzen keinen technischen Nachweis. Bewusst pausierte Läufe werden als `PausedByUser` gespeichert und nur über `speckit.autonomous-resume` fortgesetzt; `speckit.autonomous-stop` wirkt kooperativ am nächsten sicheren Grenzpunkt, und ein gespeicherter Delivery-Modus ist keine aktuelle Berechtigung. Nach Preset- oder Governance-Drift werden neue zwingende Korrektheits-, Sicherheits-, Berechtigungs- und Evidenzregeln minimal mit akzeptierten Plan-, Task- und Checklist-Artefakten abgeglichen; reine Effizienzpräferenzen lösen keine rückwirkende Neugenerierung aus. Die lesbare Skill-Überschrift `Deliver` ist kein Run-State-Wert; für Remote-Closeout gelten ausschließlich `Publish`, `Review` oder `MergeAndSync`. - `parallel-autonomous-run-governance` v0.2.3 prio 80 ist Teil der Standard-Achtermatrix. Die Installation startet keine Kampagne und erteilt keine zusaetzlichen Remote-, Merge-, Bypass-, Abbruch-, Secret- oder Provider-Rechte. Kampagnen bleiben ausdruecklich delegationspflichtig, verwenden getrennte Worktrees und maximal drei gleichzeitig aktive Worker. Schema 1.1 erlaubt ein `runnerProfile` je Worker mit Kampagnen-Fallback; Modell und Reasoning-Stufe sind optionale, nicht geheime Metadaten und werden ohne Deklaration nicht erraten. Konsolidierung verlangt exakten Head, aktuelle Review- und Check-Evidenz, ist nach Teilmerges fortsetzbar und setzt `Completed` erst nach Synchronisation, manifestdeklarierten idempotenten Post-Merge-Aktionen und Abschlussvalidierung. diff --git a/scripts/templates/GEMINI.md.tmpl b/scripts/templates/GEMINI.md.tmpl index 3f21c3b..62f0ae7 100644 --- a/scripts/templates/GEMINI.md.tmpl +++ b/scripts/templates/GEMINI.md.tmpl @@ -195,6 +195,7 @@ Neue Lernreihen fuer Fachinformatiker*innen und weitere IT-Ausbildungsberufe wer - Optionale Intake-Presets: `intake-authoring-governance` v0.2.0 prio 64 und `intake-review-governance` v0.1.1 prio 65 bleiben ausserhalb der Standard-Achtermatrix. Die verwaltete Thorsten-Flotte waehlt beide ueber `intake-authoring-ten-governance-presets`; das bisherige Neunerprofil bleibt kompatibel verfuegbar. *Optional intake presets: Authoring v0.2.0 at priority 64 and Review v0.1.1 at priority 65 remain outside the standard eight.* - Intake Authoring trennt Create, Read, Update und logisches Delete, beschraenkt URL-Quellen auf oeffentliches HTTPS und publiziert mehrere Intakes erst nach einem vollstaendigen, ausdruecklich genehmigten Series-Vorschlag. Archive, Tombstones und Receipts bleiben hashgebunden. Review oder Ausfuehrung startet nie automatisch. *Intake Authoring separates CRUD, bounds public HTTPS sources, requires explicit series approval, and never starts downstream review or execution.* - Intake Review akzeptiert bei aktiver Projekt- oder Kampagnenpolicy nur aktuelle `Ready`- oder menschlich akzeptierte `ReadyWithAcceptedRisks`-Ergebnisse; Critical/High, offene materielle Fragen, Hash-Drift oder fehlende Worker-Coverage blockieren. Review und Status sind read-only, Repair benoetigt ausdrueckliche Aenderungsautoritaet. Series-Reviews verwenden Schema 1.1, binden den normalisierten Request-Hash und pruefen exakte Zielreihenfolge, explizite Roots sowie einen azyklischen Graphen; nicht belegbare Vorgaengerbeziehungen fuehren zu `NeedsClarification`. *Series reviews use schema 1.1, bind the normalized request hash, and verify exact target order, explicit roots, and an acyclic graph; unprovable predecessor relations result in `NeedsClarification`.* +- Intake Sequencing verwaltet nur Reihenfolge und Lifecycle bereits vorhandener Intakes. Create/Update/Delete benoetigen ausdrueckliche aktuelle Autoritaet; Read/Status/Next bleiben read-only. `next` meldet startfaehige Ziele oder konkrete Blocker und startet keine Folgeaktion. *Intake Sequencing manages only order and lifecycle, requires explicit write authority, and never starts downstream work.* - Community-Katalog-Einreichungen an `github/spec-kit` strikt einzeln erstellen und aktivieren: erst den erzeugten PR pruefen und mergen lassen sowie das Issue abschliessen, dann das naechste Issue einreichen. Bei einer bereits vorhandenen Warteschlange nur den naechsten Kandidaten fuer `preset-submission` benennen; keine neuen Batch-Issues oder parallelen Label-Anfragen. Grundlage ist der Maintainer-Hinweis in `github/spec-kit#3679`; der Betriebsvertrag steht in `docs/maintenance/Preset-and-Fleet-Operations-Lessons-Learned.md`. *Submit and activate `github/spec-kit` community catalog updates strictly one at a time. Complete the generated PR and issue before filing the next issue; for an existing queue, name only the next label candidate. Do not create new batch issues or parallel label requests.* - `autonomous-run-governance` v0.3.2 prio 70 ist Teil der Standard-Achtermatrix. Ein vollständiger autonomer Lauf bleibt ausdrücklich delegationspflichtig; die Installation allein erteilt weder Ausführungsberechtigung noch Remote-, Merge-, Bypass- oder Provider-Rechte und `LocalImplementation` bleibt Default. Dokumentations-, Status-, Schema- oder Evidence-Änderungen gelten erst dann als testfrei, wenn keine ausführbaren Validatoren die geänderten Pfade, Marker, Schemas oder Zustandswerte konsumieren. Vor autorisierten Commits wird der exakt beabsichtigte Kandidat mit `git diff --cached --check` und Statusabgleich geprüft; fremde Änderungen bleiben unberührt. Vor einem Merge wird jeder Acceptance-Gate dem tatsächlich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zugeordnet; grüne Namen oder ein Bypass ersetzen keinen technischen Nachweis. Bewusst pausierte Läufe werden als `PausedByUser` gespeichert und nur über `speckit.autonomous-resume` fortgesetzt; `speckit.autonomous-stop` wirkt kooperativ am nächsten sicheren Grenzpunkt, und ein gespeicherter Delivery-Modus ist keine aktuelle Berechtigung. Nach Preset- oder Governance-Drift werden neue zwingende Korrektheits-, Sicherheits-, Berechtigungs- und Evidenzregeln minimal mit akzeptierten Plan-, Task- und Checklist-Artefakten abgeglichen; reine Effizienzpräferenzen lösen keine rückwirkende Neugenerierung aus. Die lesbare Skill-Überschrift `Deliver` ist kein Run-State-Wert; für Remote-Closeout gelten ausschließlich `Publish`, `Review` oder `MergeAndSync`. - `parallel-autonomous-run-governance` v0.2.3 prio 80 ist Teil der Standard-Achtermatrix. Die Installation startet keine Kampagne und erteilt keine zusaetzlichen Remote-, Merge-, Bypass-, Abbruch-, Secret- oder Provider-Rechte. Kampagnen bleiben ausdruecklich delegationspflichtig, verwenden getrennte Worktrees und maximal drei gleichzeitig aktive Worker. Schema 1.1 erlaubt ein `runnerProfile` je Worker mit Kampagnen-Fallback; Modell und Reasoning-Stufe sind optionale, nicht geheime Metadaten und werden ohne Deklaration nicht erraten. Konsolidierung verlangt exakten Head, aktuelle Review- und Check-Evidenz, ist nach Teilmerges fortsetzbar und setzt `Completed` erst nach Synchronisation, manifestdeklarierten idempotenten Post-Merge-Aktionen und Abschlussvalidierung. diff --git a/scripts/templates/copilot-instructions.tmpl b/scripts/templates/copilot-instructions.tmpl index f1f98a9..bd3ea9f 100644 --- a/scripts/templates/copilot-instructions.tmpl +++ b/scripts/templates/copilot-instructions.tmpl @@ -192,6 +192,7 @@ Neue Lernreihen fuer Fachinformatiker*innen und weitere IT-Ausbildungsberufe wer - Optionale Intake-Presets: `intake-authoring-governance` v0.2.0 prio 64 und `intake-review-governance` v0.1.1 prio 65 bleiben ausserhalb der Standard-Achtermatrix. Die verwaltete Thorsten-Flotte waehlt beide ueber `intake-authoring-ten-governance-presets`; das bisherige Neunerprofil bleibt kompatibel verfuegbar. *Optional intake presets: Authoring v0.2.0 at priority 64 and Review v0.1.1 at priority 65 remain outside the standard eight.* - Intake Authoring trennt Create, Read, Update und logisches Delete, beschraenkt URL-Quellen auf oeffentliches HTTPS und publiziert mehrere Intakes erst nach einem vollstaendigen, ausdruecklich genehmigten Series-Vorschlag. Archive, Tombstones und Receipts bleiben hashgebunden. Review oder Ausfuehrung startet nie automatisch. *Intake Authoring separates CRUD, bounds public HTTPS sources, requires explicit series approval, and never starts downstream review or execution.* - Intake Review akzeptiert bei aktiver Projekt- oder Kampagnenpolicy nur aktuelle `Ready`- oder menschlich akzeptierte `ReadyWithAcceptedRisks`-Ergebnisse; Critical/High, offene materielle Fragen, Hash-Drift oder fehlende Worker-Coverage blockieren. Review und Status sind read-only, Repair benoetigt ausdrueckliche Aenderungsautoritaet. Series-Reviews verwenden Schema 1.1, binden den normalisierten Request-Hash und pruefen exakte Zielreihenfolge, explizite Roots sowie einen azyklischen Graphen; nicht belegbare Vorgaengerbeziehungen fuehren zu `NeedsClarification`. *Series reviews use schema 1.1, bind the normalized request hash, and verify exact target order, explicit roots, and an acyclic graph; unprovable predecessor relations result in `NeedsClarification`.* +- Intake Sequencing verwaltet nur Reihenfolge und Lifecycle bereits vorhandener Intakes. Create/Update/Delete benoetigen ausdrueckliche aktuelle Autoritaet; Read/Status/Next bleiben read-only. `next` meldet startfaehige Ziele oder konkrete Blocker und startet keine Folgeaktion. *Intake Sequencing manages only order and lifecycle, requires explicit write authority, and never starts downstream work.* - Community-Katalog-Einreichungen an `github/spec-kit` strikt einzeln erstellen und aktivieren: erst den erzeugten PR pruefen und mergen lassen sowie das Issue abschliessen, dann das naechste Issue einreichen. Bei einer bereits vorhandenen Warteschlange nur den naechsten Kandidaten fuer `preset-submission` benennen; keine neuen Batch-Issues oder parallelen Label-Anfragen. Grundlage ist der Maintainer-Hinweis in `github/spec-kit#3679`; der Betriebsvertrag steht in `docs/maintenance/Preset-and-Fleet-Operations-Lessons-Learned.md`. *Submit and activate `github/spec-kit` community catalog updates strictly one at a time. Complete the generated PR and issue before filing the next issue; for an existing queue, name only the next label candidate. Do not create new batch issues or parallel label requests.* - `autonomous-run-governance` v0.3.2 prio 70 ist Teil der Standard-Achtermatrix. Ein vollständiger autonomer Lauf bleibt ausdrücklich delegationspflichtig; die Installation allein erteilt weder Ausführungsberechtigung noch Remote-, Merge-, Bypass- oder Provider-Rechte und `LocalImplementation` bleibt Default. Dokumentations-, Status-, Schema- oder Evidence-Änderungen gelten erst dann als testfrei, wenn keine ausführbaren Validatoren die geänderten Pfade, Marker, Schemas oder Zustandswerte konsumieren. Vor autorisierten Commits wird der exakt beabsichtigte Kandidat mit `git diff --cached --check` und Statusabgleich geprüft; fremde Änderungen bleiben unberührt. Vor einem Merge wird jeder Acceptance-Gate dem tatsächlich ausgeführten Workflow, Job, Runner beziehungsweise der Plattform und dem Befehl zugeordnet; grüne Namen oder ein Bypass ersetzen keinen technischen Nachweis. Bewusst pausierte Läufe werden als `PausedByUser` gespeichert und nur über `speckit.autonomous-resume` fortgesetzt; `speckit.autonomous-stop` wirkt kooperativ am nächsten sicheren Grenzpunkt, und ein gespeicherter Delivery-Modus ist keine aktuelle Berechtigung. Nach Preset- oder Governance-Drift werden neue zwingende Korrektheits-, Sicherheits-, Berechtigungs- und Evidenzregeln minimal mit akzeptierten Plan-, Task- und Checklist-Artefakten abgeglichen; reine Effizienzpräferenzen lösen keine rückwirkende Neugenerierung aus. Die lesbare Skill-Überschrift `Deliver` ist kein Run-State-Wert; für Remote-Closeout gelten ausschließlich `Publish`, `Review` oder `MergeAndSync`. - `parallel-autonomous-run-governance` v0.2.3 prio 80 ist Teil der Standard-Achtermatrix. Die Installation startet keine Kampagne und erteilt keine zusaetzlichen Remote-, Merge-, Bypass-, Abbruch-, Secret- oder Provider-Rechte. Kampagnen bleiben ausdruecklich delegationspflichtig, verwenden getrennte Worktrees und maximal drei gleichzeitig aktive Worker. Schema 1.1 erlaubt ein `runnerProfile` je Worker mit Kampagnen-Fallback; Modell und Reasoning-Stufe sind optionale, nicht geheime Metadaten und werden ohne Deklaration nicht erraten. Konsolidierung verlangt exakten Head, aktuelle Review- und Check-Evidenz, ist nach Teilmerges fortsetzbar und setzt `Completed` erst nach Synchronisation, manifestdeklarierten idempotenten Post-Merge-Aktionen und Abschlussvalidierung. diff --git a/scripts/templates/speckit-workflow-section.md b/scripts/templates/speckit-workflow-section.md index 1a038b1..f38538d 100644 --- a/scripts/templates/speckit-workflow-section.md +++ b/scripts/templates/speckit-workflow-section.md @@ -33,14 +33,17 @@ Workspace-Familie ist: | `autonomous-run-governance` | Autonomous Run Governance | `v0.3.2` | `70` | | `parallel-autonomous-run-governance` | Parallel Autonomous Run Governance | `v0.2.3` | `80` | -Optional koennen `intake-authoring-governance` v0.2.0 mit Prioritaet `64` und -`intake-review-governance` v0.1.1 mit Prioritaet `65` zwischen Agent Parity und -Preset 7 installiert werden. Beide bleiben ausserhalb der Standard-Achtermatrix. +Optional koennen `intake-authoring-governance` v0.2.0 mit Prioritaet `64`, +`intake-review-governance` v0.1.1 mit Prioritaet `65` und +`intake-sequencing-governance` v0.1.0 mit Prioritaet `66` zwischen Agent Parity +und Preset 7 installiert werden. Alle drei bleiben ausserhalb der +Standard-Achtermatrix. Authoring erzeugt aus ausdruecklich benannten geordneten UTF-8-Quellen genau einen Intake und ein Receipt, startet aber keine Folgeaktion. Review prueft den -gespeicherten Intake unabhaengig. Das Registry-Profil -`intake-authoring-ten-governance-presets` waehlt beide; das bisherige -Neunerprofil bleibt kompatibel. Lernendenlaeufe bleiben separat +gespeicherten Intake unabhaengig. Sequencing verwaltet Reihenfolge, bindende +Abhaengigkeiten und naechste Kandidaten, startet aber keine Arbeit. Das +Registry-Profil `intake-sequencing-eleven-governance-presets` waehlt alle drei; +Neun- und Zehn-Preset-Profile bleiben kompatibel. Lernendenlaeufe bleiben separat beauftragungspflichtig. Series-Reviews verwenden Request und Result nach Schema 1.1. Der normalisierte Request-Hash, Zielrollen, exakte Reihenfolge, Roots und der azyklische @@ -169,13 +172,16 @@ workspace family is: | `autonomous-run-governance` | Autonomous Run Governance | `v0.3.2` | `70` | | `parallel-autonomous-run-governance` | Parallel Autonomous Run Governance | `v0.2.3` | `80` | -Optionally install `intake-authoring-governance` v0.2.0 at priority `64` and -`intake-review-governance` v0.1.1 at priority `65` between Agent Parity and -Preset 7. Both remain outside the standard eight. Authoring creates one intake +Optionally install `intake-authoring-governance` v0.2.0 at priority `64`, +`intake-review-governance` v0.1.1 at priority `65`, and +`intake-sequencing-governance` v0.1.0 at priority `66` between Agent Parity and +Preset 7. All three remain outside the standard eight. Authoring creates one intake and receipt from explicit ordered UTF-8 sources without starting a downstream -command. Review evaluates that intake independently. Registry profile -`intake-authoring-ten-governance-presets` selects both; the prior nine-preset -profile remains compatible. Learner runs still require explicit authorization. +command. Review evaluates that intake independently. Sequencing manages order, +binding dependencies, and next candidates without starting work. Registry +profile `intake-sequencing-eleven-governance-presets` selects all three; prior +nine- and ten-preset profiles remain compatible. Learner runs still require +explicit authorization. Series reviews use schema 1.1 for request and result. They jointly validate the normalized request hash, target roles, exact order, roots, and the acyclic predecessor graph; ambiguous relations result in `NeedsClarification`.