Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
197b2f9
docs: shape the state-dedupe change
levifig Aug 8, 2026
40f2245
feat: add the alias-orphan repair migration
levifig Aug 8, 2026
4967a24
fix: resolve markdown-import identity through aliases before deriving…
levifig Aug 8, 2026
b81a572
feat: add the alias-parity diagnostic to loaf state doctor
levifig Aug 8, 2026
91d2d44
fix: prove and sweep before retiring an alias-orphan row
levifig Aug 8, 2026
8ff2b2d
fix: keep colliding journal sparks distinct on markdown import
levifig Aug 8, 2026
873740d
fix: make alias parity mirror the list surfaces and keep it on the do…
levifig Aug 8, 2026
303a082
fix: judge alias-orphans by the operator's word and the evidence's li…
levifig Aug 8, 2026
7e6559e
fix: stop the second colliding spark from evicting the first one's alias
levifig Aug 8, 2026
3b77079
fix: judge a twin by the artifact and sweep the aliases the repair kills
levifig Aug 8, 2026
1f5bebe
fix: keep a repeated spark line from collapsing into one row
levifig Aug 8, 2026
f7bebea
fix: retire every orphan the repair unlocks, in one pass
levifig Aug 8, 2026
515ca26
fix: resolve an imported journal entry by what it says, not who owns it
levifig Aug 8, 2026
f6fab50
fix: let alias parity report damage without condemning the database
levifig Aug 8, 2026
0c2c3c4
docs: expand state-dedupe with the journal-duplicates repair plan
levifig Aug 8, 2026
fb03a95
feat: add the journal-duplicates repair migration
levifig Aug 8, 2026
2177154
docs: correct the ceremony's disposition expectations from rehearsal …
levifig Aug 8, 2026
795be24
fix: sweep polymorphic journal references when retiring duplicate ent…
levifig Aug 8, 2026
c6d1cb6
docs: resolve two fog-register entries from rehearsal evidence
levifig Aug 8, 2026
6ddf695
fix: tolerate a desynced search mirror and prove rollback fidelity
levifig Aug 8, 2026
f16c892
chore: record the state-dedupe verify receipt
levifig Aug 8, 2026
2f4a9e5
docs: align the contract with shipped behavior after the merge-gate a…
levifig Aug 9, 2026
bd97de1
chore: refresh the state-dedupe verify receipt after the contract ali…
levifig Aug 9, 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
2 changes: 1 addition & 1 deletion content/skills/loaf-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Names and one-line purposes only. Run `loaf <command> --help` for options, argum
| `loaf docs` | Manage docs/ indexing | index |
| `loaf change` | Shape-first Change artifacts: git-canonical work context under docs/changes/ | init, check, list |
| `loaf render` | Maintain committed durable Markdown renders | sweep |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate alias-orphans, migrate journal-duplicates, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf journal` | Record and read the project-scoped journal (the durable record across all conversations) | log, recent, search, show, context, export, defer |
| `loaf project` | Manage durable project identity | list, show, identity, rename, move, delete |
| `loaf migrate` | Run native migration workflows | markdown, storage-home, schema, lifecycle-statuses, journal-first, worktree-storage |
Expand Down
2 changes: 1 addition & 1 deletion dist/amp/skills/loaf-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Names and one-line purposes only. Run `loaf <command> --help` for options, argum
| `loaf docs` | Manage docs/ indexing | index |
| `loaf change` | Shape-first Change artifacts: git-canonical work context under docs/changes/ | init, check, list |
| `loaf render` | Maintain committed durable Markdown renders | sweep |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate alias-orphans, migrate journal-duplicates, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf journal` | Record and read the project-scoped journal (the durable record across all conversations) | log, recent, search, show, context, export, defer |
| `loaf project` | Manage durable project identity | list, show, identity, rename, move, delete |
| `loaf migrate` | Run native migration workflows | markdown, storage-home, schema, lifecycle-statuses, journal-first, worktree-storage |
Expand Down
2 changes: 1 addition & 1 deletion dist/codex/skills/loaf-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Names and one-line purposes only. Run `loaf <command> --help` for options, argum
| `loaf docs` | Manage docs/ indexing | index |
| `loaf change` | Shape-first Change artifacts: git-canonical work context under docs/changes/ | init, check, list |
| `loaf render` | Maintain committed durable Markdown renders | sweep |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate alias-orphans, migrate journal-duplicates, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf journal` | Record and read the project-scoped journal (the durable record across all conversations) | log, recent, search, show, context, export, defer |
| `loaf project` | Manage durable project identity | list, show, identity, rename, move, delete |
| `loaf migrate` | Run native migration workflows | markdown, storage-home, schema, lifecycle-statuses, journal-first, worktree-storage |
Expand Down
2 changes: 1 addition & 1 deletion dist/cursor/skills/loaf-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Names and one-line purposes only. Run `loaf <command> --help` for options, argum
| `loaf docs` | Manage docs/ indexing | index |
| `loaf change` | Shape-first Change artifacts: git-canonical work context under docs/changes/ | init, check, list |
| `loaf render` | Maintain committed durable Markdown renders | sweep |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate alias-orphans, migrate journal-duplicates, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf journal` | Record and read the project-scoped journal (the durable record across all conversations) | log, recent, search, show, context, export, defer |
| `loaf project` | Manage durable project identity | list, show, identity, rename, move, delete |
| `loaf migrate` | Run native migration workflows | markdown, storage-home, schema, lifecycle-statuses, journal-first, worktree-storage |
Expand Down
2 changes: 1 addition & 1 deletion dist/opencode/skills/loaf-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Names and one-line purposes only. Run `loaf <command> --help` for options, argum
| `loaf docs` | Manage docs/ indexing | index |
| `loaf change` | Shape-first Change artifacts: git-canonical work context under docs/changes/ | init, check, list |
| `loaf render` | Maintain committed durable Markdown renders | sweep |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate alias-orphans, migrate journal-duplicates, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf journal` | Record and read the project-scoped journal (the durable record across all conversations) | log, recent, search, show, context, export, defer |
| `loaf project` | Manage durable project identity | list, show, identity, rename, move, delete |
| `loaf migrate` | Run native migration workflows | markdown, storage-home, schema, lifecycle-statuses, journal-first, worktree-storage |
Expand Down
2 changes: 1 addition & 1 deletion dist/skills/loaf-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Names and one-line purposes only. Run `loaf <command> --help` for options, argum
| `loaf docs` | Manage docs/ indexing | index |
| `loaf change` | Shape-first Change artifacts: git-canonical work context under docs/changes/ | init, check, list |
| `loaf render` | Maintain committed durable Markdown renders | sweep |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf state` | Manage native SQLite state | path, status, init, doctor, repair legacy-project-database, repair relationship-origin, repair journal-search, migrate markdown, migrate storage-home, migrate schema, migrate deferrals, migrate lifecycle-statuses, migrate alias-orphans, migrate journal-duplicates, migrate journal-first, backup, backup verify, backup restore, restore-ephemerals, verify-ephemerals, export, export all, export triage, export spec, export release-readiness |
| `loaf journal` | Record and read the project-scoped journal (the durable record across all conversations) | log, recent, search, show, context, export, defer |
| `loaf project` | Manage durable project identity | list, show, identity, rename, move, delete |
| `loaf migrate` | Run native migration workflows | markdown, storage-home, schema, lifecycle-statuses, journal-first, worktree-storage |
Expand Down
122 changes: 122 additions & 0 deletions docs/changes/20260807-state-dedupe/receipts/verify.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"schema_version": 2,
"change": "state-dedupe",
"verified_commit": "2f4a9e5680fbf14933ec3f6e24d1a3e38c82bff4",
"verified_root_tree": "2883589a39c16f1cc4cd19c182944dcaf21247d0",
"verified_at": "2026-08-09T01:40:34Z",
"criteria_digest": "9947e96459453f0a5ee2f965cf50f0b7ef770444f928562a5a93a0b4889c0ebb",
"scope_digest": "f69f338b54e4fe1109009a45bd844845f9739da2336394255c8e8f49aaa61daa",
"scope_sections": {
".agents": "0cdcb499203f22e1faebbef89e211e4b6d4b253bc5486866ed28a50e15c2dd9e",
".claude": "8dc123c00b953695edd9ccc4bb966e986bcea05607d9a125e71038a4c2ebb6be",
".github": "1620d60edd726d78c03e1810a690c54669d4dbca40699b4489125696f1b28525",
".gitignore": "4ec1c977b3002200cfe2c9a652cbbe1cb31e934d12a7c0029b1dd6cdc668099a",
".serena": "749668b92acde130ae6a4514f59b9e08bf7095c8bdd47b6b2e5929b0729ba91f",
"AGENTS.md": "96a27c8deab6683f3c9ae669520ed0ed8cd2f22bc71231af8e00e205a7ea71e6",
"README.md": "32cecbbf375e1b689ac4702acc72a81f5ad89be495f87680524b1fcd76f5089b",
"cli": "cccb406db757aa65127b9657fde0c8a20c722c9ec9e3ae16269d1c0b3c21208a",
"cmd": "3d4f455f2eea30cecbef4ea78280e6b86b5b48033074369f476a1805d513d217",
"config": "ed88cb91f75fb35580ffe31433b1664efc91f31253abba6a27a645ddb009ae09",
"content": "869587ab6ca70cb7620dfe09ada7a87a8155898b8473aa17ddd32e510ab73828",
"docs": "c9f38d5ed12702698ddd94f14d5a84e9746fff71895f1fc6aeafc8184bb0851d",
"go.mod": "b9247690761e43ce92335c553e1f916132580b2a1e7f434c7d99742e56fb8b21",
"go.sum": "44a5d68a99a05f3d9aff3321f4b5645d0870cc1afd36e183fbc08c07d8550d6b",
"internal": "093982eb7c220d000b84b8eb643661d4b9e339a06d114163f5283bf6e2f163fb",
"package-lock.json": "9a3e1b4d99a42b2fefa998dd5c753c1f00ee12a43d1a477b674fe04e6c779f01"
},
"exclusions": [
"docs/changes/*/receipts/**",
"docs/changes/*/reports/**",
"package.json",
".claude-plugin/marketplace.json",
"CHANGELOG.md",
"dist/**",
"plugins/**",
"bin/**"
],
"digest_spec": "v1",
"tool_version": "0.2.20",
"toolchain": {
"go": "1.26.5",
"os": "darwin",
"arch": "arm64"
},
"worktree_clean": true,
"results": [
{
"id": "V1",
"command": "go test ./internal/state -run 'AliasOrphan' -count=1",
"exit_code": 0,
"output_digest": "7440b3f39d37c66c45ccfe537c30b2416ce08190ec2a806d056f380c4ef7350e",
"ok": true,
"expect": "exit 0.",
"expect_checks": [
{
"kind": "exit",
"value": "0",
"ok": true
}
]
},
{
"id": "V2",
"command": "go test ./internal/state -run 'ImportAliasFirst' -count=1",
"exit_code": 0,
"output_digest": "e845c5b2606eb00052422cb37dae96c5123333538541ce34d42492e543b7efaa",
"ok": true,
"expect": "exit 0.",
"expect_checks": [
{
"kind": "exit",
"value": "0",
"ok": true
}
]
},
{
"id": "V3",
"command": "go test ./... -run 'AliasParity' -count=1",
"exit_code": 0,
"output_digest": "1b3e6a16b7b8079aa560fb2c833280990e9a5dae2e13cd17c51e14ade000802d",
"ok": true,
"expect": "exit 0.",
"expect_checks": [
{
"kind": "exit",
"value": "0",
"ok": true
}
]
},
{
"id": "V4",
"command": "go test ./...",
"exit_code": 0,
"output_digest": "41852648a8b4ea3df781fcb34395bfebf21796b861376e9175b73463ac53833c",
"ok": true,
"expect": "exit 0.",
"expect_checks": [
{
"kind": "exit",
"value": "0",
"ok": true
}
]
},
{
"id": "V5",
"command": "go test ./internal/state -run 'JournalDuplicate' -count=1",
"exit_code": 0,
"output_digest": "2c8c42a2d80f0c91ed00a3a451c2e1848fabc97650639bdd4ce5e24040685fe5",
"ok": true,
"expect": "exit 0.",
"expect_checks": [
{
"kind": "exit",
"value": "0",
"ok": true
}
]
}
]
}
Loading
Loading