Shipped: Storyboard scene playback fidelity
Four storyboard playback gaps closed together — display-mode capture, real viewport rectangles, active-scene halo, an...
Rebuilding a 30-year-old maritime analysis platform for the next generation of analysts.
Debrief has served maritime analysts for over 30 years. But the technology landscape has changed dramatically. Eclipse RCP investment is waning, Java desktop expertise is shrinking, and modern analysts expect browser-based, collaborative tools.
Three problems we're solving:
Eclipse RCP is no longer actively developed. Finding Java/SWT developers is increasingly difficult.
Domain scientists can't build their own tools. Every enhancement requires specialist Java developers.
Each exercise lives in isolation. There's no way to query across historical archives for aggregate analysis.
We're following a "thick services, thin frontends" architecture. 90% of the logic lives in Python services; frontends handle orchestration and display only.
LinkML defines the master schema, generating Pydantic models, JSON Schema, and TypeScript types automatically.
Plots stored as GeoJSON in Spatiotemporal Asset Catalogs. Open standard, queryable, portable.
Services exposed via Model Context Protocol, enabling AI assistants to orchestrate analysis workflows.
VS Code extension, Electron app, Jupyter notebooks, and browser SPA. Same services, your choice of interface.
Auto-generated reference for the LinkML schemas that define Debrief's data model: maritime tracks, reference locations, analysis tool metadata, and session state. Updated automatically on every debrief-future release.
The Constitution defines immutable principles that guide every decision:
Core functionality works without network. Always.
Every transformation is recorded. Full audit trail.
Operations succeed completely or fail explicitly.
Your data stays on your machine. No cloud required.
All data validated against schemas. No exceptions.
Every feature has tests. Specs before implementation.
We're following a tracer bullet approach: building thin slices through the full stack to validate the architecture early.
All specification stages are now complete:
| Stage | Component | Purpose | Status |
|---|---|---|---|
| 0 | Schemas | LinkML models, generators, test fixtures | ✓ Complete |
| 1 | STAC Operations | Local catalog management | ✓ Complete |
| 2 | File I/O | REP file parsing to GeoJSON | ✓ Complete |
| 3 | Config | Cross-platform user state | ✓ Complete |
| 4 | Loader App | Electron mini-app for file loading | ✓ Complete |
| 5 | Analysis Tools | Context-aware calculations | ✓ Complete |
| 6 | VS Code Extension | Full display and interaction | ✓ Complete |
With specifications complete, we're now in the implementation phase. Follow the blog to track progress as we build each component.
Four storyboard playback gaps closed together — display-mode capture, real viewport rectangles, active-scene halo, an...
Drawing mode and palette index now persist across VS Code webview reloads via session-state wiring.
Closing a deliberate half-step from spec 241 — every byte that lands in the STAC catalog now crosses the same writer ...
Promoted spec 241's tactical scene-thumbnail regex to a first-class LinkML shape with documented pairing and ULID rul...
Same Backlog Navigator app, same parser and push pipeline, now usable on a phone — installable as a PWA with an offli...
Web-shell captures, edits, and new tracks now persist across reloads via IndexedDB, behind a shared StacWriter interf...
Lifted the bundled catalog to STAC 1.1.0, swapped bespoke debrief lineage fields for the standard processing and file...
Turned the 230-row pipe-delimited BACKLOG.md into a sortable, filterable, group-by-epic web app with staged edits and...
Save a plot and get a persistent PNG thumbnail; browse your catalog gallery by clicking through the filtered list.
Un-muted the LogPanel E2E suite after the openvscode-server lifecycle bug landed, with one passing scenario, four nar...
Five quality items deferred from the wiring patch — interactive stories, code-server E2E, axe audit, perf budget, ful...
Mermaid fences in Future Debrief blog posts now render as real diagrams on the published site, not as raw text.
Every Debrief panel now reflects the active VS Code theme on load and re-themes within 1s on switch — including high-...
Every Debrief panel now reflects the active VS Code theme on load and re-themes within 1s on switch, including high-c...
Closing the three-PR archive story — 73 site posts retired, 74 archive posts in their place, every screenshot resolves.
Reactivated 3 dormant Playwright scenarios for the LogPanel webview, added 2 parity scenarios, and wired a lint-level...
Wiring up the last-mile of the Storyboard panel: webview reducer, command actions, web-shell harness for Playwright.
34 dropped screenshots, recovered. Every path Jekyll-absolute.
Natural-language catalog filtering in VS Code — type a sentence, watch chips and plot list narrow.
We couldn't audit the LogPanel across themes until the themes actually switched. Fixing that came first. The audit co...
Regenerate the `future` blog archive from specs in one shot — 73 posts + a handoff runbook, then delete the script.
Retiring the hand-maintained tool-category map — new tools now declare their Log Panel icon at the registration site.
One keystroke from live map to schema-validated Scene, with durable round-trip through save-close-reopen.
Three declarations of the same spatial type collapsed into one. The LinkML schema is now the only place `Coordinate` ...
Every parameter visible, UTC timestamps, keyboard-navigable tabs. The audit trail stops hiding things from the analyst.
One canonical bounds utility, no casts at the call site, and the silent-miss zoom bug we found next door is fixed. Th...
We shipped both refusals: the orphan is gone, the dependency is pinned, and the scanner is now a CI gate.
Editing STAC metadata now happens in-app -- no more closing the editor and hand-patching item.json when a filter surf...
The nl-demo can now call a real language model -- credential isolation baked into the architecture, not bolted on.
A no-build-step React playground that lets stakeholders drive an NL catalog search offline -- no API keys, no CDN dep...
A deterministic 2.7 KB vocabulary bundle gives the NL-to-CQL2 prompt the exact words analysts are allowed to use, wit...
Bearing lines from towed-array sensors now originate at the array's real geographic position, with three calculation ...
A single JSON registry defines the vessel class hierarchy and all known platforms, with matching Python and TypeScrip...
Sensor bearing lines, ambiguous bearings, and snail mode fading now render on the map via a custom Leaflet canvas layer.
REP files with SENSOR, SENSOR2, SENSOR3, and SENSORARC lines now import as embedded sensor data on tracks.
The STAC Stack Browser now includes an interactive Timeline/Gantt view that lets analysts discover exercises by their...
The Discovery UI's map view now doubles as an interactive spatial filter. Pan and zoom the map to narrow exercises by...
The ExerciseListView component is now complete — a scrollable, virtualised exercise list with spatial thumbnails, fle...
Exercises on the map and timeline can now be colour-coded by Age, Vessel Class, or Tag — with a shared legend that ex...
A two-rule CSS fix makes the Layers section expand when sibling sections collapse.
PR preview environments are live -- reviewers can now test the VS Code extension in a browser with one click.
Multi-geometry schemas wired up: 6 new classes, 10 golden fixtures, 146 tests passing
Playwright driving a full VS Code workbench inside Claude Code's sandbox, after four dead ends.
Result files now persist across sessions by reading them from STAC item assets.
Typed result system connecting calculation tools to storage, with 88 tests passing across Python and TypeScript.
Double-click a STAC catalog to see every item's spatial bounds and temporal range on one screen.
Users can now create new plots directly from REP files with a single right-click action.
The time slider in Debrief's VS Code sidebar now controls what you see on the map. Scrub to any moment and every trac...
Single commands for test/build/dev, checksum-based caching, zero overhead dependency checks
Drag a REP file onto the map. Watch your tracks appear. That simple.
AI-assisted breakdown of large features into deliverable backlog items with full traceability.
REP files now yield their full story — tracks, narratives, search areas, and operator notes all parsed to GeoJSON.
We've completed the foundational component library for Future Debrief, delivering reusable React components for marit...
Interactive component demos now flow automatically from Storybook to blog posts — the speckit workflow handles bundli...
Maritime tactical analysis directly in VS Code with interactive maps and track visualization.
Test Debrief from any browser. We've shipped a browser-accessible demo environment with a 7-layer test suite.
Desktop app for loading maritime data into STAC catalogs is complete
The tracer bullet hit its first real milestone: cross-language schema validation.
Building an extensible file parser for legacy Debrief formats, starting with REP.
The schema foundation is complete. LinkML now generates Pydantic models, JSON Schema, and TypeScript interfaces from ...
REP file parsing is complete. Legacy Debrief files now transform into validated GeoJSON with line-level error reporting.
Enhancing our spec workflow to detect UI features and capture interaction design details upfront.
Local STAC catalog operations are complete. Debrief v4.x can now create catalogs, store plots, and preserve provenanc...
Building local STAC catalog operations for offline-first analysis storage in Debrief v4.x.
Establishing the schema foundation for Debrief v4.x with LinkML as the single source of truth.
Blog content is organised into three tracks: