diff --git a/frontend/src/App.vue b/frontend/src/App.vue index f7535fb4..dc5b31d3 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -13,11 +13,10 @@ import { fetchVersion } from "@/api/version"; useTheme(); const router = useRouter(); -// THREE states, not two (#3127 checklist 12). `null` is "not answered yet" and -// renders nothing; a string renders; `appVersionFailed` renders its own thing. -// This used to default to the literal "dev" and swallow the error, which meant -// an instance that could not answer was indistinguishable from a local build -// that genuinely reports "dev" — a blank standing in for `unknown`, in the one +// THREE states, not two. `null` is "not answered yet" and renders nothing; a +// string renders; `appVersionFailed` renders its own thing. Defaulting to the +// literal "dev" and swallowing the error would make an instance that cannot +// answer indistinguishable from a local build that genuinely reports "dev" — a blank standing in for `unknown`, in the one // readout whose whole job is to say what is running. const appVersion = ref(null); const appVersionFailed = ref(false); diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 2a43779c..01969717 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -41,8 +41,8 @@ async function handleResponse(res: Response, path: string): Promise { /** * The server's `{"error": "..."}` message from a failed call, or `fallback` * when the failure carried none (network error, non-JSON body). The one place - * the error envelope is unpacked on the client — views used to restate this - * as a six-line `"body" in e` branch at every catch site. + * the error envelope is unpacked on the client, so no view restates it as a + * `"body" in e` branch at its catch site. */ export function apiErrorMessage(e: unknown, fallback: string): string { if (e && typeof e === "object" && "body" in e) { @@ -61,8 +61,7 @@ export function apiErrorMessage(e: unknown, fallback: string): string { * surface can show for "pending forever" that is not a lie. * * 30s is chosen to be longer than anything healthy: it has to clear a cold - * embedding call and a list view under connection-pool contention (#2384 had - * /api/projects fanning 25 concurrent sessions at a 15-connection pool), so + * embedding call and a list view under connection-pool contention, so * tripping it means something is genuinely wrong rather than merely busy. Slow * BY DESIGN is a different case and passes its own value — see the callers in * SettingsView that do. diff --git a/frontend/src/api/designSystems.ts b/frontend/src/api/designSystems.ts index 7641ccf7..927a830f 100644 --- a/frontend/src/api/designSystems.ts +++ b/frontend/src/api/designSystems.ts @@ -1,5 +1,5 @@ /** - * Design systems — the stylesheet held as records (milestone #254). + * Design systems — the stylesheet held as records. * * A design system is a named set of tokens with an optional parent. A system * with no parent is a "family"; one with a parent holds ONLY what it changes, @@ -82,8 +82,8 @@ export interface StarterRoleGroup { } /** The starter token ROLES offered at creation — names and purposes, never - * values. A default palette would be one install's taste shipped as product - * (rule #115), so the values are always the operator's to fill. */ + * values. A default palette would be one install's taste shipped as product, + * so the values are always the operator's to fill. */ export const listStarterRoleGroups = () => apiGet<{ groups: StarterRoleGroup[]; default_prefix: string }>( "/api/design-systems/starter-roles", diff --git a/frontend/src/api/lessons.ts b/frontend/src/api/lessons.ts index 066566b7..4de28443 100644 --- a/frontend/src/api/lessons.ts +++ b/frontend/src/api/lessons.ts @@ -88,7 +88,7 @@ export interface Lesson { no_rule?: { why: string; judged_at: string | null }; /** Sent by a create or update that recorded "no rule fits" when that answer * completes a group: lessons with no rule that keep landing in one - * situation, which may want a rule written for it (#4634). */ + * situation, which may want a rule written for it. */ convergence?: { lessons: { id: number; title: string }[] }; /** Set when another user owns this record. */ shared?: boolean; diff --git a/frontend/src/api/snippets.ts b/frontend/src/api/snippets.ts index a5a8daa3..6545b09e 100644 --- a/frontend/src/api/snippets.ts +++ b/frontend/src/api/snippets.ts @@ -30,7 +30,7 @@ export interface SnippetFields { * no `locations`/`tags` predates that attribution and cannot be un-merged. */ merged_from: { id: number; locations?: SnippetLocation[]; tags?: string[] }[]; code: string; - /** Free text that is not the situation — why, history, caveats (#4378). + /** Free text that is not the situation — why, history, caveats. * Kept out of `when_to_use`, which the snippet is ranked on. */ notes: string; } diff --git a/frontend/src/api/systems.ts b/frontend/src/api/systems.ts index 3b750501..38977203 100644 --- a/frontend/src/api/systems.ts +++ b/frontend/src/api/systems.ts @@ -24,7 +24,7 @@ export interface System { open_issue_count: number; /** * How often this area's rulings were shown to a session because its files - * were touched (`surfaced_count`), and how often it was opened (#4769). + * were touched (`surfaced_count`), and how often it was opened. * Present on the list and detail reads; optional because a System returned * by a create or update carries none. */ @@ -45,7 +45,7 @@ export async function listSystems(projectId: number): Promise { * caller to accept or ignore. * * A same-named System in this project is a 409 ApiError carrying - * `{duplicate, existing_id}` — the same gate the MCP door enforces (#2482). + * `{duplicate, existing_id}` — the same gate the MCP door enforces. */ export interface CreatedSystem extends System { canonical_suggestion?: CanonicalMatch; diff --git a/frontend/src/assets/sweep-shared.css b/frontend/src/assets/sweep-shared.css index a2f81dfc..36c0d29f 100644 --- a/frontend/src/assets/sweep-shared.css +++ b/frontend/src/assets/sweep-shared.css @@ -1,4 +1,4 @@ -/* The sweep-row visual language (#3207). +/* The sweep-row visual language. * * A "sweep" is a pane that lists records in the order they most need a human * — the note verification sweep, the rule sweep, preference drift — as one diff --git a/frontend/src/components/AppHeader.vue b/frontend/src/components/AppHeader.vue index dfce0208..1f5fbb7c 100644 --- a/frontend/src/components/AppHeader.vue +++ b/frontend/src/components/AppHeader.vue @@ -132,11 +132,10 @@ router.afterEach(() => { } /* Three tracks, not a flex row with an absolutely-centred overlay. * - * The pill bar used to be `position: absolute; left: 50%`, which meant it did - * not participate in layout: when the header ran out of room it OVERLAPPED the - * brand and the utility cluster rather than pushing them, and nothing wrapped - * or scrolled to signal it. A sixth link reached that point at ~1270px, which - * is an ordinary window on any monitor. + * A pill bar at `position: absolute; left: 50%` does not participate in + * layout: when the header runs out of room it OVERLAPS the brand and the + * utility cluster rather than pushing them, and nothing wraps or scrolls to + * signal it — at an ordinary window width on any monitor. * * `1fr auto 1fr` fixes it structurally. A `1fr` track has an AUTO minimum, so * neither side can be squeezed below its content, and the two side tracks stay @@ -327,7 +326,7 @@ router.afterEach(() => { margin-top: 0.25rem; } -/* The grid above means running out of room can no longer cause a collision — +/* The grid above means running out of room cannot cause a collision — but it can still make the header wider than the window, and a horizontally scrolling header is its own defect. So shed width before that happens. The wordmark goes first: the logo beside it says the same thing and is still the diff --git a/frontend/src/components/LessonsTaughtPanel.vue b/frontend/src/components/LessonsTaughtPanel.vue index 88f93beb..9fc0e966 100644 --- a/frontend/src/components/LessonsTaughtPanel.vue +++ b/frontend/src/components/LessonsTaughtPanel.vue @@ -12,8 +12,7 @@ * A COMPONENT rather than markup inside the task editor, because the same * question is worth answering on any record a lesson can cite — an issue, a * spike, a dev-log. One panel, mounted wherever that is true, instead of the - * shape being written a second time the first time someone wants it on notes - * (#3207). + * shape being written a second time the first time someone wants it on notes. * * SILENT WHEN EMPTY. Most records taught no lesson, and a panel that renders * "None yet" on every page is a panel people learn to skip — which costs the diff --git a/frontend/src/components/ProjectDesignTab.vue b/frontend/src/components/ProjectDesignTab.vue index fa007629..fa2ae3c4 100644 --- a/frontend/src/components/ProjectDesignTab.vue +++ b/frontend/src/components/ProjectDesignTab.vue @@ -1,6 +1,6 @@