70d84fbfd7
ci(integration): print the runner facts that rules 79 and 81 assert (#3237)
bvandeusen2026-08-31 08:20:11 -04:00
9d8104f7a5
fix(embeddings): key_share alone is FOR NO KEY UPDATE, not FOR KEY SHARE (#3262)
bvandeusen2026-08-31 08:13:29 -04:00
7827b4ce63
fix(embeddings): the index refresh loses the race it used to deadlock (#3262)
bvandeusen2026-08-31 08:09:09 -04:00
69ce7afc45
fix(ci): /api/version reported the channel where the build belongs (rule 149)
bvandeusenandClaude Opus 52026-08-31 00:45:22 -04:00
b267037911
Two milestones: a note can carry its own check (317), and a rule keeps what it used to say (323) (#135)
bvandeusen2026-08-31 00:01:15 -04:00
5c9bb40777
feat(rules): a session is told when its rules move under it (#3244, milestone 323 step 5)
bvandeusenandClaude Opus 52026-08-30 13:02:00 -04:00
a8b2040216
feat(rules): the edit history is visible in the slide-over (#3243, milestone 323 step 4)
bvandeusenandClaude Opus 52026-08-30 12:52:07 -04:00
0704988528
feat(rules): the history is readable — service, REST and MCP (#3242, milestone 323 step 3)
bvandeusenandClaude Opus 52026-08-29 23:46:15 -04:00
255c43a8fe
fix(tests): the rule-history fixture must not delete a book the embedder is still writing (#3241)
bvandeusenandClaude Opus 52026-08-29 23:28:03 -04:00
9006affda8
feat(rules): a rule keeps what it used to say — rule_versions (#3240, milestone 323 step 1)
bvandeusenandClaude Opus 52026-08-29 18:38:16 -04:00
9657478500
docs(notes): the guidance gains the sharper test and the three false candidates (#3180, milestone 317 step 6)
bvandeusen2026-08-29 00:16:18 -04:00
1d65e98ac2
docs(notes): the surfaces say WHEN a note earns a check, and a guard keeps them saying it (#3168, milestone 317 step 5)
bvandeusen2026-08-29 00:10:43 -04:00
1ec44071d2
feat(ui): a note's check is editable, dated and sweepable (#3167, milestone 317 step 4)
bvandeusen2026-08-28 22:04:00 -04:00
b51621fca7
fix(tests): the sweep assertions read the WHERE clause, not the SELECT list (#3166)
bvandeusen2026-08-28 16:59:41 -04:00
8489206224
feat(notes): the sweep — which notes assert a fact nobody has confirmed (#3166, milestone 317 step 3)
bvandeusen2026-08-28 16:39:50 -04:00
4736a0a0ba
fix(tests): the recurrence stand-ins come from fake_note, not a bare MagicMock (#3164)
bvandeusen2026-08-28 16:01:28 -04:00
700ef20eb0
feat(notes): a note's check is writable through both doors, and empty means empty (#3164, milestone 317 step 2)
bvandeusen2026-08-28 15:42:12 -04:00
b134fe9aa1
fix(tests): the column guard names join tables as _BACKED_UP holds them (#3182)
bvandeusen2026-08-28 15:24:38 -04:00
a6ef3a6a5a
fix(backup): a restore stops flattening the record vocabulary, and a column guard stops the next one (#3182)
bvandeusen2026-08-28 15:22:50 -04:00
2263fd04a4
fix(tests): the notes table has 27 columns — deleted_batch_id is the second deliberate exclusion (#3165)
bvandeusen2026-08-28 14:55:44 -04:00
2065781302
feat(notes): a note can carry its own check — verify_with, expires_when, verified_at (#3165, milestone 317 step 1)
bvandeusen2026-08-28 14:54:07 -04:00
454c617ca0
docs(models): the record-splitting rule gets a findable home — note 3163 (#3128 rec 9)
bvandeusen2026-08-28 13:11:02 -04:00
f80401d58e
fix(knowledge): the browse vocabulary catches up three kinds, and a snippet's mirror survives the generic door (#3128 recs 2-6)
bvandeusen2026-08-28 12:06:43 -04:00
d0a2733cb6
fix(design): text on a tint of itself now clears AA app-wide, and the check gates it (#3141)
bvandeusenandClaude Opus 52026-08-27 21:38:09 -04:00
0c74dc8275
fix(design): badge text clears AA — the ladder was painting a hue on a tint of itself (#3132)
bvandeusenandClaude Opus 52026-08-27 19:11:14 -04:00
056c7c75da
A task's kind is correctable — the Kind select stops lying (#3129)
bvandeusen2026-08-27 18:05:16 -04:00
63036ed52e
merge: bring main's rebased history into dev after PR #132bvandeusen2026-08-27 18:00:32 -04:00
2e39dca9cf
fix(tasks): import minted_kind by name — a stubbed service must not stub the guard (#3129)
bvandeusenandClaude Opus 52026-08-27 15:57:06 -04:00
5aabc31ee7
Rules that can go stale say so — verify_with, expires_when, the sweep, and task_kind='spike' (milestone 312, steps 1–5)
bvandeusen2026-08-27 13:43:57 -04:00
e2e64b94c0
feat(tasks): task_kind gains 'spike' — the investigation, not the change (#3099, milestone 312 step 5)
bvandeusenandClaude Opus 52026-08-27 12:02:41 -04:00
3345be84d1
feat(rules): the check is editable, visible, and sweepable in the UI (#3098, milestone 312 step 4)
bvandeusenandClaude Opus 52026-08-27 11:53:35 -04:00
35c632f834
docs(rules): a project rule is shaped differently, not just scoped differently (milestone 312)
bvandeusenandClaude Opus 52026-08-27 11:29:10 -04:00
b97f57ee7f
feat(rules): the staleness sweep — which standing rules assert a fact nobody has confirmed (#3097, milestone 312 step 3)
bvandeusenandClaude Opus 52026-08-27 10:49:47 -04:00
91b34619f9
feat(rules): the write path carries a rule's check, and empty finally means empty (#3096, milestone 312 step 2)
bvandeusenandClaude Opus 52026-08-27 09:28:03 -04:00
3d4f5be711
feat(rules): a rule can carry its own check — verify_with, expires_when, verified_at (#3095, milestone 312 step 1)
bvandeusenandClaude Opus 52026-08-27 07:44:13 -04:00
88e9c0b0bd
feat(tasks): task_kind gains 'spike' — the investigation, not the change (#3099, milestone 312 step 5)
bvandeusenandClaude Opus 52026-08-27 12:02:41 -04:00
c83bedf3be
feat(rules): the check is editable, visible, and sweepable in the UI (#3098, milestone 312 step 4)
bvandeusenandClaude Opus 52026-08-27 11:53:35 -04:00
9d7485df2d
docs(rules): a project rule is shaped differently, not just scoped differently (milestone 312)
bvandeusenandClaude Opus 52026-08-27 11:29:10 -04:00
410d616c22
feat(rules): the staleness sweep — which standing rules assert a fact nobody has confirmed (#3097, milestone 312 step 3)
bvandeusenandClaude Opus 52026-08-27 10:49:47 -04:00
c61925be76
feat(rules): the write path carries a rule's check, and empty finally means empty (#3096, milestone 312 step 2)
bvandeusenandClaude Opus 52026-08-27 09:28:03 -04:00
e08e999406
feat(rules): a rule can carry its own check — verify_with, expires_when, verified_at (#3095, milestone 312 step 1)
bvandeusenandClaude Opus 52026-08-27 07:44:13 -04:00
02c1e37620
feat(rules): the write path can notice a standing rule it was never given (#3031, milestone 307 step 5, hook arm)
bvandeusenandClaude Opus 52026-08-26 16:35:36 -04:00
cd9aa87aa4
feat(rules): tier 1 preloads, tier 2 arrives by area — and a split rule can no longer be read half-way (#3031, milestone 307 step 5)
bvandeusenandClaude Opus 52026-08-26 15:10:41 -04:00
8b60d552d2
feat(rules): the rule editor asks when it applies, and the list shows its age (#3029, milestone 307 step 3, UI)
bvandeusenandClaude Opus 52026-08-26 14:23:40 -04:00
ffb7a0fe38
feat(rules): both doors carry the trigger, the tier, the areas and the edges (#3029, milestone 307 step 3, surfaces)
bvandeusenandClaude Opus 52026-08-26 14:17:41 -04:00
6ddb8bf859
feat(rules): a rule can say when it applies, which area it is about, and what it belongs with (#3029, milestone 307 step 3, schema)
bvandeusenandClaude Opus 52026-08-26 14:11:32 -04:00
c58529718b
feat(systems): the catalog reaches the moment a name is minted, and gets a face (#3028, milestone 307 step 2)
bvandeusenandClaude Opus 52026-08-26 12:58:30 -04:00
a97547fbc6
feat(systems): the area vocabulary becomes a global table so a rule can point at one (#3027, milestone 307 step 1)
bvandeusenandClaude Opus 52026-08-26 12:31:18 -04:00
6b1f5e8031
Merge pull request 'Three fixes where the capability already existed and only the door was missing (#2782, #2975, #2278)' (#130) from dev into main
bvandeusen2026-08-24 07:56:44 -04:00
a8f35e465e
refactor(plugin+tests): the last two parallel-family gaps — pageable list tools, one config preamble (#2278)
bvandeusenandClaude Fable 52026-08-24 01:28:07 -04:00
64bfa5725f
feat(telemetry): a read surface over retrieval_logs — the tuning loop had no read half (#2975)
bvandeusenandClaude Fable 52026-08-23 22:48:54 -04:00
446d6da0d7
fix(snippets): an annotated record is not a diverged one — a standing verdict vouches at its commit (#2782)
bvandeusenandClaude Fable 52026-08-23 22:36:04 -04:00
136dbc16a6
Merge pull request 'Dead CSS deleted, and the instrument that found it sharpened (#2962, #2970)' (#129) from dev into main
bvandeusen2026-08-23 21:34:17 -04:00
57f6982f56
test(ledger): the transition/prefix references clear the flag end to end; plugin 0.1.45 (#2970)
bvandeusenandClaude Fable 52026-08-23 21:30:21 -04:00
4179f3e560
refactor(frontend): the second sweep — scoped rules that no longer match their own template (#2962)
bvandeusenandClaude Fable 52026-08-23 21:21:43 -04:00
c5faaf38fb
refactor(frontend): delete the dead CSS the consumer map surfaced — 102 classes, 588 lines (#2962)
bvandeusenandClaude Fable 52026-08-23 21:16:06 -04:00
649fdff2ea
Merge pull request 'The CSS pay-down: 72 name families derived or dismissed with the consumer map in hand (milestone 302 step 4)' (#128) from dev into main
bvandeusen2026-08-23 21:03:33 -04:00
9190fa0f10
refactor(frontend): the pay-down edits the first script dropped after its assertion stop — SharedWithMe/ProjectView page-header+empty-msg remainders, DesignSystems/Settings field-hint+.input trims, pane form-buttons deletions (milestone 302 step 4)
bvandeusenandClaude Fable 52026-08-23 17:34:07 -04:00
6fb0cb38a5
refactor(frontend): CSS pay-down, derive batch (milestone 302 step 4) — page-header, error-msg/state-msg/empty-msg, empty-title/empty-sub, required, field-hint recipes into components.css; form-buttons into rules-shared.css; scoped copies trimmed to remainders/overrides; the three views' .input becomes fs-input + width/box-sizing remainder (canon #2336)
bvandeusenandClaude Fable 52026-08-23 17:30:43 -04:00
cba542a3ec
Merge pull request 'Hooks say when Scribe didn't answer; the CSS consumer map (milestone 302 steps 1–3)' (#127) from dev into main
bvandeusen2026-08-23 14:18:32 -04:00
c28c87c39e
test(ledger): the consumer-map integration test owns its unreferenced rule — the seeded button.css row vanishes under the test's own tree (#2936)
bvandeusenandClaude Fable 52026-08-23 14:09:04 -04:00
8664d8ad14
feat(ledger): the consumer map surfaces — every css row carries used_by on list_shapes, flag="unused-css" (the map's negative space, surfaced never deleted), derive groups and the write-path family carry consumers, the derive line says "used by N template(s)", coverage payload unused_css + the standing block; docs, SKILL, plugin 0.1.44; the two step-2 tests expected 5 edges where fan-out makes 6 (milestone 302 step 3, #2936)
bvandeusenandClaude Fable 52026-08-23 14:03:35 -04:00
ffbdf19116
feat(ledger): the CSS consumer map — code_shape_consumers edges (shape → file whose markup names the class, count), migration 0086, resolve_consumers (own-file row when the template defines the class, else every other definition), sync_repo_consumers rebuilt from the archive on every refresh, consumers_of; derived, so not backed up (milestone 302 step 2, #2935)
bvandeusenandClaude Fable 52026-08-23 13:59:55 -04:00
dffbf43d84
feat(coverage): class_references + scan_archive — each template-bearing file's class tokens (static class=/className=, Vue :class object/array/ternary, React className={…}, Svelte class:x) read in the same tar walk as definitions; the CSS consumer map's extractor (milestone 302 step 1, #2934)
bvandeusenandClaude Fable 52026-08-23 13:57:13 -04:00
31383bcebe
test(hooks): the two tests that read a refused connection as "nothing recorded" now answer through a sink, and the silence case removes the shape it had left behind (#2932)
bvandeusenandClaude Fable 52026-08-23 11:05:42 -04:00
0ab94b2a00
fix(plugin): write-path hooks say when Scribe did not answer — once per outage, shared marker, record nudge withheld on an unanswered call; check_plugin allows exactly that line when unreachable; plugin 0.1.43 (#2932)
bvandeusenandClaude Fable 52026-08-23 10:59:54 -04:00
9c00a4b6e1
fix(plugin): after-write hook waits 8s on the prior-art call — a cold-start round-trip (~4.6s after a redeploy) failed open at 4s and dropped the ledger line on the first write; plugin 0.1.42
bvandeusenandClaude Fable 52026-08-23 01:06:08 -04:00
144192754c
Merge pull request 'Derive pay-down + CSS families by name (milestone 299 steps 5–6, note #2917)' (#126) from dev into main
bvandeusen2026-08-23 00:32:07 -04:00
85111442a6
feat(ledger): CSS derive families are names, never bodies — name floor 2 for css, dup: grouping sym-only; derive line says "repeated name" and dismisses scoped-css; plugin 0.1.41 (note #2917)
bvandeusenandClaude Fable 52026-08-23 00:21:17 -04:00
a2b377b74d
chore(plugin): 0.1.40 — the extractor rule change in scribe_defs.sh ships to the executing cache (#2904)
bvandeusenandClaude Fable 52026-08-22 15:12:54 -04:00
590203a293
refactor(tests+frontend): one http_sink helper for the hook tests; apiErrorMessage replaces ten hand-rolled error-body parses; type X, import specifiers are not definitions (#2904, milestone 299 step 6)
bvandeusenandClaude Fable 52026-08-22 15:07:23 -04:00
449f437048
refactor(frontend): the near-duplicate report rules shared via dup-report.css — KnowledgeView and SnippetListView carried identical scoped copies (#2903, milestone 299 step 5, part 2)
bvandeusenandClaude Fable 52026-08-22 15:03:12 -04:00
48f0630dab
test(coverage): the two-declaration floor check compares two multi-line rules — formatting is part of the fingerprint, as before (#2903)
bvandeusenandClaude Fable 52026-08-22 14:59:38 -04:00
a72605de8f
refactor(frontend): the last pay-down, part 1 — three dead views deleted, editor rules shared, .page-container + .fs-input canon, rules-shared.css; a one-declaration CSS body is not a shape (#2903, milestone 299 step 5)
bvandeusenandClaude Fable 52026-08-22 14:55:28 -04:00
4fa8158329
Merge pull request 'Self-surfacing DRY — duplicate families named at the write and on arrival, tool-agnostic (milestone 299 steps 1–4)' (#125) from dev into main
bvandeusen2026-08-22 13:41:24 -04:00
10687120a5
docs(self-surfacing): derive groups are drift not audit material — shape-accounting + reusing-code skills, static floor, plugin README (after-write hook), api-reference rows (#2902, milestone 299 step 4)
bvandeusenandClaude Fable 52026-08-22 13:38:06 -04:00
b88225eeb3
fix(hooks): after-write dedups its channel files; prior-art tests follow the extractor and skip list into scribe_defs.sh (#2901)
bvandeusenandClaude Fable 52026-08-22 13:38:06 -04:00
5925335ca0
feat(plugin): after-write hook — PostToolUse on Bash diffs the working tree and runs the prior-art + ledger arms on what was just written; shared scribe_defs.sh; plugin 0.1.39 (#2901, milestone 299 step 3)
bvandeusenandClaude Fable 52026-08-22 13:35:45 -04:00