diff --git a/.attest.json b/.attest.json new file mode 100644 index 0000000..ba4a063 --- /dev/null +++ b/.attest.json @@ -0,0 +1,4 @@ +{ + "requireAttestation": true, + "requireTestsPassed": true +} diff --git a/.augur.toml b/.augur.toml new file mode 100644 index 0000000..031b459 --- /dev/null +++ b/.augur.toml @@ -0,0 +1,3 @@ +[thresholds] +review = 35 +block = 65 diff --git a/.claude/commands/specsync/create-change.md b/.claude/commands/specsync/create-change.md new file mode 100644 index 0000000..04707cc --- /dev/null +++ b/.claude/commands/specsync/create-change.md @@ -0,0 +1,10 @@ +--- +description: Create and guide a verified spec-sync SDD change through its deterministic interview +argument-hint: +--- + +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 --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. diff --git a/.claude/commands/specsync/create-spec.md b/.claude/commands/specsync/create-spec.md new file mode 100644 index 0000000..a424e76 --- /dev/null +++ b/.claude/commands/specsync/create-spec.md @@ -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: [--minimal] +--- + +Create a new spec-sync module spec. + +Arguments: `$ARGUMENTS` + +1. Parse the arguments above: the first whitespace-separated token is the + module name. If the arguments also contain `--minimal` (in any position), + remove it and remember that minimal mode was requested. +2. Look at whatever text remains. 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 + ``` + This creates a minimal spec only (no companion files). +4. Otherwise (default), run: + ``` + specsync scaffold + ``` + 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//.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. diff --git a/.claude/skills/spec-sync/SKILL.md b/.claude/skills/spec-sync/SKILL.md new file mode 100644 index 0000000..262c494 --- /dev/null +++ b/.claude/skills/spec-sync/SKILL.md @@ -0,0 +1,73 @@ +--- +name: spec-sync +description: Keep markdown module specs in specs// 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//.spec.md`. + +## Verified SDD change lifecycle (5.0) + +For every meaningful source, test, public documentation, schema, or configuration change: + +1. Run `specsync change new "" --json` and conduct the returned interview with the user. +2. Use `specsync change answer --json` until no questions remain. +3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable + `REQ--` IDs, a normative SHALL statement, and acceptance criteria. +4. Ask the user for the definition approval, then run `specsync change approve `. +5. Run `specsync change start ` before editing implementation code. +6. Keep tasks and artifacts current, then run `specsync change verify `. +7. Present verification evidence and ask for closing approval. Only after explicit approval, + run `specsync change accept `; archive separately with `specsync change archive `. + +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//.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 ` to create a spec, companion files, a registry +entry, and auto-detected source files — or `specsync new ` 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 ` — full scaffold: spec + companions + registry entry + source detection +- `specsync new ` — quick-create a minimal spec (add `--full` for companions) +- `specsync resolve --remote` — verify cross-project dependencies diff --git a/.codex/skills/spec-sync/SKILL.md b/.codex/skills/spec-sync/SKILL.md new file mode 100644 index 0000000..262c494 --- /dev/null +++ b/.codex/skills/spec-sync/SKILL.md @@ -0,0 +1,73 @@ +--- +name: spec-sync +description: Keep markdown module specs in specs// 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//.spec.md`. + +## Verified SDD change lifecycle (5.0) + +For every meaningful source, test, public documentation, schema, or configuration change: + +1. Run `specsync change new "" --json` and conduct the returned interview with the user. +2. Use `specsync change answer --json` until no questions remain. +3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable + `REQ--` IDs, a normative SHALL statement, and acceptance criteria. +4. Ask the user for the definition approval, then run `specsync change approve `. +5. Run `specsync change start ` before editing implementation code. +6. Keep tasks and artifacts current, then run `specsync change verify `. +7. Present verification evidence and ask for closing approval. Only after explicit approval, + run `specsync change accept `; archive separately with `specsync change archive `. + +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//.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 ` to create a spec, companion files, a registry +entry, and auto-detected source files — or `specsync new ` 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 ` — full scaffold: spec + companions + registry entry + source detection +- `specsync new ` — quick-create a minimal spec (add `--full` for companions) +- `specsync resolve --remote` — verify cross-project dependencies diff --git a/.cursor/commands/specsync-create-change.md b/.cursor/commands/specsync-create-change.md new file mode 100644 index 0000000..49402f3 --- /dev/null +++ b/.cursor/commands/specsync-create-change.md @@ -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 --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. diff --git a/.cursor/commands/specsync-create-spec.md b/.cursor/commands/specsync-create-spec.md new file mode 100644 index 0000000..0f20b4c --- /dev/null +++ b/.cursor/commands/specsync-create-spec.md @@ -0,0 +1,35 @@ +Create a new spec-sync module spec. + +Arguments: $ARGUMENTS + +1. Parse the arguments above: the first whitespace-separated token is the + module name. If the arguments also contain `--minimal` (in any position), + remove it and remember that minimal mode was requested. +2. Look at whatever text remains. 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 + ``` + This creates a minimal spec only (no companion files). +4. Otherwise (default), run: + ``` + specsync scaffold + ``` + 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//.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. diff --git a/.cursor/skills/spec-sync/SKILL.md b/.cursor/skills/spec-sync/SKILL.md new file mode 100644 index 0000000..262c494 --- /dev/null +++ b/.cursor/skills/spec-sync/SKILL.md @@ -0,0 +1,73 @@ +--- +name: spec-sync +description: Keep markdown module specs in specs// 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//.spec.md`. + +## Verified SDD change lifecycle (5.0) + +For every meaningful source, test, public documentation, schema, or configuration change: + +1. Run `specsync change new "" --json` and conduct the returned interview with the user. +2. Use `specsync change answer --json` until no questions remain. +3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable + `REQ--` IDs, a normative SHALL statement, and acceptance criteria. +4. Ask the user for the definition approval, then run `specsync change approve `. +5. Run `specsync change start ` before editing implementation code. +6. Keep tasks and artifacts current, then run `specsync change verify `. +7. Present verification evidence and ask for closing approval. Only after explicit approval, + run `specsync change accept `; archive separately with `specsync change archive `. + +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//.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 ` to create a spec, companion files, a registry +entry, and auto-detected source files — or `specsync new ` 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 ` — full scaffold: spec + companions + registry entry + source detection +- `specsync new ` — quick-create a minimal spec (add `--full` for companions) +- `specsync resolve --remote` — verify cross-project dependencies diff --git a/.gemini/commands/specsync/create-change.toml b/.gemini/commands/specsync/create-change.toml new file mode 100644 index 0000000..b4b7de6 --- /dev/null +++ b/.gemini/commands/specsync/create-change.toml @@ -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 "$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 --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. +""" diff --git a/.gemini/commands/specsync/create-spec.toml b/.gemini/commands/specsync/create-spec.toml new file mode 100644 index 0000000..73789f1 --- /dev/null +++ b/.gemini/commands/specsync/create-spec.toml @@ -0,0 +1,35 @@ +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)" + +prompt = """ +Create a new spec-sync module spec. + +Arguments: {{args}} + +1. Parse the arguments above: the first whitespace-separated token is the + module name. If the arguments also contain --minimal (in any position), + remove it and remember that minimal mode was requested. +2. Look at whatever text remains. 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 + This creates a minimal spec only (no companion files). +4. Otherwise (default), run: + specsync scaffold + 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//.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. +""" diff --git a/.gemini/skills/spec-sync/SKILL.md b/.gemini/skills/spec-sync/SKILL.md new file mode 100644 index 0000000..262c494 --- /dev/null +++ b/.gemini/skills/spec-sync/SKILL.md @@ -0,0 +1,73 @@ +--- +name: spec-sync +description: Keep markdown module specs in specs// 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//.spec.md`. + +## Verified SDD change lifecycle (5.0) + +For every meaningful source, test, public documentation, schema, or configuration change: + +1. Run `specsync change new "" --json` and conduct the returned interview with the user. +2. Use `specsync change answer --json` until no questions remain. +3. Complete the adaptively selected artifacts and semantic deltas. Requirements use stable + `REQ--` IDs, a normative SHALL statement, and acceptance criteria. +4. Ask the user for the definition approval, then run `specsync change approve `. +5. Run `specsync change start ` before editing implementation code. +6. Keep tasks and artifacts current, then run `specsync change verify `. +7. Present verification evidence and ask for closing approval. Only after explicit approval, + run `specsync change accept `; archive separately with `specsync change archive `. + +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//.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 ` to create a spec, companion files, a registry +entry, and auto-detected source files — or `specsync new ` 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 ` — full scaffold: spec + companions + registry entry + source detection +- `specsync new ` — quick-create a minimal spec (add `--full` for companions) +- `specsync resolve --remote` — verify cross-project dependencies diff --git a/.github/workflows/trust.yml b/.github/workflows/trust.yml new file mode 100644 index 0000000..1e5e560 --- /dev/null +++ b/.github/workflows/trust.yml @@ -0,0 +1,25 @@ +name: trust + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +jobs: + trust: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + - uses: dtolnay/rust-toolchain@stable + with: + components: clippy, rustfmt + - uses: Swatinem/rust-cache@v2 + - name: CorvidLabs Trust gate + id: trust + uses: CorvidLabs/trust@9d32b5786d2e9e4d39fc581c0091c721ee3d4226 # v1.0.0 diff --git a/.specsync/.gitignore b/.specsync/.gitignore new file mode 100644 index 0000000..a655086 --- /dev/null +++ b/.specsync/.gitignore @@ -0,0 +1,3 @@ +backup-3x/ +config.local.toml +hashes.json diff --git a/.specsync/adoption-report.json b/.specsync/adoption-report.json new file mode 100644 index 0000000..766823b --- /dev/null +++ b/.specsync/adoption-report.json @@ -0,0 +1,9 @@ +{ + "bootstrap_policy": { + "base_commit": "5c17d30b325361e3ebb1322a649b007ea96befab", + "digest": "60f4daa45898deb8dd8e2e13c1b50cea62ece0d84fb8e188c29b74668c0f2bc6", + "path": ".specsync/sdd.json" + }, + "generated_at": 1783883239, + "requirements_needing_ids": [] +} diff --git a/.specsync/change.lock b/.specsync/change.lock new file mode 100644 index 0000000..e69de29 diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/approvals.json b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/approvals.json new file mode 100644 index 0000000..8e9484b --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/approvals.json @@ -0,0 +1,32 @@ +{ + "approvals": [ + { + "gate": "definition", + "actor": "user:0xLeif", + "timestamp": 1783954477, + "digest": "e69f57110c80ccfdce59c694326f289e6fb22a69616a0585a715eaed4267dc16", + "note": "Definition approved after exact requirement-evidence and native-lane audit; unrelated formatting changes excluded." + }, + { + "gate": "definition", + "actor": "user:0xLeif", + "timestamp": 1783954651, + "digest": "953beffed36c189aff1170a1d1e80f7d2a0c312abb562f983c435847a929f5e1", + "note": "Fresh definition approval after the authorized truthful circular-task rewrite; no hosted or closing outcome is claimed." + }, + { + "gate": "definition", + "actor": "user:0xLeif", + "timestamp": 1783954812, + "digest": "19b3688b4664e25d690eb57fd370ce34377f613d0b7386be3b51602a87eace23", + "note": "Fresh definition approval after exact requirement-ID evidence mapping was added at the committed implementation head." + }, + { + "gate": "acceptance", + "actor": "user:0xLeif", + "timestamp": 1783954971, + "digest": "818dcca7924da28a7e9203c76bee9d167321eaeb3fe8b0c2835da1e2beec9368", + "note": "Closing approval recorded after successful native verification and strict SpecSync validation at the committed evidence head." + } + ] +} diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/change.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/change.md new file mode 100644 index 0000000..78776cc --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/change.md @@ -0,0 +1,27 @@ +--- +id: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +state: accepted +type: migration +base_commit: 5c17d30b325361e3ebb1322a649b007ea96befab +--- + +# Adopt SpecSync 5.0.1 and Trust 1.0.0 governance for the Standup Fledge plugin + +## Intent + +Adopt SpecSync 5.0.1 and Trust 1.0.0 governance for the Standup Fledge plugin + +## Affected Canonical Specs + +- `standup` + +## Acceptance Criteria + +- SpecSync strict coverage is 100% and all four agent integrations are installed. +- Trust doctor and verification pass. +- Formatting, Clippy, 27 aggregation/date/prompt tests, release build, and help smoke remain green. +- Existing cross-platform hosted builds remain green. + +## No-spec Rationale + +Not applicable diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/context.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/context.md new file mode 100644 index 0000000..b5e724c --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/context.md @@ -0,0 +1,8 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: context +--- + +# Context + +Standup is a cross-platform Rust Fledge plugin that aggregates Git activity from the current repository, multiple repositories, or GitHub-wide history. It can emit deterministic raw output or delegate narration to Fledge Ask. The repository already validates Linux, macOS, and Windows builds and publishes documentation through Pages, but it does not yet use the SpecSync 5 lifecycle or the unified Trust gate. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/deltas/standup.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/deltas/standup.md new file mode 100644 index 0000000..f9dd20b --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/deltas/standup.md @@ -0,0 +1,13 @@ +## MODIFIED +### SPEC SECTION Change Log +| Version | Date | Changes | +|---------|------|---------| +| 1 | 2026-07-12 | Document existing local, multi-repository, GitHub-wide, raw, and narrated standup behavior for SpecSync 5 adoption. | +| 2 | 2026-07-13 | Reconciled existing prompt, scope, and date documentation with stable requirement IDs for SpecSync 5.0.1 governance; runtime behavior is unchanged. | + +### REQUIREMENT REQ-standup-001 +Single-repository scope SHALL aggregate the selected time window and author, with optional diff statistics. + +Acceptance Criteria +- Existing unit tests verify the prompt includes the selected scope and window, includes author context when supplied, and includes diff statistics only when present. + diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/design.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/design.md new file mode 100644 index 0000000..c330478 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/design.md @@ -0,0 +1,8 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: design +--- + +# Design + +Add an active canonical Standup specification with stable requirement IDs and 100% mapping of `src/main.rs`. Adopt the SpecSync 5.0.1 SDD workspace and all four agent integrations. Define one Fledge verification lane for formatting, Clippy, tests, release build, and help smoke coverage, then compose it through Trust 1.0.0 with blocking risk and progressive provenance. Keep release, cross-platform, and Pages workflows independent, and pin the consumer action to the immutable Trust release commit. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/docs.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/docs.md new file mode 100644 index 0000000..9992b19 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/docs.md @@ -0,0 +1,8 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: docs +--- + +# Docs + +The canonical specification documents existing user-visible behavior and failure cases. Agent instruction files expose the SpecSync workflow to Claude, Cursor, Codex, and Gemini. No public command or API documentation changes because this migration does not alter Standup behavior. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/plan.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/plan.md new file mode 100644 index 0000000..5f2fe70 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/plan.md @@ -0,0 +1,12 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: plan +--- + +# Plan + +1. Record the current Standup behavior in an active canonical specification. +2. Adopt the SpecSync 5.0.1 lifecycle and install Claude, Cursor, Codex, and Gemini integrations. +3. Define the native Fledge lane and standard Trust policy. +4. Add the immutable Trust pull-request gate while preserving specialized workflows. +5. Validate strict coverage, agent status, Trust health, and all native checks. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/research.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/research.md new file mode 100644 index 0000000..2565789 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/research.md @@ -0,0 +1,8 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: research +--- + +# Research + +The existing suite contains 27 deterministic tests covering aggregation, date handling, scope selection, author filtering, prompt construction, and raw output. Existing CI builds on Linux, macOS, and Windows. Live GitHub access and AI narration are external integrations, so the blocking local lane verifies their deterministic input and orchestration without requiring credentials or network access. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/state.json b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/state.json new file mode 100644 index 0000000..41813b1 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/state.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "id": "CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin", + "slug": "adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin", + "title": "Adopt SpecSync 5.0.1 and Trust 1.0.0 governance for the Standup Fledge plugin", + "description": "Adopt SpecSync 5.0.1 and Trust 1.0.0 governance for the Standup Fledge plugin", + "kind": "migration", + "state": "accepted", + "base_commit": "5c17d30b325361e3ebb1322a649b007ea96befab", + "created_at": 1783883311, + "updated_at": 1783954971, + "affected_specs": [ + "standup" + ], + "affected_paths": [ + "src/", + "Cargo.toml", + "fledge.toml", + "plugin.toml", + ".github/", + ".specsync/", + "specs/", + ".trust.toml" + ], + "no_spec_change": false, + "no_spec_change_rationale": null, + "acceptance_criteria": [ + "SpecSync strict coverage is 100% and all four agent integrations are installed.", + "Trust doctor and verification pass.", + "Formatting, Clippy, 27 aggregation/date/prompt tests, release build, and help smoke remain green.", + "Existing cross-platform hosted builds remain green." + ], + "selected_artifacts": [ + "context", + "research", + "design", + "plan", + "tasks", + "testing", + "docs" + ], + "dependencies": [], + "answers": { + "architecture_risk": "yes", + "public_contract": "no" + } +} diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/tasks.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/tasks.md new file mode 100644 index 0000000..6af08a5 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/tasks.md @@ -0,0 +1,15 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: tasks +--- + +# Tasks + +- [x] Draft the Standup specification and stable requirement companions. +- [x] Adopt SpecSync 5.0.1 and install all four integrations. +- [x] Add Fledge, Trust, Augur, and Attest configuration. +- [x] Add the immutable unified Trust workflow. +- [x] Run formatting, Clippy, 27 tests, release build, and help smoke validation locally. +- [x] Prepare complete lifecycle artifacts for the recorded definition approval and active governed lifecycle. +- [x] Configure strict SpecSync and full Trust verification for the completed implementation. +- [x] Configure hosted Linux, macOS, and Windows checks. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/testing.md b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/testing.md new file mode 100644 index 0000000..7086474 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/testing.md @@ -0,0 +1,10 @@ +--- +change: CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin +artifact: testing +--- + +# Testing + +Run `specsync check --strict --require-coverage 100 --force`, `specsync agents status`, `fledge trust doctor`, and `fledge lanes run verify`. The native lane must pass Rustfmt, Clippy with warnings denied, all 27 tests, a release build, and the compiled plugin help smoke test. Hosted checks must retain the existing Linux, macOS, and Windows coverage. + +The prompt scope, author, commit, and diff-stat unit cases provide command evidence for REQ-standup-001. diff --git a/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/verification.json b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/verification.json new file mode 100644 index 0000000..795c6e2 --- /dev/null +++ b/.specsync/changes/CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin/verification.json @@ -0,0 +1,18 @@ +{ + "timestamp": 1783954926, + "commit": "828044eba2fba5bd6435794cf9f3aff24d28cae7", + "contract_digest": "19b3688b4664e25d690eb57fd370ce34377f613d0b7386be3b51602a87eace23", + "workspace_digest": "0d8c0945e3e67294b0bbe418d7c8cbd005ff857e876f04164ecc774b36a4f0d2", + "acceptance_input_digest": "d1995d461630b05fc7e2293c500b440ff811669e109061efd38f920ad4b426f0", + "passed": true, + "commands": [ + { + "command": "fledge lanes run verify", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-standup-001" + ] +} diff --git a/.specsync/config.toml b/.specsync/config.toml new file mode 100644 index 0000000..a470655 --- /dev/null +++ b/.specsync/config.toml @@ -0,0 +1,12 @@ +# SpecSync 5 configuration +# Docs: https://github.com/CorvidLabs/spec-sync + +specs_dir = "specs" +source_dirs = ["src"] +exclude_dirs = [] +exclude_patterns = [] +required_sections = ["Purpose", "Public API", "Invariants", "Behavioral Examples", "Error Cases", "Dependencies", "Change Log"] +enforcement = "strict" + +[lifecycle] +track_history = false diff --git a/.specsync/registry.toml b/.specsync/registry.toml new file mode 100644 index 0000000..3eb2fd0 --- /dev/null +++ b/.specsync/registry.toml @@ -0,0 +1,5 @@ +[registry] +name = "fledge-plugin-standup-trust-wave6" + +[specs] +standup = "specs/standup/standup.spec.md" diff --git a/.specsync/sdd.json b/.specsync/sdd.json new file mode 100644 index 0000000..b0e135b --- /dev/null +++ b/.specsync/sdd.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "enabled": true, + "require_change_for_meaningful_files": true, + "meaningful_paths": [ + "src/", + "tests/", + "site/", + ".github/", + "Cargo.toml", + "Cargo.lock", + "action.yml", + "package.json", + "bun.lock", + "package-lock.json", + "pnpm-lock.yaml", + "yarn.lock", + "Package.swift", + "Package.resolved", + "go.mod", + "go.sum", + "pyproject.toml", + "uv.lock", + "requirements.txt", + ".specsync/sdd.json", + ".specsync/config.toml", + ".specsync/config.json", + ".specsync/version" + ], + "ignored_paths": [ + ".specsync/", + "specs/" + ], + "verification_commands": [ + "fledge lanes run verify" + ], + "custom_artifacts": {}, + "principles_file": null +} diff --git a/.specsync/version b/.specsync/version new file mode 100644 index 0000000..6b244dc --- /dev/null +++ b/.specsync/version @@ -0,0 +1 @@ +5.0.1 diff --git a/.trust.toml b/.trust.toml new file mode 100644 index 0000000..12e0013 --- /dev/null +++ b/.trust.toml @@ -0,0 +1,22 @@ +schema_version = 1 +profile = "standard" + +[lifecycle] +command = ["fledge", "lanes", "run", "verify"] + +[contract] +enabled = true +require_coverage = 100 +skip_reason = "" + +[risk] +threshold = "block" + +[provenance] +mode = "soft" +policy = ".attest.json" +skip_reason = "" + +[atlas] +enabled = false +skip_reason = "Standalone Pages publication remains independently managed" diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..3da08a2 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,12 @@ + +## CorvidLabs trust toolchain + +This repository uses one trust gate. Every session must use it and must not bypass or weaken it. + +- Run `fledge trust verify` before calling a change complete. +- Keep module specs synchronized with implementation changes. +- Treat an Augur block verdict as a hard stop that must be surfaced and de-risked. +- Record and verify provenance with Attest after the repository's verification lane passes. +- Keep generated trust configuration and this managed block in place. + + diff --git a/fledge.toml b/fledge.toml new file mode 100644 index 0000000..8223dd1 --- /dev/null +++ b/fledge.toml @@ -0,0 +1,11 @@ +# fledge.toml — project task definitions +[tasks] +fmt = "cargo fmt --check" +lint = "cargo clippy -- -D warnings" +test = "cargo test" +build = "cargo build --release" +smoke = "./target/release/fledge-standup --help >/dev/null" + +[lanes.verify] +description = "Format, lint, test, build, and smoke-test the standup plugin" +steps = ["fmt", "lint", "test", "build", "smoke"] diff --git a/specs/standup/context.md b/specs/standup/context.md new file mode 100644 index 0000000..9cd9da4 --- /dev/null +++ b/specs/standup/context.md @@ -0,0 +1,17 @@ +--- +spec: standup.spec.md +--- + +## Context + +This Rust replacement removes the previous Bash script's Python and jq requirements while keeping the same Fledge Ask composition model. + +## Related Modules + +- Git and GitHub CLI commit history. +- Fledge Ask and AI configuration. + +## Design Decisions + +- Support raw output so aggregation remains useful and testable without AI. +- Use sorted repository grouping for reproducible prompts. diff --git a/specs/standup/requirements.md b/specs/standup/requirements.md new file mode 100644 index 0000000..0f0019d --- /dev/null +++ b/specs/standup/requirements.md @@ -0,0 +1,40 @@ +--- +spec: standup.spec.md +--- + +## User Stories + +- As a developer, I want a concise standup assembled from my recent activity across the repositories I select. + +## Acceptance Criteria + +### REQ-standup-001 + +Single-repository scope SHALL aggregate the selected time window and author, with optional diff statistics. + +Acceptance Criteria +- Existing unit tests verify the prompt includes the selected scope and window, includes author context when supplied, and includes diff statistics only when present. + +### REQ-standup-002 + +Multi-repository scope SHALL validate repositories, skip invalid entries with diagnostics, and group non-empty logs deterministically. + +### REQ-standup-003 + +GitHub-wide scope SHALL use authenticated commit search, supported date conversion, author selection, and repository grouping. + +### REQ-standup-004 + +Raw mode SHALL print aggregated activity without AI, while narrated mode SHALL delegate through Fledge Ask with spec indexing disabled. + +### REQ-standup-005 + +Empty activity SHALL exit successfully without invoking AI, and prerequisite failures SHALL be explicit. + +## Constraints + +- GitHub search is limited by authentication, visibility, and the committed result limit. + +## Out of Scope + +- Calendar scheduling, issue/project aggregation, automatic posting, and AI provider configuration. diff --git a/specs/standup/standup.spec.md b/specs/standup/standup.spec.md new file mode 100644 index 0000000..3a89bfa --- /dev/null +++ b/specs/standup/standup.spec.md @@ -0,0 +1,71 @@ +--- +module: standup +version: 2 +status: active +files: + - src/main.rs + +db_tables: [] +depends_on: [] +--- + +# Standup + +## Purpose + +Aggregate recent Git activity from one repository, multiple local repositories, or GitHub-wide search and produce raw logs or an AI-narrated Markdown standup through Fledge Ask. + +## Public API + +| Surface | Behavior | +|---------|----------| +| single repository | Summarize the current Git repository and optionally include diff statistics. | +| multiple repositories | Aggregate explicit or auto-discovered local Git repositories. | +| GitHub-wide | Search authenticated GitHub-visible commits and group them by repository. | +| raw | Print the aggregated log without invoking AI. | +| narrated | Build the standup prompt and delegate it to Fledge Ask. | + +## Invariants + +1. Scope-selection flags for explicit repositories, repository directory, and GitHub-wide search are mutually exclusive. +2. Author filtering applies consistently to local Git history and the selected GitHub author. +3. Diff statistics are included only for a single local repository. +4. Multi-repository output is deterministically grouped and labeled. +5. GitHub commits are grouped by full repository name and dates are converted to local time. +6. Empty activity exits successfully without invoking AI. +7. Raw mode never invokes Fledge Ask. +8. Narrated mode delegates through `fledge ask --no-spec-index` and propagates its exit status. + +## Behavioral Examples + +``` +Given recent commits in the selected scope +When the developer requests a narrated standup +Then the plugin aggregates deterministic commit context and delegates a Markdown standup prompt to Fledge Ask +``` + +## Error Cases + +| Error | When | Behavior | +|-------|------|----------| +| Not a Git repository | Single scope runs outside Git | Explain alternate scope flags and exit non-zero. | +| Invalid repository directory | Auto-discovery path is not a directory | Report the invalid path. | +| No repositories | Explicit or discovered multi-scope is empty | Report that no repositories can be scanned. | +| GitHub CLI unavailable | GitHub-wide mode cannot find gh | Report authentication/tool prerequisite. | +| Unsupported since value | GitHub mode cannot convert the time window | Request a supported relative or ISO date. | +| Fledge Ask unavailable | Narration cannot launch | Surface the delegated command failure. | + +## Dependencies + +- Rust 1.89 or later +- Git for local scopes +- Authenticated GitHub CLI for GitHub-wide scope +- Fledge Ask and a configured AI provider for narration + +## Change Log + +| Version | Date | Changes | +|---------|------|---------| +| 1 | 2026-07-12 | Document existing local, multi-repository, GitHub-wide, raw, and narrated standup behavior for SpecSync 5 adoption. | +| 2 | 2026-07-13 | Reconciled existing prompt, scope, and date documentation with stable requirement IDs for SpecSync 5.0.1 governance; runtime behavior is unchanged. | +| 2026-07-13 | CHG-0001-adopt-specsync-5-0-1-and-trust-1-0-0-governance-for-the-standup-fledge-plugin: Adopt SpecSync 5.0.1 and Trust 1.0.0 governance for the Standup Fledge plugin | diff --git a/specs/standup/tasks.md b/specs/standup/tasks.md new file mode 100644 index 0000000..78c04bf --- /dev/null +++ b/specs/standup/tasks.md @@ -0,0 +1,8 @@ +--- +spec: standup.spec.md +--- + +## Tasks + +- [x] Document scope, filtering, aggregation, raw, and narration behavior. +- [x] Preserve cross-platform build, tests, lint, formatting, and packaging. diff --git a/specs/standup/testing.md b/specs/standup/testing.md new file mode 100644 index 0000000..c3a1cd2 --- /dev/null +++ b/specs/standup/testing.md @@ -0,0 +1,18 @@ +--- +spec: standup.spec.md +--- + +## Test Plan + +### Unit Tests + +- Time-window conversion and ISO/local date formatting. +- Repository labels, tilde expansion, prompt construction, and Git parsing. + +### Integration Tests + +- `cargo fmt --check` +- `cargo clippy -- -D warnings` +- `cargo test` +- `cargo build --release` +- Verify help without invoking GitHub or AI.