docs(6210): acceptance sweep — src, scripts and frontend leftovers described in the present tense
CI & Build / Python lint (push) Successful in 2s
CI & Build / Plugin hooks (push) Successful in 12s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m9s
CI & Build / Python tests (push) Successful in 1m55s
CI & Build / Build & push image (push) Successful in 34s

The acceptance greps found what the per-area passes missed:

- src/scribe: "Phase 7/8" removal notes in projects, settings and
  user_profile; a paragraph promising an auto-summary side effect that no
  longer exists; user_profile's claim that "upcoming MCP profile tools" read
  the profile, which nothing does; an instance count and instance rule
  titles in plugin_context; "MILESTONE 323 DECIDED" in rulebooks.
- scripts/: check_plugin's header and inline comments were a history of
  the incidents behind each guard, with issue numbers in two failure
  messages; check_dangling_styles named this app's classes as its examples;
  check_design_tokens, measure_duplication and mint_plugin_version cited
  issues and checklists.
- frontend/src: forty-odd comments with four-digit issue numbers that the
  earlier frontend scan filtered out as hex colours, plus "used to" and
  "Phase N" notes.

Kept: illustrative ids (`#4181` as a bare-id example, `PR #198`), migration
Create Date headers and one migration's dated data floor, and the plugin
skills' worked examples of how to cite a record.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-21 21:54:38 -04:00
co-authored by Claude Opus 5.5
parent 4c150cbc2f
commit 067aa58fbc
40 changed files with 199 additions and 257 deletions
+8 -9
View File
@@ -1,13 +1,12 @@
<script setup lang="ts">
/**
* Design systems — the stylesheets this install RECORDS, for the projects it
* tracks (milestone #254 step 5).
* tracks.
*
* It had a sibling, `/design`, which showed the system as the BROWSER had it —
* names out of a bundled stylesheet, values out of `getComputedStyle`. That
* could only ever describe the install serving the page, so it was a mirror
* rather than a tool and was retired (#274). Everything here works on a system
* whose app this browser has never loaded.
* Showing the system as the BROWSER has it — names out of a bundled
* stylesheet, values out of `getComputedStyle` — could only describe the
* install serving the page, a mirror rather than a tool. Everything here works
* on a system whose app this browser has never loaded.
*
* The layout follows the model rather than decorating it. A system with a
* parent holds only what it changes, so this page has two lists and they are
@@ -153,7 +152,7 @@ const newTitle = ref("");
const newDescription = ref("");
const newParentId = ref<number | null>(null);
const creating = ref(false);
// Starter roles (#2349). The picker fills these on mount; empty means the
// Starter roles. The picker fills these on mount; empty means the
// operator unchecked everything, which is a real answer.
const starterGroups = ref<string[]>([]);
const tokenPrefix = ref("");
@@ -500,8 +499,8 @@ watch(selectedId, () => {
* `var()` reference states nothing on its own: rendering
* `color-mix(in srgb, var(--accent) 15%, transparent)` as a background resolves
* `--accent` against THIS app, so a system that isn't the one Scribe runs on
* would be drawn in Scribe's palette. It looked right, which is why it went
* unnoticed (#274).
* would be drawn in Scribe's palette — and look right, which is why it would
* go unnoticed.
*
* The preview above resolves values properly, on a probe carrying only that
* system's declarations. So this list draws only what needs no resolving, and
+2 -2
View File
@@ -14,8 +14,8 @@
*
* IT BINDS NOBODY, and the page says so once, plainly. That sentence is the
* difference between this kind and a rule, and it is the reason the kind
* exists (#3727) — sessions were proposing rules for things that should never
* have bound anyone.
* exists — without it, sessions propose rules for things that should never
* bind anyone.
*
* BUT IT CAN POINT AT ONE. A lesson that is an instance of a
* rule says so, and the page shows which of the three answers it holds: the
+1 -1
View File
@@ -231,7 +231,7 @@ async function save(force = false) {
? await updateLesson(lessonId.value, payload)
: await createLesson(payload);
toast.show(isEdit.value ? "Lesson updated" : "Lesson recorded");
// "No rule fits" just completed a group of lessons in one situation (#4634).
// "No rule fits" just completed a group of lessons in one situation.
// Said once, here, because the page this goes to does not recompute it.
if (saved.convergence) {
toast.show(
+3 -2
View File
@@ -116,8 +116,9 @@ function truncate(text: string | null, max = 120): string {
return text.length > max ? text.slice(0, max) + "..." : text;
}
// A card is a glance, not a report. Roundtable had ~35 milestones and its tile
// ran several viewport-heights tall, which made the grid unreadable (#2391).
// A card is a glance, not a report. A project with dozens of milestones would
// otherwise run its tile several viewport-heights tall and make the grid
// unreadable.
const MAX_MILESTONE_BARS = 10;
interface MilestoneBar extends MilestoneSummary {
-2
View File
@@ -977,8 +977,6 @@ onMounted(async () => {
// Load user profile
await loadProfile();
// Load journal config (locations, temp unit; prep/closeout UI removed in Phase 7)
// Check SearXNG status
try {
const sr = await apiGet<{ configured: boolean; searxng_url: string }>("/api/settings/search");
+1 -1
View File
@@ -35,7 +35,7 @@ function locParts(loc: { repo: string; path: string; symbol: string }): string[]
return [loc.repo, loc.path, loc.symbol].filter((p) => p && p.trim());
}
// Un-merge (#2165)
// Un-merge
const unmerging = ref<number | null>(null);
/** Only entries carrying what the source contributed can be reversed exactly.
-3
View File
@@ -119,9 +119,6 @@ async function toggleSubTask(sub: SubTask) {
const showPreview = ref(false);
const sidebarOpen = ref(true);
// reconsolidate / isBodyAutoMaintained removed in Phase 8 — the curator
// that auto-maintained task bodies is gone, so the body editor is now
// always user-controlled.
const editorRef = ref<InstanceType<typeof TiptapEditor> | null>(null);
const titleRef = ref<HTMLInputElement | null>(null);
const tiptapEditor = computed<Editor | null>(() => {