15 Commits

Author SHA1 Message Date
Julien Calixte
792b4f1b17 feat: add BLE blueprint illustration
A central with two lifecycles: an adapter/scan machine (doubly gated by
Permission + a powered-on radio) and a per-peripheral link machine, with
a bespoke specimen mocking the scanner and connected-device screens.
2026-07-02 23:52:13 +02:00
Julien Calixte
903e5465d5 refactor(state-machine): support multiple lifecycles per blueprint
Blueprint.stateMachine becomes stateMachines[], the viewer renders each
machine in its own panel, and StateMachine draws self-loops (a === b) for
recurring transitions that don't change state. Existing blueprints move
to the array form unchanged.
2026-07-02 23:52:03 +02:00
Julien Calixte
7a60e57f46 style(skills): align SKILL.md table separators 2026-07-02 23:37:16 +02:00
Julien Calixte
1ba85e3235 feat: cross-link related blueprints on the detail page
The title-block "Extends" now links to the parent blueprint when it is
illustrated, and a new "Related blueprints" section lists hosts, siblings,
and extensions. References resolve to live links via the registry and fall
back to plain text otherwise, so PasswordAuth and RememberMe now interlink.
2026-07-02 23:36:15 +02:00
Julien Calixte
4d2db834ac feat: add PasswordAuth blueprint illustration
The primary-auth feature RememberMe composes onto. Transcribed from the
ontology password-auth README + .als: the full AuthState lifecycle
(Idle / Submitting / Authenticated / Refreshing / LockedOut / Error), its
8 functions, and a sign-in specimen shown across those states. Adds the
auth transition kinds and wraps the state-machine legend to a second row
so this richer machine's kinds fit without clipping.
2026-07-02 23:36:08 +02:00
Julien Calixte
5dff87a90d chore(skills): add illustrate-blueprint skill
Guided workflow for turning a blueprint-ontology blueprint into an
interactive illustration: read the source contract, author the typed data
module and bespoke specimen, register the pair, and verify the build.
2026-07-02 23:29:14 +02:00
Julien Calixte
1b446c54df feat(theme): use Iosevka Charon Mono as the app typeface 2026-07-02 23:27:15 +02:00
Julien Calixte
062826e126 feat: add RememberMe blueprint illustration
First capability blueprint in the gallery. Transcribed from the ontology
remember-me README + .als: the persistence lifecycle
(NotPersisted -> Persisting -> Persisted -> Revoked), its 8 functions,
and a specimen annotating the opt-in sign-in and cold-start revive
screens plus the secure-storage vault it owns.
2026-07-02 23:18:23 +02:00
Julien Calixte
f6b184406d feat(state-machine): let blueprints define init, caption, and kinds
RememberMe is the first blueprint whose lifecycle is not the composed
LoadState: it starts at NotPersisted (not `loading`), has its own panel
caption, and its own transition kinds. Make the init node, the panel
caption/field, and the SmKind palette data-driven, with defaults that
leave List/Grid/Calendar unchanged.
2026-07-02 23:18:14 +02:00
Julien Calixte
9c8ba9a752 fix(a11y): raise faint ink text to meet WCAG AA contrast
Dim text tokens (base-content/40-50, #4f7099) sat at 3.0-4.1:1 on the
navy paper, below the 4.5:1 minimum. Brighten text uses to #7ea6cd
(~6:1) and split the overloaded --ink-faint into --ink-dim so borders,
stripes and diagram edges keep their intended faintness.
2026-07-02 23:05:53 +02:00
Julien Calixte
6264c9959b feat: add Calendar blueprint illustration
Transcribe the calendar blueprint from blueprint-ontology (README +
calendar.als): Navigate, Render, Load, Scope functions, its own
Idle/Loading/Refreshing/Error lifecycle, and a bespoke month/week
specimen. Composition follows the formal model (Async + Pullable).
2026-07-02 18:55:42 +02:00
Julien Calixte
8e7a903fe4 refactor(state-machine): derive legend from the machine's edges
Add navigate/changeScope transition kinds and build the legend from the
transitions a machine actually has, so each blueprint shows only its own
kinds — needed for Calendar, whose lifecycle has no loadMore().
2026-07-02 18:55:34 +02:00
Julien Calixte
c66f13c1c5 fix: composition map viewBox clipped last row
Height was derived from the capabilities column only; the functions column
(52px step) is taller and its last box + column labels fell outside the
viewBox. Size to the taller column plus label room.
2026-07-02 18:38:28 +02:00
Julien Calixte
03804b10dc feat: gallery + generic blueprint viewer, add Grid blueprint
Refactor the List-specific screen into a data-driven, reusable viewer:
- generic Blueprint type + shared LoadState machine + registry
- vue-router: / (gallery) and /b/:slug (illustration)
- BlueprintViewer renders any blueprint; specimens stay bespoke
- add Grid blueprint (6 functions incl. Position) + GridSpecimen
2026-07-02 18:34:49 +02:00
Julien Calixte
4405497658 feat: scaffold blueprints SPA with List functional-blueprint illustration 2026-07-02 18:12:20 +02:00