Derive pay-down + CSS families by name (milestone 299 steps 5–6, note #2917) #126

Merged
bvandeusen merged 6 commits from dev into main 2026-08-23 00:32:07 -04:00
Owner

Lands on main:

  • Milestone 299 steps 5–6 — one-time derive pay-down (a2b377b): dead views deleted (TaskViewerView, UserManagementView, LogsView); shared recipes moved to editor-shared.css, components.css (.page-container, .fs-input), new rules-shared.css and dup-report.css; apiErrorMessage() replaces 10 hand-rolled error parses; ledger 4693 → 4556 shapes, 0 unclassified / proposals / divergence.
  • CSS derive families are names, never bodies (8511144, note #2917): derive_groups no longer puts CSS rows in dup:<sha> groups; a CSS family is the same class defined in ≥2 files (code keeps identical-body-in-2 / same-name-in-3). The write-time derive line says "repeated name … defined in N other file(s)" for name families and dismisses CSS families with scoped-css. Skills updated; plugin 0.1.41.

CI green on head 8511144 (run 4260).

🤖 Generated with Claude Code

Lands on main: - **Milestone 299 steps 5–6 — one-time derive pay-down** (`a2b377b`): dead views deleted (TaskViewerView, UserManagementView, LogsView); shared recipes moved to `editor-shared.css`, `components.css` (`.page-container`, `.fs-input`), new `rules-shared.css` and `dup-report.css`; `apiErrorMessage()` replaces 10 hand-rolled error parses; ledger 4693 → 4556 shapes, 0 unclassified / proposals / divergence. - **CSS derive families are names, never bodies** (`8511144`, note #2917): `derive_groups` no longer puts CSS rows in `dup:<sha>` groups; a CSS family is the same class defined in ≥2 files (code keeps identical-body-in-2 / same-name-in-3). The write-time derive line says "repeated name … defined in N other file(s)" for name families and dismisses CSS families with `scoped-css`. Skills updated; plugin 0.1.41. CI green on head `8511144` (run 4260). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bvandeusen added 6 commits 2026-08-23 00:32:02 -04:00
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)
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 10s
CI & Build / TypeScript typecheck (push) Successful in 34s
CI & Build / integration (push) Successful in 34s
CI & Build / Python tests (push) Failing after 54s
CI & Build / Build & push image (push) Skipped
a72605de8f
The derive queue said the biggest duplicate families were whole views:
TaskViewerView, UserManagementView and LogsView were imported nowhere — left
behind when tasks moved to the editor and users/logs became SettingsView
tabs. Deleted (rule 22). Note/TaskEditorView carried six identical scoped
rules -> editor-shared.css (the .tag-suggest-row gap the scoped copies
actually rendered wins). Three views wrapped the page under three names ->
.page-container in components.css. Three scoped input recipes -> the design
system fs-input recipe (snippet #2336), verbatim, in components.css; width/
box-sizing stay with the caller. The three rules panes share .pane and the
pane heading via rules-shared.css (the auth-shared pattern, #2852).

Ledger: a single-declaration CSS rule keeps its selector in its fingerprint,
so `color: var(--fs-text-tertiary)` under five different names is no longer
a five-file "identical body" family — the first pay-down found that most of
the 148 dup families were exactly this, and nobody would consolidate them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test(coverage): the two-declaration floor check compares two multi-line rules — formatting is part of the fingerprint, as before (#2903)
CI & Build / Python lint (push) Successful in 4s
CI & Build / Plugin hooks (push) Successful in 9s
CI & Build / TypeScript typecheck (push) Successful in 24s
CI & Build / integration (push) Successful in 29s
CI & Build / Python tests (push) Successful in 1m10s
CI & Build / Build & push image (push) Successful in 39s
48f0630dab
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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)
CI & Build / Python lint (push) Successful in 5s
CI & Build / Plugin hooks (push) Successful in 11s
CI & Build / integration (push) Successful in 27s
CI & Build / TypeScript typecheck (push) Successful in 33s
CI & Build / Python tests (push) Successful in 1m9s
CI & Build / Build & push image (push) Successful in 41s
449f437048
KnowledgeView's own comment asked for this promotion once a second view grew the
panel. The sheet carries .dup-panel / .dup-empty,.dup-head / .dup-group /
.dup-members / .dup-member(+:hover) / .dup-score; each view keeps only its
extras (.dup-claimed, .dup-action).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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)
CI & Build / Python lint (push) Successful in 4s
CI & Build / Plugin hooks (push) Failing after 9s
CI & Build / integration (push) Successful in 28s
CI & Build / TypeScript typecheck (push) Successful in 33s
CI & Build / Python tests (push) Successful in 1m11s
CI & Build / Build & push image (push) Successful in 38s
590203a293
tests/helpers.http_sink replaces three module-local _Sink handlers (the
write-path tests and the after-write test). ProjectView + SettingsView
parsed `(e as {body?:{error?}}).body?.error || fallback` by hand ten times
beside the apiErrorMessage canon (#2853) - all ten now call it. The
extractor (server + the hook awk mirror) no longer reads `import { type Foo }`
as a definition of Foo - that was the last "identical body" sym family.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
chore(plugin): 0.1.40 — the extractor rule change in scribe_defs.sh ships to the executing cache (#2904)
CI & Build / Python lint (push) Successful in 4s
CI & Build / Plugin hooks (push) Successful in 9s
CI & Build / integration (push) Successful in 29s
CI & Build / TypeScript typecheck (push) Successful in 36s
CI & Build / Python tests (push) Successful in 1m6s
CI & Build / Build & push image (push) Successful in 16s
a2b377b74d
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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)
CI & Build / Python lint (push) Successful in 4s
CI & Build / Plugin hooks (push) Successful in 10s
CI & Build / integration (push) Successful in 25s
CI & Build / TypeScript typecheck (push) Successful in 32s
CI & Build / Python tests (push) Successful in 1m0s
CI & Build / Build & push image (push) Successful in 25s
85111442a6
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bvandeusen merged commit 144192754c into main 2026-08-23 00:32:07 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledScribe#126