Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c2548ae
Update: adopt Trust 1 in project templates
0xLeif Jul 12, 2026
695ca94
fix(ci): fetch trusted SDD policy base
0xLeif Jul 12, 2026
a9a0734
chore(trust): adopt verified SDD lifecycle
0xLeif Jul 12, 2026
442c531
fix(ci): use native SDD verification command
0xLeif Jul 12, 2026
63db32c
Update: assign stable requirement IDs in place
0xLeif Jul 12, 2026
cf0c37e
Fix: address rollout review feedback
0xLeif Jul 12, 2026
2f5a7d6
fix(governance): track Claude SpecSync integration
0xLeif Jul 12, 2026
947f269
fix(ci): run non-recursive Fledge spec evidence
0xLeif Jul 12, 2026
de0cd81
fix(ci): avoid nested Fledge test execution
0xLeif Jul 12, 2026
79de4d6
fix(trust): avoid self-hosted lifecycle recursion
0xLeif Jul 12, 2026
c85a454
fix(governance): address rollout review gaps
0xLeif Jul 12, 2026
0eaccc1
fix(spec): use the true rollout merge base
0xLeif Jul 12, 2026
6d2bafe
fix(sdd): complete verified Fledge lifecycle
0xLeif Jul 13, 2026
738d738
fix(governance): close Fledge rollout review gaps
0xLeif Jul 13, 2026
57fb57a
fix(sdd): refresh final Fledge rollout evidence
0xLeif Jul 13, 2026
5b02de3
fix(trust): avoid recursive Fledge verification
0xLeif Jul 13, 2026
37ab5e8
fix(governance): close final Fledge rollout gaps
0xLeif Jul 13, 2026
7604b35
fix(ci): restore Cargo cache for governance gates
0xLeif Jul 13, 2026
9289bb9
fix(ci): align SpecSync build with verification profile
0xLeif Jul 13, 2026
e429294
fix(trust): exclude recursive self-check tests from governance lane
0xLeif Jul 13, 2026
ea62bf5
fix(sdd): renew final governance evidence
0xLeif Jul 13, 2026
d98db85
fix(governance): address final rollout review findings
0xLeif Jul 13, 2026
7c47bb9
fix(governance): close final template policy gaps
0xLeif Jul 13, 2026
abd4240
fix(governance): honor progressive provenance in Trust gate
0xLeif Jul 13, 2026
9e8bcec
fix(governance): enforce complete SDD lifecycle in CI
0xLeif Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .attest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"requireAttestation": true,
"requireTestsPassed": true
Comment thread
0xLeif marked this conversation as resolved.
}
3 changes: 3 additions & 0 deletions .augur.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[thresholds]
review = 35
block = 65
10 changes: 10 additions & 0 deletions .claude/commands/specsync/create-change.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
description: Create and guide a verified spec-sync SDD change through its deterministic interview
argument-hint: <change-description>
---

1. Run `specsync change new "$ARGUMENTS" --json`.
2. Read the returned `questions` array and interview the user one question at a time.
3. Record each answer with `specsync change answer <id> <question-id> <answer> --json`.
4. Continue until the question list is empty, then show the selected artifacts and next action.
5. Do not approve, implement, verify, accept, or archive until the corresponding human gate or work stage is reached.
40 changes: 40 additions & 0 deletions .claude/commands/specsync/create-spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
description: Scaffold a new spec-sync module spec from a module name or a natural-language feature description (full scaffold by default, or minimal with --minimal)
argument-hint: <module-name-or-description> [--minimal]
---

Create a new spec-sync module spec.

Arguments: `$ARGUMENTS`

1. Parse the arguments above. If they contain `--minimal` (in any position),
remove that flag and remember that minimal mode was requested. Preserve all
other text exactly; do not choose a module name yet.
2. Classify the complete remaining text. It will be one of:
- **A bare module name** — a short identifier like `auth-service` or
`billing`. Use it as-is.
- **A free-text feature description** — a sentence or phrase describing
what to build, e.g. `"I want a feature that lets users export their
data as CSV"`. In this case, invent a short, kebab-case module name that
captures the idea (e.g. `csv-export`). If the right name is ambiguous,
ask the user to confirm or rename it before continuing. Keep the full
description at hand — you'll use it in step 5.
3. If minimal mode was requested, run:
```
specsync new <module-name>
```
This creates a minimal spec only (no companion files).
4. Otherwise (default), run:
```
specsync scaffold <module-name>
```
This creates the spec, companion files (`tasks.md`, `requirements.md`,
`context.md`, `testing.md`, and `design.md` if `companions.design` is
enabled), a registry entry, and auto-detects related source files.
5. Open the newly created `specs/<module-name>/<module-name>.spec.md` and fill
in the `Purpose`, `Requirements`, and `Public API` sections. If a free-text
Comment on lines +34 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Target the real spec sections in create-spec

When an agent follows this create-spec workflow, these lines tell it to fill a Requirements section in the new .spec.md, but the configured required sections are Purpose, Public API, Invariants, Behavioral Examples, Error Cases, Dependencies, and Change Log, with acceptance criteria living in requirements.md. That misdirects free-text scaffolding toward a non-canonical section and can leave the actual contract sections as placeholders; update the agent command copies to name the real sections and companion file.

Useful? React with 👍 / 👎.

description was given in step 2, use it directly to draft these sections —
ask clarifying questions if it's underspecified, but do not leave the
sections as unfilled placeholder text. Do the same for `requirements.md`
(acceptance criteria) and `tasks.md` (initial task breakdown), if present.
6. Run `specsync check` to confirm the new spec passes validation.
75 changes: 75 additions & 0 deletions .claude/skills/spec-sync/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
name: spec-sync
description: Keep markdown module specs in specs/<module>/ synchronized with source code using spec-sync. Use this whenever creating, editing, or reviewing code in a module that has (or should have) a spec, or whenever the user mentions specs, spec-sync, companion files (tasks.md/requirements.md/context.md/testing.md/design.md), or asks to add/update a module's documentation.
---

# Spec-Sync Workflow

This project uses [spec-sync](https://github.com/CorvidLabs/spec-sync) for bidirectional spec-to-code validation. Specs live in `specs/<module>/<module>.spec.md`.

## Companion files

## Verified SDD change lifecycle (5.0)

For every meaningful source, test, public documentation, schema, or configuration change:

1. Run `specsync change new "<intent>" --json` and conduct the returned interview with the user.
2. Use `specsync change answer <id> <question-id> <answer> --json` until no questions remain.
3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable
`REQ-<module>-<number>` IDs, a normative SHALL statement, and acceptance criteria.
4. Ask the user for the definition approval, then run `specsync change approve <id>`.
5. Run `specsync change start <id>` before editing implementation code.
6. Keep tasks and artifacts current, then run `specsync change verify <id>`.
7. Present verification evidence and ask for closing approval. Only after explicit approval,
run `specsync change accept <id>`; archive separately with `specsync change archive <id>`.

Never invent or self-grant either human approval. If an approved definition changes, its digest
becomes stale and must be approved again. `specsync check` validates canonical specs plus approved
active deltas, requirement-to-test evidence, change coverage, and CI gates.

Each canonical spec may have policy-selected companion files. Read and update the ones present; do not create empty companions only for ceremony:

- **`tasks.md`** — Work items for this module. Check off tasks (`- [x]`) as you complete them. Add new tasks if you discover work needed.
- **`requirements.md`** — Acceptance criteria and user stories. These are permanent invariants, not tasks — do not check them off. Update if requirements change.
- **`context.md`** — Architectural decisions, key files, and current status. Update when you make design decisions or change what's in progress.
- **`testing.md`** — Test strategy: automated test locations, manual QA checklists, and edge cases/boundary conditions.
- **`design.md`** *(opt-in)* — Layout, component hierarchy, design tokens, and asset references. Present when `companions.design` is enabled in config.

## Before modifying any module

1. Read the relevant spec in `specs/<module>/<module>.spec.md`
2. Read whichever companion files are present (`requirements.md`, `tasks.md`, `context.md`, `testing.md`, `design.md`, or project-defined files)
3. After changes, run `specsync check` to verify specs still pass

## After completing work

1. Mark completed items in `tasks.md` — check off finished tasks, add new ones discovered
2. Update `context.md` — record decisions made, update current status
3. If requirements changed, update `requirements.md` acceptance criteria
4. If test coverage changed, update `testing.md` with new test files or edge cases
5. If UI/layout changed, update `design.md` with revised layout, components, or tokens

## Before creating a PR

Run `specsync check --strict` — all specs must pass with zero warnings.

## When adding new modules

Run `specsync scaffold <module-name>` to create a spec, companion files, a registry
entry, and auto-detected source files — or `specsync new <module-name>` for a
minimal spec-only draft. Complete the spec before writing code. The
`/specsync:create-spec` command (or tool-equivalent) runs this for you, and
accepts either a bare module name or a natural-language feature description
(e.g. `/specsync:create-spec "I want a feature that lets users export their
data as CSV"`) — pass a description and it will pick a module name and use
the description to draft the spec's Purpose and Requirements.

## Key commands

- `specsync check` — validate all specs against source code
- `specsync check --json` — machine-readable validation output
- `specsync coverage` — show which modules lack specs
- `specsync score` — quality score for each spec (0-100)
- `specsync scaffold <name>` — full scaffold: spec + companions + registry entry + source detection
- `specsync new <name>` — quick-create a minimal spec (add `--full` for companions)
- `specsync resolve --remote` — verify cross-project dependencies
75 changes: 75 additions & 0 deletions .codex/skills/spec-sync/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
name: spec-sync
description: Keep markdown module specs in specs/<module>/ synchronized with source code using spec-sync. Use this whenever creating, editing, or reviewing code in a module that has (or should have) a spec, or whenever the user mentions specs, spec-sync, companion files (tasks.md/requirements.md/context.md/testing.md/design.md), or asks to add/update a module's documentation.
---

# Spec-Sync Workflow

This project uses [spec-sync](https://github.com/CorvidLabs/spec-sync) for bidirectional spec-to-code validation. Specs live in `specs/<module>/<module>.spec.md`.

## Companion files

## Verified SDD change lifecycle (5.0)

For every meaningful source, test, public documentation, schema, or configuration change:

1. Run `specsync change new "<intent>" --json` and conduct the returned interview with the user.
2. Use `specsync change answer <id> <question-id> <answer> --json` until no questions remain.
3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable
`REQ-<module>-<number>` IDs, a normative SHALL statement, and acceptance criteria.
4. Ask the user for the definition approval, then run `specsync change approve <id>`.
5. Run `specsync change start <id>` before editing implementation code.
6. Keep tasks and artifacts current, then run `specsync change verify <id>`.
7. Present verification evidence and ask for closing approval. Only after explicit approval,
run `specsync change accept <id>`; archive separately with `specsync change archive <id>`.

Never invent or self-grant either human approval. If an approved definition changes, its digest
becomes stale and must be approved again. `specsync check` validates canonical specs plus approved
active deltas, requirement-to-test evidence, change coverage, and CI gates.

Each canonical spec may have policy-selected companion files. Read and update the ones present; do not create empty companions only for ceremony:

- **`tasks.md`** — Work items for this module. Check off tasks (`- [x]`) as you complete them. Add new tasks if you discover work needed.
- **`requirements.md`** — Acceptance criteria and user stories. These are permanent invariants, not tasks — do not check them off. Update if requirements change.
- **`context.md`** — Architectural decisions, key files, and current status. Update when you make design decisions or change what's in progress.
- **`testing.md`** — Test strategy: automated test locations, manual QA checklists, and edge cases/boundary conditions.
- **`design.md`** *(opt-in)* — Layout, component hierarchy, design tokens, and asset references. Present when `companions.design` is enabled in config.

## Before modifying any module

1. Read the relevant spec in `specs/<module>/<module>.spec.md`
2. Read whichever companion files are present (`requirements.md`, `tasks.md`, `context.md`, `testing.md`, `design.md`, or project-defined files)
3. After changes, run `specsync check` to verify specs still pass

## After completing work

1. Mark completed items in `tasks.md` — check off finished tasks, add new ones discovered
2. Update `context.md` — record decisions made, update current status
3. If requirements changed, update `requirements.md` acceptance criteria
4. If test coverage changed, update `testing.md` with new test files or edge cases
5. If UI/layout changed, update `design.md` with revised layout, components, or tokens

## Before creating a PR

Run `specsync check --strict` — all specs must pass with zero warnings.

## When adding new modules

Run `specsync scaffold <module-name>` to create a spec, companion files, a registry
entry, and auto-detected source files — or `specsync new <module-name>` for a
minimal spec-only draft. Complete the spec before writing code. The
`/specsync:create-spec` command (or tool-equivalent) runs this for you, and
accepts either a bare module name or a natural-language feature description
(e.g. `/specsync:create-spec "I want a feature that lets users export their
data as CSV"`) — pass a description and it will pick a module name and use
the description to draft the spec's Purpose and Requirements.

## Key commands

- `specsync check` — validate all specs against source code
- `specsync check --json` — machine-readable validation output
- `specsync coverage` — show which modules lack specs
- `specsync score` — quality score for each spec (0-100)
- `specsync scaffold <name>` — full scaffold: spec + companions + registry entry + source detection
- `specsync new <name>` — quick-create a minimal spec (add `--full` for companions)
- `specsync resolve --remote` — verify cross-project dependencies
9 changes: 9 additions & 0 deletions .cursor/commands/specsync-create-change.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Create a verified spec-sync SDD change.

Arguments: $ARGUMENTS

1. Run `specsync change new "$ARGUMENTS" --json`.
2. Read the returned `questions` array and interview the user one question at a time.
3. Record each answer with `specsync change answer <id> <question-id> <answer> --json`.
4. Continue until the question list is empty, then show the selected artifacts and next action.
5. Do not approve, implement, verify, accept, or archive until the corresponding human gate or work stage is reached.
34 changes: 34 additions & 0 deletions .cursor/commands/specsync-create-spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Create a new spec-sync module spec.

Arguments: $ARGUMENTS

1. Remove `--minimal` wherever it appears and remember that minimal mode was
requested. Preserve the complete remaining text; do not tokenize it yet.
2. Classify the complete remaining text:
- **A bare module name** — a short identifier like `auth-service` or
`billing`, matching `^[A-Za-z0-9][A-Za-z0-9._-]*$`. Use it as-is.
- **A free-text feature description** — a sentence or phrase describing
what to build, e.g. `"I want a feature that lets users export their
data as CSV"`. In this case, invent a short, kebab-case module name that
captures the idea (e.g. `csv-export`). If the right name is ambiguous,
ask the user to confirm or rename it before continuing. Keep the full
description at hand — you'll use it in step 5.
3. If minimal mode was requested, run:
```
specsync new <module-name>
```
This creates a minimal spec only (no companion files).
4. Otherwise (default), run:
```
specsync scaffold <module-name>
```
This creates the spec, companion files (`tasks.md`, `requirements.md`,
`context.md`, `testing.md`, and `design.md` if `companions.design` is
enabled), a registry entry, and auto-detects related source files.
5. Open the newly created `specs/<module-name>/<module-name>.spec.md` and fill
in the `Purpose`, `Requirements`, and `Public API` sections. If a free-text
description was given in step 2, use it directly to draft these sections —
ask clarifying questions if it's underspecified, but do not leave the
sections as unfilled placeholder text. Do the same for `requirements.md`
(acceptance criteria) and `tasks.md` (initial task breakdown), if present.
6. Run `specsync check` to confirm the new spec passes validation.
75 changes: 75 additions & 0 deletions .cursor/skills/spec-sync/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
name: spec-sync
description: Keep markdown module specs in specs/<module>/ synchronized with source code using spec-sync. Use this whenever creating, editing, or reviewing code in a module that has (or should have) a spec, or whenever the user mentions specs, spec-sync, companion files (tasks.md/requirements.md/context.md/testing.md/design.md), or asks to add/update a module's documentation.
---

# Spec-Sync Workflow

This project uses [spec-sync](https://github.com/CorvidLabs/spec-sync) for bidirectional spec-to-code validation. Specs live in `specs/<module>/<module>.spec.md`.

## Companion files

## Verified SDD change lifecycle (5.0)

For every meaningful source, test, public documentation, schema, or configuration change:

1. Run `specsync change new "<intent>" --json` and conduct the returned interview with the user.
2. Use `specsync change answer <id> <question-id> <answer> --json` until no questions remain.
3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable
`REQ-<module>-<number>` IDs, a normative SHALL statement, and acceptance criteria.
4. Ask the user for the definition approval, then run `specsync change approve <id>`.
5. Run `specsync change start <id>` before editing implementation code.
6. Keep tasks and artifacts current, then run `specsync change verify <id>`.
7. Present verification evidence and ask for closing approval. Only after explicit approval,
run `specsync change accept <id>`; archive separately with `specsync change archive <id>`.

Never invent or self-grant either human approval. If an approved definition changes, its digest
becomes stale and must be approved again. `specsync check` validates canonical specs plus approved
active deltas, requirement-to-test evidence, change coverage, and CI gates.

Each canonical spec may have policy-selected companion files. Read and update the ones present; do not create empty companions only for ceremony:

- **`tasks.md`** — Work items for this module. Check off tasks (`- [x]`) as you complete them. Add new tasks if you discover work needed.
- **`requirements.md`** — Acceptance criteria and user stories. These are permanent invariants, not tasks — do not check them off. Update if requirements change.
- **`context.md`** — Architectural decisions, key files, and current status. Update when you make design decisions or change what's in progress.
- **`testing.md`** — Test strategy: automated test locations, manual QA checklists, and edge cases/boundary conditions.
- **`design.md`** *(opt-in)* — Layout, component hierarchy, design tokens, and asset references. Present when `companions.design` is enabled in config.

## Before modifying any module

1. Read the relevant spec in `specs/<module>/<module>.spec.md`
2. Read whichever companion files are present (`requirements.md`, `tasks.md`, `context.md`, `testing.md`, `design.md`, or project-defined files)
3. After changes, run `specsync check` to verify specs still pass

## After completing work

1. Mark completed items in `tasks.md` — check off finished tasks, add new ones discovered
2. Update `context.md` — record decisions made, update current status
3. If requirements changed, update `requirements.md` acceptance criteria
4. If test coverage changed, update `testing.md` with new test files or edge cases
5. If UI/layout changed, update `design.md` with revised layout, components, or tokens

## Before creating a PR

Run `specsync check --strict` — all specs must pass with zero warnings.

## When adding new modules

Run `specsync scaffold <module-name>` to create a spec, companion files, a registry
entry, and auto-detected source files — or `specsync new <module-name>` for a
minimal spec-only draft. Complete the spec before writing code. The
`/specsync:create-spec` command (or tool-equivalent) runs this for you, and
accepts either a bare module name or a natural-language feature description
(e.g. `/specsync:create-spec "I want a feature that lets users export their
data as CSV"`) — pass a description and it will pick a module name and use
the description to draft the spec's Purpose and Requirements.

## Key commands

- `specsync check` — validate all specs against source code
- `specsync check --json` — machine-readable validation output
- `specsync coverage` — show which modules lack specs
- `specsync score` — quality score for each spec (0-100)
- `specsync scaffold <name>` — full scaffold: spec + companions + registry entry + source detection
- `specsync new <name>` — quick-create a minimal spec (add `--full` for companions)
- `specsync resolve --remote` — verify cross-project dependencies
11 changes: 11 additions & 0 deletions .gemini/commands/specsync/create-change.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
description = "Create and guide a verified spec-sync SDD change through its deterministic interview"

prompt = """
Arguments: {{args}}

1. Run `specsync change new "{{args}}" --json`.
2. Read the returned `questions` array and interview the user one question at a time.
3. Record each answer with `specsync change answer <id> <question-id> <answer> --json`.
4. Continue until the question list is empty, then show the selected artifacts and next action.
5. Do not approve, implement, verify, accept, or archive until the corresponding human gate or work stage is reached.
"""
Loading
Loading