Commit graph

6 commits

Author SHA1 Message Date
895aa0d8bf merge: feat/69-display-package into freeze/0.22.0
Some checks failed
CI / test (push) Has been cancelled
Mirror / mirror (push) Has been cancelled
Release — PyPI + Forgejo Packages / release (push) Has been cancelled
2026-07-10 18:40:38 -07:00
2f6d5e5d87 merge: feat/66-task-bridge into freeze/0.22.0
# Conflicts:
#	CHANGELOG.md
#	README.md
#	pyproject.toml
2026-07-10 18:38:55 -07:00
6d82f3561f feat(display): add @circuitforge/display strip-display Vue package
Some checks failed
CI / test (pull_request) Has been cancelled
New packages/display/ — Vue 3 primitives for products running a secondary
1920x480 landscape / 480x1920 portrait kiosk display, per the strip display
spec. First non-Python module in this repo; published as its own npm
package (not part of the Python circuitforge-core distribution) so products
that don't use a strip display never pull in Vue as a dependency.

- DisplayLayout — root wrapper: identity zone, orientation-aware grid
  (landscape/portrait), dark-default theme, #metrics/#alerts/#macros slots.
- DisplayMetric — value/label tile with optional unit, severity colour,
  sparkline.
- DisplayAlert — timestamped, severity-coloured alert row.
- DisplayMacroButton — touch target (44px+ min) emitting a
  shell/url/api/display_switch action payload; execution stays product-side.
- theme.ts — central theme file: CSS custom properties (dark/light) plus
  UnoCSS theme/shortcut fragments for products that already run UnoCSS
  (Turnstone, Robin) to spread into their own uno.config.ts.
- launcher/launcher.html — static, framework-free product switcher reading
  a sibling launcher.config.json.

37 Vitest tests across all four components; vue-tsc type-checks clean;
vite build produces ESM/CJS bundles + CSS + .d.ts.

First consumer: Turnstone's sysadmin profile (turnstone#25, currently
blocked on this ticket).

Closes: #69
2026-07-10 18:29:21 -07:00
e0d6fb78b4 feat(task-bridge): add shared data contract for external task schedulers
Some checks failed
CI / test (pull_request) Has been cancelled
New circuitforge_core.task_bridge module: ExternalTask (frozen dataclass,
schema v1) plus push_tasks() httpx wrapper. Pilot consumer is Kiwi, pushing
pantry expiry alerts into Focus Flow (AGPL-3.0, external project). The
contract lives in cf-core (MIT) so AGPL and BSL code never share a process
or artifact — each product implements its own exporter/receiver.

No transport server, no auth/token generation, no product-specific
behavior — pure data contract + reusable push helper, same spirit as the
existing sync and tasks modules.

Bump to 0.22.0.

Closes: #66
2026-07-10 18:02:22 -07:00
f32faae7be feat(signal-bus): add SSE event publisher; finish video upload + docs theme WIP
Some checks failed
CI / test (pull_request) Has been cancelled
- circuitforge_core.signal_bus: SignalBus/SignalEvent generic pub-sub over
  Server-Sent Events for real-time signal streams (thread-safe publish,
  bounded per-subscriber queues with drop-oldest overflow, keepalive).
  New `signal-bus` extra.
- circuitforge_core.video.app: POST /caption/upload accepts a multipart
  video file for callers without filesystem access to the video-service
  node; added test coverage. video-service extra now pulls in
  python-multipart, required by UploadFile parsing.
- docs: mkdocs.yml blue-grey/cyan palette now wired to a central
  docs/stylesheets/theme.css for consistent theme-aware styling.
- Bump to 0.22.0; update README module table/install line and CHANGELOG.

Closes: #58
2026-07-10 16:10:34 -07:00
01ed48808b feat: add Plausible analytics to docs
Some checks failed
CI / test (push) Has been cancelled
Mirror / mirror (push) Has been cancelled
2026-04-16 21:16:04 -07:00