diff --git a/.agents/prompts/snippets/non-goals.md b/.agents/prompts/snippets/non-goals.md deleted file mode 100644 index 0dd3cd56d..000000000 --- a/.agents/prompts/snippets/non-goals.md +++ /dev/null @@ -1,10 +0,0 @@ -# Non-Goals — quick reference - -For the full set see [`.sf/NON-GOALS.md`](../../../.sf/NON-GOALS.md). - -- Not a code-completion product. SF is a planning + workflow control - plane; the agent generates code, not autocomplete suggestions. -- Not a chatbot. Sessions are structured around milestones and modes. -- Not a knowledge graph product. Memory and recall are operational - concerns, not the product itself. -- Not a registry. SF doesn't host a public skill/plugin marketplace. diff --git a/.agents/prompts/snippets/principles.md b/.agents/prompts/snippets/principles.md deleted file mode 100644 index 0789dfccf..000000000 --- a/.agents/prompts/snippets/principles.md +++ /dev/null @@ -1,13 +0,0 @@ -# Principles — quick reference - -For the full set see [`.sf/PRINCIPLES.md`](../../../.sf/PRINCIPLES.md). - -- **Purpose-first.** Every milestone, slice, task ties back to a - stated purpose. Refuse work that doesn't. -- **Promote-only state.** `.sf/` artifacts are append/promote — don't - rewrite history of promoted artifacts; create new revisions if - something changed. -- **Spec-first TDD.** Write the contract before the code; tests - before the implementation. -- **Deterministic resolution.** Given the same inputs, agents must - produce the same canonical configuration. diff --git a/.agents/prompts/snippets/style.md b/.agents/prompts/snippets/style.md deleted file mode 100644 index b64c87594..000000000 --- a/.agents/prompts/snippets/style.md +++ /dev/null @@ -1,14 +0,0 @@ -# Style — quick reference - -For the full guide see [`.sf/STYLE.md`](../../../.sf/STYLE.md). - -- DB access via `node:sqlite` `DatabaseSync`. Never `better-sqlite3`, - never native addons. -- No file-based proxies for DB state. Query the DB. -- Comments are sparing — explain WHY a non-obvious choice was made, - never WHAT the code does (the code says that). -- Functions/classes get docstrings only when their purpose is - non-obvious from the name. -- TypeScript-first for new code under `src/`. JavaScript-first under - `src/resources/extensions/sf/` (loaded directly, no compile step - beyond `copy-resources`). diff --git a/.sf/backups/db/sf.db.2026-05-09T22-35-23-473Z b/.sf/backups/db/sf.db.2026-05-09T22-35-23-473Z deleted file mode 100644 index 4df773fd4..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-09T22-35-23-473Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-09T22-51-01-800Z b/.sf/backups/db/sf.db.2026-05-09T22-51-01-800Z deleted file mode 100644 index bb2d0ddb1..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-09T22-51-01-800Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-09T23-29-17-802Z b/.sf/backups/db/sf.db.2026-05-09T23-29-17-802Z deleted file mode 100644 index 805da686d..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-09T23-29-17-802Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T00-25-03-634Z b/.sf/backups/db/sf.db.2026-05-10T00-25-03-634Z deleted file mode 100644 index dfa867375..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T00-25-03-634Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T00-49-50-037Z b/.sf/backups/db/sf.db.2026-05-10T00-49-50-037Z deleted file mode 100644 index e77c6f283..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T00-49-50-037Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T01-08-44-324Z b/.sf/backups/db/sf.db.2026-05-10T01-08-44-324Z deleted file mode 100644 index 9d2a5d2e2..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T01-08-44-324Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T02-01-37-759Z b/.sf/backups/db/sf.db.2026-05-10T02-01-37-759Z deleted file mode 100644 index f9e2dcadc..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T02-01-37-759Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T02-27-22-542Z b/.sf/backups/db/sf.db.2026-05-10T02-27-22-542Z deleted file mode 100644 index f41e6d041..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T02-27-22-542Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T02-42-23-822Z b/.sf/backups/db/sf.db.2026-05-10T02-42-23-822Z deleted file mode 100644 index eef6d69ac..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T02-42-23-822Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T04-25-32-791Z b/.sf/backups/db/sf.db.2026-05-10T04-25-32-791Z deleted file mode 100644 index cfb3d4dae..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T04-25-32-791Z and /dev/null differ diff --git a/.sf/backups/db/sf.db.2026-05-10T04-45-58-550Z b/.sf/backups/db/sf.db.2026-05-10T04-45-58-550Z deleted file mode 100644 index 281183ab4..000000000 Binary files a/.sf/backups/db/sf.db.2026-05-10T04-45-58-550Z and /dev/null differ diff --git a/.sf/metrics.db b/.sf/metrics.db index 3023d45a0..ef8afc4bb 100644 Binary files a/.sf/metrics.db and b/.sf/metrics.db differ diff --git a/.sf/metrics.db-shm b/.sf/metrics.db-shm index 8f5a6f878..20c56f6c4 100644 Binary files a/.sf/metrics.db-shm and b/.sf/metrics.db-shm differ diff --git a/.sf/metrics.db-wal b/.sf/metrics.db-wal index ce967c679..0a32c4de8 100644 Binary files a/.sf/metrics.db-wal and b/.sf/metrics.db-wal differ diff --git a/.sf/model-performance.json b/.sf/model-performance.json index 22ae78fa8..686ca334c 100644 --- a/.sf/model-performance.json +++ b/.sf/model-performance.json @@ -1,14 +1,14 @@ { "research-slice": { "kimi-coding/kimi-k2.6": { - "successes": 4, + "successes": 5, "failures": 0, "timeouts": 0, - "totalTokens": 1590810, - "totalCost": 0.22167976, - "lastUsed": "2026-05-08T13:36:05.865Z", + "totalTokens": 4682735, + "totalCost": 0.25357486, + "lastUsed": "2026-05-12T20:54:43.410Z", "successRate": 1, - "total": 4 + "total": 5 }, "minimax/MiniMax-M2.7": { "successes": 1, @@ -51,6 +51,16 @@ "lastUsed": "2026-05-10T07:26:04.505Z", "successRate": 1, "total": 2 + }, + "kimi-coding/kimi-k2.6": { + "successes": 1, + "failures": 0, + "timeouts": 0, + "totalTokens": 476746, + "totalCost": 0, + "lastUsed": "2026-05-12T20:56:35.833Z", + "successRate": 1, + "total": 1 } }, "discuss-milestone": { @@ -97,6 +107,16 @@ "lastUsed": "2026-05-10T15:16:08.120Z", "successRate": 1, "total": 1 + }, + "kimi-coding/kimi-k2.6": { + "successes": 1, + "failures": 0, + "timeouts": 0, + "totalTokens": 1821480, + "totalCost": 0, + "lastUsed": "2026-05-12T20:57:45.179Z", + "successRate": 1, + "total": 1 } }, "complete-slice": { diff --git a/.sf/safety/evidence-M001-6377a4-S04-T01.json b/.sf/safety/evidence-M001-6377a4-S04-T01.json new file mode 100644 index 000000000..53f1c2f0d --- /dev/null +++ b/.sf/safety/evidence-M001-6377a4-S04-T01.json @@ -0,0 +1,16 @@ +[ + { + "kind": "write", + "toolCallId": "write_1778619443353_32", + "path": ".sf/milestones/M001-6377a4/slices/S04/VERIFICATION_MATRIX.md", + "timestamp": 1778619443535 + }, + { + "kind": "bash", + "toolCallId": "bash_1778619447339_33", + "command": "test -f .sf/milestones/M001-6377a4/slices/S04/VERIFICATION_MATRIX.md && grep -q \"status\" .sf/milestones/M001-6377a4/slices/S04/VERIFICATION_MATRIX.md && echo \"Matrix exists and contains status command info.\"", + "exitCode": 0, + "outputSnippet": "Matrix exists and contains status command info.\n", + "timestamp": 1778619447544 + } +] diff --git a/.sf/traces/guard:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl b/.sf/traces/guard:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl new file mode 100644 index 000000000..9d9068fd9 --- /dev/null +++ b/.sf/traces/guard:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl @@ -0,0 +1 @@ +{"ts":"2026-05-12T20:56:39.435Z","type":"gate_run","traceId":"guard:76c7c307-91b4-426e-8fad-4ff951d5a52e","turnId":"iter-4","gateId":"plan-gate","gateType":"policy","unitType":"execute-task","unitId":"M001-6377a4/S04/T01","milestoneId":"M001-6377a4","sliceId":"S04","outcome":"pass","failureClass":"none","rationale":"Plan files verified","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:56:39.435Z","durationMs":0} diff --git a/.sf/traces/latest b/.sf/traces/latest index a6e02dbe6..97b3a76cb 120000 --- a/.sf/traces/latest +++ b/.sf/traces/latest @@ -1 +1 @@ -pre-dispatch:952f3f1c-1861-4637-a706-54141371ebc7.jsonl \ No newline at end of file +guard:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl \ No newline at end of file diff --git a/.sf/traces/pre-dispatch:2e5b5158-453c-4b09-8dd2-26fa87c8ded5.jsonl b/.sf/traces/pre-dispatch:2e5b5158-453c-4b09-8dd2-26fa87c8ded5.jsonl new file mode 100644 index 000000000..08a8c71bc --- /dev/null +++ b/.sf/traces/pre-dispatch:2e5b5158-453c-4b09-8dd2-26fa87c8ded5.jsonl @@ -0,0 +1,2 @@ +{"ts":"2026-05-12T20:52:04.171Z","type":"gate_run","traceId":"pre-dispatch:2e5b5158-453c-4b09-8dd2-26fa87c8ded5","turnId":"iter-1","gateId":"resource-version-guard","gateType":"policy","unitType":"pre-dispatch","unitId":"iter-1","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"resource version guard passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:52:04.167Z","durationMs":0} +{"ts":"2026-05-12T20:52:04.988Z","type":"gate_run","traceId":"pre-dispatch:2e5b5158-453c-4b09-8dd2-26fa87c8ded5","turnId":"iter-1","gateId":"pre-dispatch-health-gate","gateType":"execution","unitType":"pre-dispatch","unitId":"iter-1","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"pre-dispatch health gate passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:52:04.987Z","durationMs":0} diff --git a/.sf/traces/pre-dispatch:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl b/.sf/traces/pre-dispatch:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl new file mode 100644 index 000000000..91912cdb5 --- /dev/null +++ b/.sf/traces/pre-dispatch:76c7c307-91b4-426e-8fad-4ff951d5a52e.jsonl @@ -0,0 +1,3 @@ +{"ts":"2026-05-12T20:56:38.487Z","type":"gate_run","traceId":"pre-dispatch:76c7c307-91b4-426e-8fad-4ff951d5a52e","turnId":"iter-4","gateId":"resource-version-guard","gateType":"policy","unitType":"pre-dispatch","unitId":"iter-4","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"resource version guard passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:56:38.485Z","durationMs":0} +{"ts":"2026-05-12T20:56:39.307Z","type":"gate_run","traceId":"pre-dispatch:76c7c307-91b4-426e-8fad-4ff951d5a52e","turnId":"iter-4","gateId":"pre-dispatch-health-gate","gateType":"execution","unitType":"pre-dispatch","unitId":"iter-4","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"pre-dispatch health gate passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:56:39.307Z","durationMs":0} +{"ts":"2026-05-12T20:56:39.313Z","type":"gate_run","traceId":"pre-dispatch:76c7c307-91b4-426e-8fad-4ff951d5a52e","turnId":"iter-4","gateId":"planning-flow-gate","gateType":"policy","unitType":"pre-dispatch","unitId":"iter-4","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"planning flow compile gate passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:56:39.312Z","durationMs":0} diff --git a/.sf/traces/pre-dispatch:7b06b885-0539-40d2-81c1-066c2b2f20c5.jsonl b/.sf/traces/pre-dispatch:7b06b885-0539-40d2-81c1-066c2b2f20c5.jsonl new file mode 100644 index 000000000..c7dd4c7f5 --- /dev/null +++ b/.sf/traces/pre-dispatch:7b06b885-0539-40d2-81c1-066c2b2f20c5.jsonl @@ -0,0 +1,2 @@ +{"ts":"2026-05-12T20:56:36.969Z","type":"gate_run","traceId":"pre-dispatch:7b06b885-0539-40d2-81c1-066c2b2f20c5","turnId":"iter-3","gateId":"resource-version-guard","gateType":"policy","unitType":"pre-dispatch","unitId":"iter-3","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"resource version guard passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:56:36.968Z","durationMs":0} +{"ts":"2026-05-12T20:56:37.702Z","type":"gate_run","traceId":"pre-dispatch:7b06b885-0539-40d2-81c1-066c2b2f20c5","turnId":"iter-3","gateId":"pre-dispatch-health-gate","gateType":"execution","unitType":"pre-dispatch","unitId":"iter-3","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"pre-dispatch health gate passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:56:37.700Z","durationMs":0} diff --git a/.sf/traces/pre-dispatch:9ed021af-f7d3-4d67-bfae-5ecbfcbd08b6.jsonl b/.sf/traces/pre-dispatch:9ed021af-f7d3-4d67-bfae-5ecbfcbd08b6.jsonl new file mode 100644 index 000000000..4f14ecb03 --- /dev/null +++ b/.sf/traces/pre-dispatch:9ed021af-f7d3-4d67-bfae-5ecbfcbd08b6.jsonl @@ -0,0 +1,2 @@ +{"ts":"2026-05-12T20:54:44.467Z","type":"gate_run","traceId":"pre-dispatch:9ed021af-f7d3-4d67-bfae-5ecbfcbd08b6","turnId":"iter-2","gateId":"resource-version-guard","gateType":"policy","unitType":"pre-dispatch","unitId":"iter-2","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"resource version guard passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:54:44.466Z","durationMs":0} +{"ts":"2026-05-12T20:54:45.217Z","type":"gate_run","traceId":"pre-dispatch:9ed021af-f7d3-4d67-bfae-5ecbfcbd08b6","turnId":"iter-2","gateId":"pre-dispatch-health-gate","gateType":"execution","unitType":"pre-dispatch","unitId":"iter-2","milestoneId":"M001-6377a4","outcome":"pass","failureClass":"none","rationale":"pre-dispatch health gate passed","findings":"","attempt":1,"maxAttempts":1,"retryable":false,"evaluatedAt":"2026-05-12T20:54:45.217Z","durationMs":0}