Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
187 commits
Select commit Hold shift + click to select a range
cd31bff
feat(wp5): add pre-ingest secret scanner
tachyon-beep May 18, 2026
2117118
fix(wp5): close secret scanner review gaps
tachyon-beep May 18, 2026
d2d15b1
fix(wp5): harden secret scanner review gaps
tachyon-beep May 18, 2026
7d0e919
fix(wp5): keep secret scan wiring delegated
tachyon-beep May 18, 2026
d6ee0b0
feat: Add Codex CLI and Claude CLI support as local-login LLM providers
tachyon-beep May 18, 2026
291142d
Implement registry read API and scanner fixes
tachyon-beep May 18, 2026
f07d536
docs: consolidate implementation and planning history under docs/impl…
tachyon-beep May 18, 2026
3dbeb95
fix(wp5): address scanner review gaps
tachyon-beep May 18, 2026
dd07cc5
docs: currency pass — refresh stale facts and references in retained …
tachyon-beep May 18, 2026
92deb29
docs(reqs): defer Filigree-emission requirements to v0.2 (T2)
tachyon-beep May 19, 2026
be0b403
release: v1.0 publish prep — README + tutorial + workflow + four fixes
tachyon-beep May 19, 2026
a896b09
chore: backfill filigree v2.0 bootstrap artifacts
tachyon-beep May 19, 2026
fbf2903
fix(wp5): C1-C4 critical scanner gaps (clarion-55fc5aa885)
tachyon-beep May 19, 2026
60fb415
fix(wp5): I13-I16 loud-fail sweep (clarion-55fc5aa885)
tachyon-beep May 19, 2026
497526c
fix(wp5): I5 ADR-013 audit-trail fidelity (clarion-55fc5aa885)
tachyon-beep May 19, 2026
6bb3152
test(wp5): I6/I7/I10/I11/I12 coverage gaps (clarion-55fc5aa885)
tachyon-beep May 19, 2026
b38fc00
docs(wp5): I17 task-reference sweep (clarion-55fc5aa885)
tachyon-beep May 19, 2026
bb23296
style(wp5): apply rustfmt + clippy doc-markdown fixes (clarion-55fc5a…
tachyon-beep May 19, 2026
ad37c50
C0 docs: pin Loom federation read contract decisions
tachyon-beep May 19, 2026
b107857
C2 fix: remove synthetic file identity branch
tachyon-beep May 19, 2026
146370a
C5 C11 fix: resolve cataloged files without empty hash fallback
tachyon-beep May 19, 2026
a59d22c
C1 C13 fix: classify HTTP read errors
tachyon-beep May 19, 2026
e212ca6
C6 C12 fix: add HTTP instance capability handshake
tachyon-beep May 19, 2026
264c49c
C3 test: pin HTTP read API federation fixtures
tachyon-beep May 19, 2026
682b76a
C4 fix: enforce HTTP read API loopback trust model
tachyon-beep May 19, 2026
d1c9267
C7 C8 C9 fix: harden HTTP read runtime
tachyon-beep May 19, 2026
f7401ad
C14 C15 C16 C18 C19 fix: finish medium hardening disposition
tachyon-beep May 19, 2026
b66effc
fix: satisfy workspace clippy gate for HTTP hardening
tachyon-beep May 19, 2026
a1a0399
fix: complete federation audit follow-ups
tachyon-beep May 19, 2026
1109560
feat(http_read): return 403 BRIEFING_BLOCKED for blocked entities
tachyon-beep May 19, 2026
acbf465
feat(http_read): require Authorization: Bearer for /api/v1/files
tachyon-beep May 19, 2026
eb6200d
feat(http_read): add POST /api/v1/files/batch + document path normali…
tachyon-beep May 19, 2026
2c3311a
feat(http_read): improve code formatting and readability in HTTP read…
tachyon-beep May 19, 2026
a28c3a2
chore(plugin): bump Python plugin to 1.0.0 + Beta classifier
tachyon-beep May 19, 2026
536e882
docs(release): prepare repo for 1.0.0 release
tachyon-beep May 19, 2026
69ba01f
fix(llm_provider): always pass --tools to Claude provider (security)
tachyon-beep May 19, 2026
98b5bbd
ci(release): gate publish on verify suite + portability + dynamic sdist
tachyon-beep May 19, 2026
64e1062
docs(release): rebrand v0.1 docset to v1.0 and soften tag-existence c…
tachyon-beep May 19, 2026
fcef6a0
docs(adr): write ADR-034 for Sprint 3 federation HTTP read API hardening
tachyon-beep May 19, 2026
30e7888
chore(release-hygiene): ADR count, Sprint 3 closure, RUSTDOCFLAGS gat…
tachyon-beep May 19, 2026
015d453
fix(secret_scan): clear stale briefing_blocked on cleaned sidecars
tachyon-beep May 19, 2026
f4f2729
fix(secret_scan): anchor ID must match ADR-003 entity-id grammar
tachyon-beep May 19, 2026
f569531
chore(pr-review): doc drift + pin Python 3.11 in ci.yml rust job
tachyon-beep May 19, 2026
2faa750
Persist manifest language for HTTP file reads
tachyon-beep May 20, 2026
a1553dd
Add HMAC identity for HTTP read API
tachyon-beep May 20, 2026
68b719c
Bound Pyright dogfood analysis
tachyon-beep May 20, 2026
54974fe
Parallelize pre-ingest secret scan
tachyon-beep May 20, 2026
170b398
Tighten secret scan type design
tachyon-beep May 20, 2026
f0a19ac
Add files resolve batch endpoint
tachyon-beep May 20, 2026
95f296a
Harden release supply chain
tachyon-beep May 20, 2026
708c58e
Fix RC1 release readiness blockers
tachyon-beep May 20, 2026
4398cbc
Commit remaining RC1 release state
tachyon-beep May 20, 2026
582c6d9
Prepare CI/CD release gates for 1.0
tachyon-beep May 20, 2026
87b0ebb
ci: prove Node 24 action compatibility
tachyon-beep May 20, 2026
d3b97f7
docs: record v1.0 CI governance audit
tachyon-beep May 20, 2026
2abefc4
ci: add release governance preflight
tachyon-beep May 20, 2026
d6e60dc
ci: pin workflow actions for release governance
tachyon-beep May 20, 2026
7922aef
ci: schedule action pin updates
tachyon-beep May 20, 2026
a089a21
docs: refresh v1.0 CI audit snapshot
tachyon-beep May 20, 2026
13896b5
docs: avoid stale CI audit commit refs
tachyon-beep May 20, 2026
4533cb7
ci: require concrete release branch governance
tachyon-beep May 20, 2026
1fb04e8
docs: add v1.0 release governance runbook
tachyon-beep May 20, 2026
6c9f8a2
ci: require active release rulesets
tachyon-beep May 20, 2026
e568341
ci: gate release builds on governance check
tachyon-beep May 20, 2026
4d293d4
ci: enforce release governance drift checks
tachyon-beep May 20, 2026
70a7596
feat(pyright): add handling for unresolved call site expression size …
tachyon-beep May 20, 2026
286d92d
docs: enhance AGENTS.md with guidance on using focused subagents for …
tachyon-beep May 20, 2026
517d4b8
Add RC1 architecture analysis documentation and diagrams
tachyon-beep May 20, 2026
5ff8f6c
docs(v1.0): tag-cut gap register, execution plan, and issue bodies
tachyon-beep May 22, 2026
064d37a
docs(v1.0): refresh internal design docs against ADR-034
tachyon-beep May 22, 2026
bf764cb
docs(operator): v1.0 rollback, storage ops, trust statements, CHANGEL…
tachyon-beep May 22, 2026
8e5804b
fix(v1.0): fail-closed brief-block, HMAC body-parse code, loopback wa…
tachyon-beep May 22, 2026
cc9b899
test(e2e): automate external-operator smoke walkthrough
tachyon-beep May 22, 2026
70bd218
fix(v1.0): fs2 advisory lock for clarion analyze (STO-01)
tachyon-beep May 24, 2026
071ef6f
test(plugin): hard-fail when pyright-langserver is missing
tachyon-beep May 24, 2026
f5a6500
fix(storage): add summary_cache.entity_id FK (V11-STO-03)
tachyon-beep May 24, 2026
a4c4279
ci(v1.0): close release-path tag-cut gaps (TEST-01/02, CI-01/03/04, G…
tachyon-beep May 28, 2026
b70b355
fix(v1.0): e2e integrity_check, operator trust/storage docs, fmt (STO…
tachyon-beep May 28, 2026
2d949e4
docs(v1.0): land v0.2-deferral scope annotations; align deferral voca…
tachyon-beep May 28, 2026
ced0741
feat(v1.0): ADR-035 operational-tuning discipline + STO-02 closure
tachyon-beep May 23, 2026
0eb748d
docs(v1.0): archive 2026-05-24 gap-analysis + publish-checklist reviews
tachyon-beep May 28, 2026
ff973c1
feat(orientation): add TDD-validated clarion-workflow SKILL.md (epic …
tachyon-beep May 28, 2026
4ceb57a
docs(plan): full-parity agent-orientation implementation plan (epic c…
tachyon-beep May 28, 2026
acefae3
feat(cli): embed clarion-workflow skill pack with blake3 fingerprint
tachyon-beep May 28, 2026
504cef9
feat(cli): atomic fingerprint-aware skill-pack installer
tachyon-beep May 28, 2026
d4890c1
feat(cli): clarion install --skills installs orientation skill pack
tachyon-beep May 28, 2026
c45c678
style(cli): fmt/clippy after skill-pack phase
tachyon-beep May 28, 2026
7a6581d
refactor(cli): tighten skill-pack installer per Phase 1 review
tachyon-beep May 28, 2026
bfa40d7
feat(mcp): shared project_snapshot (counts + staleness)
tachyon-beep May 28, 2026
fd41683
test(mcp): lock fresh/stale boundary for project_snapshot
tachyon-beep May 28, 2026
571daa5
style(mcp): fmt/clippy after snapshot module
tachyon-beep May 28, 2026
1c6f4c0
feat(cli): add fail-soft clarion hook session-start subcommand
tachyon-beep May 28, 2026
8595827
fix(cli): skill_pack drift detection compares on-disk content, not ju…
tachyon-beep May 28, 2026
1108bcb
feat(cli): hook session-start prints snapshot and resyncs skill on drift
tachyon-beep May 28, 2026
0a4bb42
style(cli): fmt/clippy after hook subcommand
tachyon-beep May 28, 2026
5cdf286
docs(cli): correct skill_pack drift docs to describe content-based se…
tachyon-beep May 28, 2026
789ce50
feat(cli): non-clobbering SessionStart hook merge for .claude/setting…
tachyon-beep May 28, 2026
b50a0ba
feat(cli): wire clarion install --hooks and --all
tachyon-beep May 28, 2026
4951541
style(cli): fmt/clippy after hooks install
tachyon-beep May 28, 2026
698353e
refactor(cli): atomic settings.json write + coercion warning per Phas…
tachyon-beep May 28, 2026
cbbb48b
feat(mcp): initialize advertises instructions + prompts/resources cap…
tachyon-beep May 28, 2026
6af6ce8
feat(mcp): resources/list advertises clarion://context
tachyon-beep May 28, 2026
bbc3a46
test(mcp): lock resources/read clarion://context contract
tachyon-beep May 28, 2026
1a78380
test(mcp): prompts/list+get serve clarion-workflow skill text
tachyon-beep May 28, 2026
d1146b5
test(e2e): assert MCP initialize instructions and clarion://context read
tachyon-beep May 28, 2026
c7bda37
style: fmt/clippy after MCP orientation surface
tachyon-beep May 28, 2026
4551b5d
refactor(mcp): fallback parity + error-code tests + dispatch-boundary…
tachyon-beep May 28, 2026
9b34eb1
docs(operator): document install --skills/--hooks/--all and MCP orien…
tachyon-beep May 28, 2026
1e5cb90
fix(cli): make clarion install --all re-runnable (skip init when .cla…
tachyon-beep May 28, 2026
54c601b
docs(operator): correct LLM-free tool count (seven of eight; only sum…
tachyon-beep May 28, 2026
cc6d6df
style(cli): rustfmt install_all_is_rerunnable assert
tachyon-beep May 28, 2026
f0e7106
feat(mcp): log swallowed snapshot query errors instead of silently ze…
tachyon-beep May 28, 2026
b2b990a
fix(cli): hook distinguishes present-but-unreadable db from a missing…
tachyon-beep May 28, 2026
2b30695
fix(cli): refuse to rewrite a malformed .claude/settings.json (never-…
tachyon-beep May 28, 2026
7b0c645
refactor(cli): guard do-nothing install + correct stale module-header…
tachyon-beep May 28, 2026
10fd03c
style(cli): collapse never-clobber SessionStart guard into a let-chain
tachyon-beep May 28, 2026
cdd805e
test(cli): cover the non-array hooks.SessionStart never-clobber branch
tachyon-beep May 28, 2026
57a1806
fix(cli): installed SessionStart hook pins --path to the target project
tachyon-beep May 28, 2026
4304206
fix(cli): crash-safe skill-pack swap (backup-and-restore, never leave…
tachyon-beep May 28, 2026
fb87caf
fix(mcp): stateless initialize advertises only the tools it serves
tachyon-beep May 28, 2026
5d4aeaa
feat(mcp): add project_status diagnostics tool + live Filigree URL re…
tachyon-beep May 28, 2026
34ff1d1
docs(orientation): correct resync-scope and staleness doc-comments
tachyon-beep May 29, 2026
fc9299a
feat(mcp): scope_excludes on graph-query results so empty != complete
tachyon-beep May 29, 2026
7f4bfa7
feat(mcp): compact, ranked, size-capped execution_paths_from
tachyon-beep May 29, 2026
1a84e3d
fix(mcp): summary degrades to a cached structural fallback on invalid…
tachyon-beep May 29, 2026
4b3b86c
feat(mcp): neighborhood surfaces import edges (reverse-import lookup)
tachyon-beep May 29, 2026
192a467
feat(mcp): project_status reports db_identity for swapped-DB detection
tachyon-beep May 29, 2026
5900572
feat(mcp): signal degraded snapshots on clarion://context
tachyon-beep May 29, 2026
c8bcdd1
test(mcp): cover Staleness::Unknown sub-causes (a) parse-fail and (b)…
tachyon-beep May 29, 2026
b834eb6
refactor(mcp): derive initialize instructions tool list from list_too…
tachyon-beep May 29, 2026
2f0b1db
feat(mcp): add optional kind filter to find_entity
tachyon-beep May 29, 2026
54bef76
feat(mcp): add subsystem_of reverse lookup tool
tachyon-beep May 29, 2026
6c3bd5a
feat(mcp): surface resolved Filigree endpoint + result_kind from issu…
tachyon-beep May 29, 2026
4f51776
feat(mcp): add summary_preview_cost tool (preflight before LLM spend)
tachyon-beep May 29, 2026
5374ee7
Add comprehensive evaluation and remediation plans for Clarion dogfoo…
tachyon-beep May 29, 2026
d469636
refactor(cli): model install as an InstallPlan enum, not three bools
tachyon-beep May 29, 2026
e86d8c0
refactor(mcp): make ProjectSnapshot's db_present/counts invariant unr…
tachyon-beep May 29, 2026
8a9905d
feat(ci): add pyright pin lockstep drift guard (V11-TEST-02)
tachyon-beep May 29, 2026
cff3df2
feat(ci): add Wardline version-bounds validation guard (V11-TEST-03)
tachyon-beep May 29, 2026
0794175
feat(ci): add EntityCountCap ADR/code lockstep guard (V11-TEST-04)
tachyon-beep May 29, 2026
107ed1c
feat(storage): ReaderPool::open_validated fails fast on a bad DB (V11…
tachyon-beep May 29, 2026
9ebe438
test(cli): cover atomic-write cleanup-on-failure paths (PR #21 review)
tachyon-beep May 29, 2026
5ae87c9
feat(cli): add `clarion db backup` WAL-safe online backup subcommand
tachyon-beep May 29, 2026
c5be33c
feat(storage): BEGIN IMMEDIATE + SQLITE_BUSY retry for writer transac…
tachyon-beep May 29, 2026
59db7f2
feat(mcp): add source_for_entity tool with line-numbered spans + drif…
tachyon-beep May 29, 2026
9c09fee
feat(mcp): add call_sites tool — source evidence behind calls/referen…
tachyon-beep May 29, 2026
20df97a
feat(storage): briefing_blocked generated column + partial index
tachyon-beep May 29, 2026
4902169
test(mcp): cover call_sites production/test path-scope filtering
tachyon-beep May 29, 2026
b2f849d
fix(docs): update error codes in Filigree documentation for consistency
tachyon-beep May 29, 2026
8608356
feat(mcp): entity_context evidence on entity_at lookups
tachyon-beep May 29, 2026
6ab27f4
feat(mcp): add orientation_pack deterministic MCP tool
tachyon-beep May 29, 2026
0209136
feat(cli): analyze --run-id + --progress-file for MCP lifecycle
tachyon-beep May 29, 2026
b0bb874
feat(mcp): analyze_start / analyze_status / analyze_cancel lifecycle
tachyon-beep May 29, 2026
e6db891
test(mcp): cover analyze_status terminal state mapping
tachyon-beep May 29, 2026
7764ab7
feat(mcp): module-level reference rollup + reverse-import
tachyon-beep May 29, 2026
bd136c1
feat(mcp): add index_diff freshness / drift report
tachyon-beep May 29, 2026
2e9401b
fix(mcp): index_diff dirty-path parsing + indexed correlation
tachyon-beep May 29, 2026
40ba868
refactor(mcp): home clarion-workflow skill asset in clarion-mcp
tachyon-beep May 29, 2026
35104fd
feat(mcp): detect added/removed source files in staleness; bound the …
tachyon-beep May 29, 2026
61f9fa7
feat(mcp): enrich issues_for matches with issue title/status/priority
tachyon-beep May 29, 2026
787b754
feat(wp9b): emit Clarion findings to Filigree scan-results
tachyon-beep May 29, 2026
a07f6ef
fix(mcp): update tool-count guards 13→18 for agent-orientation epic
tachyon-beep May 29, 2026
8c99676
fix(mcp): reap finished analyze runs and their progress files
tachyon-beep May 29, 2026
bc617f2
feat(mcp): surface scan_truncated when staleness scan hits the file cap
tachyon-beep May 29, 2026
309bbba
fix(mcp): decode git C-quoted paths in index_diff; pin issue-detail r…
tachyon-beep May 29, 2026
32dce65
feat(mcp): name importing module on reverse-import (module altitude)
tachyon-beep May 29, 2026
fe1ab8a
style(mcp): gate-floor fixups for the review-minor series
tachyon-beep May 29, 2026
15b03de
docs(mcp): refresh clarion-workflow skill + operator tool list for th…
tachyon-beep May 29, 2026
b4e1b96
fix(mcp): close briefing_blocked emit leak + make finding emission op…
tachyon-beep May 29, 2026
7a93883
docs(federation): file the Filigree prune-unseen + scan-run-create re…
tachyon-beep May 29, 2026
46fd825
feat(cli): clarion analyze --resume (REQ-FINDING-05 lifecycle tail)
tachyon-beep May 29, 2026
4e0f85c
feat(cli): clarion analyze --prune-unseen retention sweep (REQ-FINDIN…
tachyon-beep May 29, 2026
663fa07
docs(mcp): document clarion://context resource in clarion-workflow skill
tachyon-beep May 30, 2026
c38b96f
docs(filigree): sync agent instructions + workflow skill to Filigree …
tachyon-beep May 30, 2026
c7ca5cf
docs(spec): Clarion consumes Wardline data — Flow B read-time reconci…
tachyon-beep May 30, 2026
a24442e
docs(spec): correct Flow B data source — existing Filigree routes, no…
tachyon-beep May 30, 2026
a8c5ccc
test(cli): fix analyze_failrun PATH isolation + harden findings tests
tachyon-beep May 30, 2026
b0ec000
docs(spec): fix Flow B data path — loom files-list + findings-list, n…
tachyon-beep May 30, 2026
4655512
docs(plan): Flow B Wardline finding reconciliation — implementation plan
tachyon-beep May 30, 2026
11e4efe
fix(mcp): block briefing-blocked entities in source_for_entity (PR#21…
tachyon-beep May 30, 2026
cba4765
fix(mcp): isolate analyze child stdio from the stdio MCP stream (PR#2…
tachyon-beep May 30, 2026
e1fcebc
fix(mcp): redact call_sites line_text for briefing-blocked owners (PR…
tachyon-beep May 30, 2026
908b712
fix(storage): ship briefing_blocked as migration 0002, not an in-plac…
tachyon-beep May 30, 2026
aa60da0
fix(config): point checked-in clarion MCP server at this repo, not el…
tachyon-beep May 30, 2026
6669799
test(cli): update migration-count assertions for migration 0002
tachyon-beep May 30, 2026
ef75c46
fix(storage): wrap migration 0002 in a transaction (PR#21 P2)
tachyon-beep May 30, 2026
6585a95
fix(cli): harden install --hooks/--all edge cases (PR#21 P2 #5/#6/#10)
tachyon-beep May 30, 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
38 changes: 29 additions & 9 deletions .agents/skills/filigree-workflow/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,22 @@ Every task follows this lifecycle:
filigree ready → find available work (no blockers)
filigree show <issue-id> → read requirements and context
filigree transitions <issue-id> → check valid status transitions
filigree start-work <issue-id> --assignee <name> → atomically claim + transition to in_progress
filigree start-work <issue-id> --assignee <name> → atomically claim + transition into its working status
[do the work, commit code]
filigree close <issue-id> --reason="summary of what was done"
```

Or skip steps 1–3 entirely with `filigree start-next-work --assignee <name>` to grab the highest-priority ready issue.
Or skip steps 1–3 entirely with `filigree start-next-work --assignee <name>` to grab the highest-priority **startable** issue.

> **Ready ≠ startable.** The working status is type-specific (tasks →
> `in_progress`, features → `building`). Bugs start at `triage`, which has no
> single-hop transition into work — they walk `triage → confirmed → fixing`. So
> a triage bug is *ready* but not directly *startable*: `start-work` on one
> returns `INVALID_TRANSITION` naming the next status to move through, and
> `start-next-work` skips it. `ready` items carry a `startable` flag (and a
> `next_action` hint when false). Pass `--advance` to either command to walk the
> soft transitions automatically (`triage → confirmed → fixing`) instead of
> being blocked or skipped.

Always close with a `--reason` — it becomes audit trail for the next agent.

Expand All @@ -49,18 +59,26 @@ When triaging, use `filigree batch-update <ids...> --priority=N` for bulk change
### Solo or Swarm — Same Tool

Use `start-work` (or `start-next-work`) for the usual case. Both atomically
claim the issue *and* transition it to `in_progress` in one DB transaction —
optimistic-locking on the assignee, so concurrent callers can't both think
they own the issue.
claim the issue *and* transition it into its working status in one DB
transaction — optimistic-locking on the assignee, so concurrent callers can't
both think they own the issue. The working status is type-specific (tasks →
`in_progress`, features → `building`, bugs → `fixing`).

```bash
filigree start-work <issue-id> --assignee <agent-name> # specific issue
filigree start-next-work --assignee <agent-name> # highest-priority ready
filigree start-work <issue-id> --assignee <agent-name> # specific issue
filigree start-next-work --assignee <agent-name> # highest-priority startable
filigree start-work <bug-id> --assignee <agent-name> --advance # walk triage → confirmed → fixing
```

If another agent already owns the claim, the call fails with `code: CONFLICT`
(CLI exit 4). Safe to retry against a different issue.

`start-work` on a `triage` bug (or any type with no single-hop working status)
returns `INVALID_TRANSITION` naming the intermediate status to move through
first; `start-next-work` skips such issues. Pass `--advance` to walk the soft
transitions to the nearest working status automatically (missing required
fields become warnings, not blocks; hard edges are never auto-walked).

### Niche: Claim Without Transitioning

`claim` and `claim-next` still exist for the rare case where you want to
Expand Down Expand Up @@ -170,13 +188,15 @@ When parsing `--json` output or MCP responses, expect these unified envelopes:

- **Batch ops** → `{succeeded: [...], failed: [{id, error, code}, ...], newly_unblocked?: [...]}`.
`failed` is always present (empty list if none); `newly_unblocked` is
omitted when the op cannot unblock. Pass `--detail=full` (CLI) or
present only when non-empty (omitted when the op unblocked nothing). Pass `--detail=full` (CLI) or
`response_detail="full"` (MCP) to get full records back.
- **List ops** → `{items: [...], has_more: bool, next_offset?: int}`.
`next_offset` only appears when there is a next page.
- **Errors** → `{error: str, code: ErrorCode, details?: dict}`. `code` is
one of: `VALIDATION`, `NOT_FOUND`, `CONFLICT`, `INVALID_TRANSITION`,
`PERMISSION`, `NOT_INITIALIZED`, `IO`, `INVALID_API_URL`, `STOP_FAILED`,
`PERMISSION`, `NOT_INITIALIZED`, `IO`, `INVALID_API_URL`,
`FILE_REGISTRY_DISPLACED`, `REGISTRY_UNAVAILABLE`,
`CLARION_REGISTRY_VERSION_MISMATCH`, `BRIEFING_BLOCKED`, `STOP_FAILED`,
`SCHEMA_MISMATCH`, `INTERNAL`. Branch on `code` for retry policy
(`CONFLICT` → exit 4, retryable; everything at exit 1 needs operator
intervention).
Expand Down
19 changes: 12 additions & 7 deletions .agents/skills/filigree-workflow/references/team-coordination.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ work across multiple agents.

### The Race Condition Problem

When multiple agents call `filigree update <issue-id> --status=in_progress`
When multiple agents call `filigree update <issue-id> --status=<wip>`
simultaneously, both think they own the issue. Filigree 2.0 solves this with
`start-work`, which atomically claims the issue *and* transitions it to
`in_progress` in a single DB transaction with optimistic locking on the
`start-work`, which atomically claims the issue *and* transitions it to its
type-specific working status (tasks → `in_progress`, features → `building`,
bugs → `fixing`) in a single DB transaction with optimistic locking on the
assignee.

### Start Protocol
Expand All @@ -27,9 +28,12 @@ If another agent already claimed the issue, the call fails with
`code: CONFLICT` (CLI exit 4). No silent overwrite, no half-claimed state —
either both the claim and the transition land, or neither does.

`start-next-work` accepts the same filters as `claim-next`
(`--type`, `--priority-min`, `--priority-max`, `--target-status`) so
specialised agents can scope their work.
`start-next-work` accepts the work-scoping filters `claim-next` also
takes (`--type`, `--priority-min`, `--priority-max`) so specialised agents
can scope their work. Because `start-next-work` *transitions* (not just
reserves), it additionally accepts `--target-status` to override the wip
target and `--advance` to walk soft transitions to wip — neither of which
`claim-next` has, since `claim-next` only reserves and never changes status.

### Niche: Claim Without Transitioning

Expand Down Expand Up @@ -62,7 +66,8 @@ When passing work between agents, follow this sequence:

1. **Document state**: Add a comment with current progress, decisions made,
and remaining work
2. **Update status**: Leave at `in_progress` if partially done, or close if complete
2. **Update status**: Leave in its working status (`in_progress` / `building` /
`fixing`) if partially done, or close if complete
3. **Flag blockers**: Create blocker issues and add dependencies if needed

```bash
Expand Down
30 changes: 20 additions & 10 deletions .agents/skills/filigree-workflow/references/workflow-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,23 +95,33 @@ filigree remove-dep <blocked> <blocker>

### Standard Flow

Bugs in the core pack do **not** start in a directly-startable state. They
open at `triage` and walk soft transitions toward work (run
`filigree type-info bug` for the authoritative graph):

```
create (open) → in_progress → closed
create (triage) → confirmed → fixing → verifying → closed
```

Use `filigree start-work <issue-id> --assignee <name>` to make the
`open → in_progress` transition atomically.
`triage` has no single-hop transition into a `wip` status, so a fresh bug is
*ready* but not *startable*. Pass `--advance` to walk the soft transitions to
the nearest working status automatically:

### With Verification
```bash
filigree start-work <bug-id> --assignee <name> --advance # triage → confirmed → fixing
```

For types that support it (check `filigree type-info bug`):
Without `--advance`, `start-work` on a `triage` bug returns
`INVALID_TRANSITION` naming the next status (`confirmed`), and
`start-next-work` skips it.

```
open → fixing → verifying → closed
```
### Disambiguating the wip target

Pass `--target-status fixing` to `start-work` if the workflow has multiple
`wip`-category targets and the resolver needs disambiguation.
If the workflow has multiple `wip`-category targets reachable from the
current status and the resolver needs disambiguation, pass
`--target-status fixing` to `start-work` / `start-next-work`. (`claim` /
`claim-next` only reserve and never transition, so they do not take
`--target-status` or `--advance`.)

### Bug Report Template

Expand Down
22 changes: 22 additions & 0 deletions .clarion/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Clarion .gitignore — ADR-005 tracked-vs-excluded list.
# Tracked (committed): clarion.db, config.json, .gitignore itself.
# Excluded (ignored): WAL sidecars, shadow DB, per-run logs, tmp scratch.

# SQLite write-ahead files never belong in the repo.
*-wal
*-shm
*.db-wal
*.db-shm

# Shadow DB intermediate (ADR-011 --shadow-db).
*.shadow.db
*.db.new

# Scratch / temp space.
tmp/

# Per-run log directories (see detailed-design §File layout). The run dir
# metadata (config.yaml, stats.json, partial.json) is tracked; only the
# raw LLM request/response log is excluded.
logs/
runs/*/log.jsonl
Binary file added .clarion/clarion.db
Binary file not shown.
4 changes: 4 additions & 0 deletions .clarion/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"schema_version": 1,
"last_run_id": null
}
1 change: 1 addition & 0 deletions .clarion/instance_id
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
07196666-c132-4bff-b9fb-1d0eeff64fdf
Empty file removed .codex
Empty file.
11 changes: 11 additions & 0 deletions .codex/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Project-local Codex MCP configuration.
# Codex does not read .mcp.json, so mirror this project's stdio MCP servers here.

[mcp_servers.filigree]
command = "/home/john/.local/bin/filigree-mcp"
args = ["--project", "/home/john/clarion"]

[mcp_servers.clarion-dogfood]
command = "/home/john/clarion/target/release/clarion"
args = ["serve", "--path", "/home/john/clarion"]
env = { PATH = "/home/john/clarion/plugins/python/.venv/bin:/home/john/.local/bin:/home/john/elspeth/.venv/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/john/.cargo/bin:/home/john/.nvm/versions/node/v20.19.3/bin:/home/john/miniconda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" }
Comment thread
tachyon-beep marked this conversation as resolved.
6 changes: 6 additions & 0 deletions .filigree.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"version": 1,
"project_name": "clarion",
"prefix": "clarion",
"db": ".filigree/filigree.db"
}
5 changes: 5 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

- package-ecosystem: "pip"
directory: "/plugins/python"
schedule:
Expand Down
72 changes: 59 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,30 @@ concurrency:

env:
CARGO_TERM_COLOR: always
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
RUSTFLAGS: "-D warnings"

jobs:
rust:
name: Rust
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5

- uses: dtolnay/rust-toolchain@stable
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
with:
toolchain: stable
components: clippy, rustfmt, llvm-tools-preview

- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32

# Python is used by the migration-retirement guard and the
# workspace-version-lockstep guard below. Pin >= 3.11 explicitly so the
# stdlib `tomllib` is available regardless of which Python the runner
# image happens to preinstall.
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
with:
python-version: "3.11"

- name: fmt
run: cargo fmt --all -- --check
Expand All @@ -34,11 +44,34 @@ jobs:
python scripts/check-migration-retirement.py --self-test
python scripts/check-migration-retirement.py

- name: release governance static guard
run: |
python scripts/check-github-release-governance.py --self-test
python scripts/check-github-release-governance.py --static-only

- name: cross-workspace version lockstep
run: python scripts/check-workspace-version-lockstep.py

- name: pyright pin lockstep
run: |
python scripts/check-pyright-pin-lockstep.py --self-test
python scripts/check-pyright-pin-lockstep.py

- name: wardline version bounds
run: |
python scripts/check-wardline-version-bounds.py --self-test
python scripts/check-wardline-version-bounds.py

- name: entity-cap ADR/code lockstep
run: |
python scripts/check-entity-cap-lockstep.py --self-test
python scripts/check-entity-cap-lockstep.py

- name: clippy
run: cargo clippy --workspace --all-targets --all-features -- -D warnings

- name: install cargo-nextest
uses: taiki-e/install-action@cargo-nextest
uses: taiki-e/install-action@e310bff3ef77234d477d6bb655da153a5c49d1db

# Ensure all workspace binaries (notably clarion-plugin-fixture) are built
# before nextest runs. wp2_e2e tests need the fixture binary on disk and
Expand All @@ -52,9 +85,11 @@ jobs:

- name: doc
run: cargo doc --workspace --no-deps --all-features
env:
RUSTDOCFLAGS: "-D warnings"

- name: install cargo-deny
uses: taiki-e/install-action@cargo-deny
uses: taiki-e/install-action@2e721ffcfc34740897fc3130e2dd782b1c136896

- name: deny
run: cargo deny check
Expand All @@ -63,16 +98,16 @@ jobs:
name: Python plugin
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5

- uses: actions/setup-python@v5
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
with:
python-version: "3.11"
cache: pip
cache-dependency-path: plugins/python/pyproject.toml

- name: cache pyright runtime
uses: actions/cache@v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830
with:
path: ~/.cache/pyright-python/
key: pyright-python-1.1.409-${{ runner.os }}
Expand Down Expand Up @@ -105,20 +140,22 @@ jobs:
runs-on: ubuntu-latest
needs: [rust, python-plugin]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5

- uses: dtolnay/rust-toolchain@stable
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
with:
toolchain: stable

- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32

- uses: actions/setup-python@v5
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
with:
python-version: "3.11"
cache: pip
cache-dependency-path: plugins/python/pyproject.toml

- name: cache pyright runtime
uses: actions/cache@v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830
with:
path: ~/.cache/pyright-python/
key: pyright-python-1.1.409-${{ runner.os }}
Expand All @@ -128,3 +165,12 @@ jobs:

- name: run walking skeleton
run: bash tests/e2e/sprint_1_walking_skeleton.sh

- name: run WP5 secret scanner smoke
run: CARGO_BUILD=0 bash tests/e2e/wp5_secret_scan.sh

- name: Sprint 2 MCP surface
run: CARGO_BUILD=0 bash tests/e2e/sprint_2_mcp_surface.sh

- name: Phase 3 subsystems
run: CARGO_BUILD=0 bash tests/e2e/phase3_subsystems.sh
Loading
Loading