aboutsummaryrefslogtreecommitdiff
path: root/docs
Commit message (Collapse)AuthorAgeFilesLines
* feat(gallery): slide-rule unit stops, zoom-safe clicks, and four facesCraig Jennings8 hours2-20/+75
| | | | | | | | Clicks compared e.clientX (visual px, scaled by the size toggle's CSS zoom) against layout-px mark coordinates, so at M or L size nearest-mark snapping picked the wrong stop, usually the far end — the dial felt impossible to select. The click handler now divides the zoom out (offsetWidth over rect width), and the widget shows a subtle outline on click focus so it reads as armed for arrow keys. The printed numerals are now majors with minor ticks at the integer units between them, all selectable: click a numeral, a mark, or between marks, and arrows step one unit instead of one numeral. The spec sheet claimed drag-only input, which was never true; it now names the click and key idioms. The face rides new --tn-* vars and GW.slideRule gains opts.skin plus setStyle backed by GW.slideRule.STYLES: warm backlit (shipped default), chrome with dark ink, 80s black glass with an LED-red needle, and marantz blue with a pale needle. Card 25 joins the styleChips rig.
* feat(gallery): give the segmented selector amber, green, and red accentsCraig Jennings8 hours2-29/+30
| | | | | | The lit segment rides new --seg-on-* vars with the shipped amber as the stylesheet fallback, and GW.segmented gains opts.accent plus setStyle backed by GW.segmented.STYLES, the same shape as the slide toggle. Card 06 is the third chips demo rig, so the per-card IIFEs collapse into one styleChips(no, STYLES, AXES) helper serving cards 01, R05, and 06.
* feat(gallery): add a live validation tally with an audit stepperCraig Jennings9 hours1-3/+68
| | | | | | | | The index panel gains a Validation section: done / in progress / not done counts with a total, each row carrying a mini lamp dot in the matching state color. Every lamp click recounts, so the tally always mirrors the cards. Clicking a row starts an audit of that state: the page jumps to the first matching card and a pill docks bottom-right showing the position (2/5 · next). Clicking the pill advances through the rest without scrolling back to the index, the x or Esc dismisses it, and the card list re-reads on every step so lamp changes mid-audit are picked up. setV fires while its card is still detached from the document, so the running count lags the last card by one during the build. A final recount after all cards land closes the gap.
* fix(gallery): drop the lab parchment panel skin, restore the cream cap finishCraig Jennings9 hours2-12/+11
| | | | ca006d8 removed the cream cap color, but the parchment to retire was the lab panel skin. The panel axis is now silver / studio with silver as the default, and cream returns to the cap-color axis.
* fix(gallery): drop the chrome-on-chrome index line and the cream cap colorCraig Jennings9 hours2-4/+4
| | | | | | Bare metal needs no painted stripe, so the chrome cap shape in the chrome finish renders lineless. Other shapes keep their index line in every finish. The cream finish is gone from the color axis along with its now-unused gradient. The stripe set stands at black, red, green, blue, amber, plus the chrome body.
* feat(gallery): rebuild R05 filter bank with three skin axesCraig Jennings9 hours2-29/+137
| | | | | | | | The old card was a sketch: eight bare tracks and flat teal arrows floating on the card background. Real slider banks (the Vieltronix filter, the Pioneer SG-9500, the Technics SH-8065, the Zaxcom Oasis) have a faceplate, dual dB rails, dense bands, and caps that read as machined parts. The rebuilt bank draws twelve bands on a screwed faceplate with tick rails both sides. Skins ship as constructor opts backed by GW.filterBank.STYLES on three independent axes: panel (lab parchment / silver aluminum / studio black), cap shape (tall block fader / short ribbed / chrome T), and cap color (black white-index / red, green, blue, amber stripes / chrome / cream). Shape and color are separate axes so any finish applies to any cap. opts.style picks a native trio. setStyle(axis, name) restyles a live instance with values preserved. The card grows chip groups driving setStyle, the same demo-rig pattern as the slide toggle. Values shorter than a custom freqs list now pad instead of placing caps at NaN. I filed the Oasis reference alongside the others.
* docs(spec): record Phase 1 completion in the component-generation specCraig Jennings10 hours1-3/+4
| | | | Dated history line for the finished extraction, the extraction acceptance criterion checked, the appendix's demand-matrix label corrected from Phase 1 to Phase 2 (a leftover from the pre-review phase order), and the consumer design notes that widget CSS ships inside widgets.js via GW_CSS.
* docs(gallery): document widgets.js consumer API; close extraction phaseCraig Jennings10 hours1-3/+56
| | | | README gains a widget-library section covering the GW builder contract, GW_CSS styling, the tick contract for live meters, named style options, and the CDP probes. The stray waybar-redesign bullet moves back to the prototypes list. todo.org Phase 1 closes as a dated entry.
* refactor(gallery): slide-toggle style options become GW.slideToggle optsCraig Jennings10 hours2-26/+46
| | | | The four style axes (on/off track, off engraving, thumb) move from a page-side chip rig into named constructor opts backed by GW.slideToggle.STYLES, with a setStyle handle method for live restyling. The gallery chips stay as a demo rig driving that method. Defaults match the stylesheet fallbacks, so a bare GW.slideToggle renders unchanged.
* refactor(gallery): move widget CSS into GW_CSS in widgets.jsCraig Jennings10 hours2-502/+503
| | | | Widget-internal rules and the pulse/flipdrop keyframes now inject via ensureCss, so widgets.js consumers get styling without the gallery stylesheet. The page-side reelspin injector became a plain GW_CSS rule. The gallery keeps page furniture, option-chip capsules, tokens, and the reduced-motion guard.
* refactor(gallery): extract indicators R35, R36, R45-R47, R52 into GW buildersCraig Jennings10 hours2-176/+272
|
* refactor(gallery): extract indicators R10, R11, R25, R26, R30, R31 into GW ↵Craig Jennings10 hours2-212/+328
| | | | builders
* refactor(gallery): extract indicators N20-N28 into GW buildersCraig Jennings10 hours2-117/+276
|
* refactor(gallery): extract indicators 18-23, 26 into GW buildersCraig Jennings10 hours2-43/+157
|
* refactor(gallery): extract meters R43, R44, R53-R56 into GW buildersCraig Jennings11 hours2-239/+369
| | | | The heading-bug servo chase and the chart recorder's day clock are widget-owned animations, so they move into their builders with the reduced-motion gates intact (reduced motion paints the recorder's full day once). This completes the Meters section — all 28 extracted.
* refactor(gallery): extract meters R01, R07-R09, R13, R17 into GW buildersCraig Jennings11 hours2-198/+309
| | | | The VU ballistics chase stays page-side and drives mcVu.set(t); the R17 trace animation is widget-owned so it moves into the builder with its reduced-motion gate. The R17 face gradient keeps instance-local defs because its stops read screen-family vars from the widget subtree; probe-fams selectors follow the retired rcrt ids to the card handle.
* refactor(gallery): extract meters N11-N18 into GW buildersCraig Jennings11 hours2-54/+193
| | | | Scope, EQ bars, and strip chart take value-driven handles (set samples / push); the eqBands oscillator and the demo signal stay page-side. The N11 screen-family chips now reach the scope through the card handle instead of the retired scopep id.
* refactor(gallery): extract meters 10-17 into GW buildersCraig Jennings11 hours2-48/+190
| | | | The page keeps the clock and demo signal; live meters (VU pair, mini signal, sparkline, waveform strip) expose value-driven handles — set/push repaint synchronously and fire onChange like every other builder. Peak-hold and history buffers move into the builders. fastTick and paintStatic now drive card handles.
* refactor(gallery): extract controls R39-R42, R48-R51 into GW buildersCraig Jennings11 hours2-271/+342
| | | | Rotary telephone dial, circuit breaker panel, DSKY, cam-timer drum, knife switch, decade box, two-hand safety, and voice-loop keyset — the Controls section is now fully extracted. The dial keeps its wind-and-return animation (reduced-motion path included); the cam timer and voice loop keep their gated self-advance and activity-flicker intervals inside their builders. DSKY and voice loop are the first HTML-based builders with structural CSS still gallery-side. Behavioral pass now 118 checks; both probes green.
* refactor(gallery): extract controls R27-R29, R32-R34, R37, R38 into GW buildersCraig Jennings11 hours2-305/+341
| | | | Winged gain selector, rotary disc switch, guarded toggle, mechanical timer dial, four-way rocker, four-way toggle selector, pin routing matrix, and dead-man button. The timer dial keeps its reduced-motion-gated 1 Hz wind-down inside the builder — it's widget behavior, not a gallery meter loop. discRed moves to the shared defs so the guarded toggle renders standalone. Behavioral pass now 96 checks; both probes green.
* refactor(gallery): extract controls R16, R18-R24 into GW buildersCraig Jennings11 hours2-283/+315
| | | | Entry keypad, thumb-slide pair, waveform region editor, drum roller, LED program row, three-position slide, spun knob, and stomp switch. The drum roller's per-instance clip paths get a uid() helper so two instances can coexist; the region editor's screen-family chips now reach the widget through the card handle (card.gw.el) instead of a stage id, and probe-fams drives its post-recolor check through the handle's set(). Behavioral pass now 78 checks; both probes green.
* refactor(gallery): extract R02-R06, R12, R14, R15 into GW buildersCraig Jennings11 hours2-262/+335
| | | | First SVG-widget batch: vernier dial, bat toggle, fluted knob, filter bank, chicken-head, slot fader, spade knob, and multi-band dial. widgets.js gains the shared-defs mechanism — document-scoped gradients (nutG, chromeG, spadeKnob, sfScrew, ...) now live in one hidden defs svg, created idempotently by whichever builder needs them first, so cross-widget url(#id) references survive extraction and any widget renders standalone. Probes green; behavioral pass now 60 checks.
* refactor(gallery): extract controls N01-N10 into GW buildersCraig Jennings11 hours2-86/+210
| | | | Rocker, transport cluster, preset bank, dual knob, encoder, key switch, crossfader, thumbwheel, DIP bank, and jog wheel move into widgets.js; their inline onclick globals (transport/preset/keyTurn/dip) become listeners inside the builders. Transport takes an explicit animate option so reduced-motion behavior is the consumer's call; its initial paint leaves reel play-state to CSS, matching load behavior. Probes green plus the per-widget behavioral pass (43 checks).
* refactor(gallery): extract controls 01-09, 24, 25 into GW buildersCraig Jennings11 hours2-75/+237
| | | | Eleven CSS-form controls (slide toggle, console keys, both faders, knob, segmented, chip, arm-to-fire, lamp row, rotary selector, slide-rule dial) move into widgets.js as parameterized builders returning handles; card() now accepts a builder function in place of stage HTML, so these cards are declarative records wiring GW.* onChange into their readouts. Probes green plus a per-widget behavioral pass over all eleven.
* refactor(gallery): extract the shared engine into widgets.jsCraig Jennings12 hours2-71/+128
| | | | First componentization batch per the component-generation spec: widgets.js is a classic script exposing the GW namespace (svgEl, polar, drag helpers, seg7, buildBars, VU law, SCREEN_FAMS) plus a css-injection scaffold that grows as builders move in. The gallery loads it via a relative script src and destructures the helpers, so file:// keeps working. Probes green.
* docs(spec): component-generation spec reviewed, folded, and decomposedCraig Jennings12 hours1-25/+43
| | | | spec-review passed with three findings, all pre-agreed and folded in the same pass: the option-1 approval superseded the demand-gated extraction order (extraction now covers the full catalogue ungated, phases 1-2 swapped, decisions 4 and 8 re-scoped), the card-record refactor is now named in phase 1, and stale counts were refreshed (109 cards, R56). Lifecycle DRAFT -> READY -> DOING; phase tasks live under the Retro widget catalogue parent with the spec UUID stamped as :SPEC_ID:.
* feat(gallery): card IDs in prose link to their cardCraig Jennings12 hours1-1/+11
| | | | Every R##/N## token in a note or spec sheet becomes a jump link to that card, which lights a gold ring when targeted — comparisons are one click. Cards carry anchor ids; the linkifier only wraps tokens whose card exists.
* fix(gallery): option groups as inline capsulesCraig Jennings12 hours1-12/+16
| | | | One row per group wasted vertical space; groups are now bordered capsules — label plus choices encircled together — flowing inline with gaps and wrapping as needed. Selection exclusivity is scoped inside each capsule.
* fix(gallery): one row per option groupCraig Jennings12 hours1-5/+6
| | | | All four toggle option groups shared one wrapping row, so OFF TEXT read as ambiguous between the chips on either side. Each group now renders as its own labeled row with a fixed label column, and single-group cards keep their shape.
* fix(gallery): distinct chrome thumb; independent OFF-text color groupCraig Jennings12 hours1-5/+9
| | | | Chrome deepens to a steel blue-gray so the thumb no longer offers two whites. The OFF engraving gets its own group (white, red, black) and owns the ink outright — the track choice no longer sets text color as a side effect. Chip rows wrap now that a card can carry four groups.
* feat(gallery): thumb color options on the slide toggleCraig Jennings12 hours1-1/+6
| | | | A third chip group picks the thumb material from the instrument palette: light aluminum (shipped), dark rubber, chrome silver, and brass. The thumb stays constant across states — the group changes what it is made of, not what it signals.
* feat(gallery): persist the widget-size choice across refreshesCraig Jennings12 hours1-0/+5
| | | | The S/M/L pick saves to localStorage alongside the validation lamps and restores on load, falling back to the default M when unset or invalid.
* docs(specs): close the web-library packaging decisionCraig Jennings12 hours1-4/+4
| | | | Craig approved the classic-script widgets.js with a GW namespace as part of the componentization go-ahead. All eight decisions resolved; the spec is ready for review. The build itself waits on his per-card validation pass.
* feat(gallery): validation lamps and the readout/options/text card orderCraig Jennings12 hours1-6/+23
| | | | Every card gets a status lamp at the upper-right for the pre-componentization validation pass: click cycles not-done, in-progress, done, and the state persists per card in localStorage. Below the stage the card now reads readout, then options, then descriptive text, with separators between the zones and no labels — chips moved into a generic options container that future selectors share.
* feat(gallery): index panel in the mastheadCraig Jennings13 hours1-8/+36
| | | | A raised-faceplate table of contents to the right of the description — corner screws, engraved title, section links with smooth scroll to Controls, Meters, Indicators, and the Palette. The masthead becomes a flex row so the panel wraps under the text on narrow windows.
* feat(gallery): dark as an ON track option on the slide toggleCraig Jennings13 hours1-3/+4
| | | | With dark available on both sides, the ON engraving color rides its own variable — cream on the dark track, panel-dark on amber and green — so every combination stays readable.
* feat(gallery): per-state color choices on the slide toggleCraig Jennings13 hours1-3/+27
| | | | Two chip groups next to the readout: the ON track picks amber or green, the OFF track picks dark or red (red gets cream engraving for contrast). Track colors ride CSS variables with the shipped look as fallback; the thumb never changes — state lives in the revealed track, like the hardware.
* feat(gallery): linked reference photos in spec sheets; steady the slide toggleCraig Jennings13 hours2-5/+9
| | | | Reference photos now live in docs/prototypes/reference/ named after their widget, and a spec sheet links its photo via a ref field — one line per future card. The slide toggle also stops jumping on click (the order flip changed which flex item supplied the inline baseline; vertical-align middle pins it) and the thumb keeps one color — the revealed track signals the state, like the hardware.
* feat(gallery): restyle the slide toggle after its hardware lineageCraig Jennings13 hours1-10/+20
| | | | Card 01 now wears the iPod-hold-switch skin from the reference: dome thumb, engraved ON/OFF revealed opposite the thumb, amber track when on. Built with flex and fixed pixels only, since absolute insets and stretched widths misrender under stage zoom. The spec sheet records the full lineage: slide switch, iPod hold switch with its orange reveal, then the iOS toggle.
* fix(gallery): render the slide toggle as its pill, mark it born-digitalCraig Jennings13 hours1-6/+7
| | | | Card 01 collapsed to a sliver because the pill was an inline span (inline boxes ignore width/height — the invisible-lamp bug family), so it never rendered as the familiar toggle. It also gets an honest identity: renamed Slide toggle, origin and period note it as the touchscreen idiom, with pointers to its physical cousins R03 and N01.
* feat(gallery): palette as named instrument colors at the page bottom, ↵Craig Jennings13 hours1-31/+69
| | | | | | default size M The palette stops being a token dump: 36 named colors grouped by role (materials, faces and inks, lamps and jewels, phosphors, needles), each naming where it appears on the instruments. No hex codes render anywhere on the page, and page chrome is deliberately excluded — the card documents what the widgets are made of, not how the page is styled. Default widget size drops to M.
* fix(gallery): sweep-driven cleanup — contain the keyset bars, boost tiny ↵Craig Jennings14 hours1-3/+12
| | | | | | widgets A bounding-box audit over all 109 cards caught the voice-loop monitor bars streaking across the card: Chrome's CSS zoom miscomputes absolute insets, fr tracks, and stretched widths inside zoomed stages, so the keyset now uses fixed pixel tracks and bars, which zoom scales correctly. Seven intrinsically tiny widgets (toggle, chip, arm-to-fire, mini signal, ladder, thermometer, status lamp) get a boost zoom so they stop floating in oversized stages.
* feat(gallery): gallery upgrades — size/palette/screen-chips/spec-sheets, ↵Craig Jennings14 hours2-51/+1976
| | | | | | | | | | 25 new cards, grammar note Squash of the gallery-upgrades branch (25 commits). Usability: widget stages scale S/M/L (2.4x default), reading text at 12-13pt, a live palette section parsed from the generated :root block, screen-color families with per-card chips on the five screen widgets, and a collapsible spec sheet on every card (input model, solves, use, limits, origin, difficulty, prefer-when, period on the non-timeless). Collection grew 84 → 109 cards, all CDP-verified: reference cards R32-R36 (mechanical timer, four-way rocker, four-way toggle, day-date discs, LED dot matrix), the takuzu-survey build R37-R47 plus the N23 alarm lifecycle (pin matrix, dead-man, rotary dial, breaker panel, DSKY, cam timer, attitude indicator, heading bug, flip-disc, dekatron, landing gear), the promoted banked six R48-R53 (knife switch, decade box, two-hand control, voice-loop keyset, blinkenlights, circular chart), and the Ki-57/comfort-meter trio R54-R56 (vertical tape, twin-needle, comfort-zone crossed needles). Also: docs/design control-grammars reference note (taxonomy sources and proposed axes for the classification work), nine reference photos filed, and a component cleanup pass (dial digits above the finger wheel, legible demo defaults, unified captions).
* docs(specs): add the widget component-generation spec (DRAFT)Craig Jennings23 hours1-0/+188
| | | | The collection phase closed at 84 verified cards, so porting needs a decision procedure before consumer work starts. The spec carries the agreed five phases (demand inventory, web library extraction, Emacs ports, waybar audio pilot, Level-2 generator go/no-go) and records the baked architecture decisions. I left the web library's packaging shape as the one open decision, tracked as a VERIFY in todo.org. The gallery is the prototype evidence, with the R-series history as the iteration record.
* chore(specs): flip net and bt doctor expansions to IMPLEMENTEDCraig Jennings24 hours2-12/+14
| | | | All v1 phases of both specs shipped on dotfiles main in the 2026-07-11 build run (net: 21ca3ff, d73eba6, c9f8604, be15a81, 12e3e76; bt: d19fdca, f05a9b4, d7d859f), fake-verified green. The live halves stay on the VM live-verification task and the manual-testing checklist. vNext items from both specs are now logged as [#D] tasks.
* feat(gallery): add R31 radar sweepCraig Jennings31 hours1-0/+50
| | | | | | The rotating scan after a radar PPI scope (reference filed in the catalogue's working directory): a beam circles inside a numbered bearing ring, an afterglow wedge trails it, contacts bloom as the beam passes and fade over the next half turn, and range rings sit under it all. Clicking marks the current bearing. The kit's round CRT draws traces; nothing rotated a scan until this. I verified it in headless Chrome: the sweep rotates, the mark click captures the live bearing, no console exceptions.
* feat(gallery): add R30 telegraph indicatorCraig Jennings31 hours1-0/+26
| | | | | | The engine-telegraph state dial (references filed in the catalogue's working directory — an electric indicator and a ship's engine-order telegraph): a cream pie of labeled sectors with a red pointer and its little flag naming the active state, stepping with a swing on click. The annunciator grid shows states as cells and the rotary selector is input; state-by-pointer-on-sectors was the missing indication form. I verified it in headless Chrome: clicks step through all six states and wrap, no console exceptions.
* feat(gallery): add R29 guarded toggleCraig Jennings31 hours1-0/+29
| | | | | | The critical-switch idiom after a flight-deck panel (reference filed in the catalogue's working directory): cast guard posts flank the lever and a red collar marks it critical. The guard is the point — friction sized to consequence, the physical cousin of the kit's arm-to-fire confirm. A second reference (an SCE-style switch with a rectangular guard plate) confirmed the idiom while it was being built. I verified it in headless Chrome: the lever throws both ways with legends relighting, no console exceptions.
* feat(gallery): add R28 rotary disc switchCraig Jennings32 hours1-0/+31
| | | | | | The heavy master-power selector after a marine battery switch (reference filed in the catalogue's working directory): the whole red disc turns with a molded grip bar and a cream index notch, stepping OFF, ON, COMBINE with the active legend lit. A disc that is itself the handle was the one heavy-switch form the kit lacked. I verified it in headless Chrome: clicks cycle all three positions and wrap, the disc rotates with its settle transition, no console exceptions.
* feat(gallery): add R27 winged gain selectorCraig Jennings32 hours1-0/+30
| | | | | | The red T-bar gain switch after a classic mic-preamp: a bar-grip handle with a cream index over a dot ring, snapping between labeled dB detents from -80 to +10. This completes the kit's handle-form taxonomy — round, skirted, lever, spun, and knurled-with-spade were built; the bar grip was the missing form. I verified it in headless Chrome: drags snap between detents in both directions and the readout follows, no console exceptions.