Shipped: The type audit — 885 declarations, 25 drift clusters, 6 new backlog items
The E11 type audit is done. 885 TypeScript declarations across 317 files, classified into five buckets — and a few su...
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.
The E11 type audit is done. 885 TypeScript declarations across 317 files, classified into five buckets — and a few su...
Storyboard and Scene schemas, a headless TypeScript CRUD module, and the Article II adherence gates that every downst...
One Forward click walks the analyst through a recorded exercise — Scene by Scene, with viewport, time, and rectangles...
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...
A two-interface type fix grew into a seven-site refactor once we looked. The result: one schema-linked PointShape, on...
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.
An analyst types 'UK submarines'; the generator returns a CQL2 filter the existing engine evaluates to 17 plots. No U...
A no-build-step React playground that lets stakeholders drive an NL catalog search offline -- no API keys, no CDN dep...
One chip, one platform, multiple constraints. 'British submarines' now means exactly that — and the CQL2 round-trip i...
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.
Tracks with sensor data now expand to show named sensors and their contacts in the Layers panel.
REP files with SENSOR, SENSOR2, SENSOR3, and SENSORARC lines now import as embedded sensor data on tracks.
Save a plot and get a persistent PNG thumbnail; browse your catalog gallery with arrow-key navigation.
Vessel class filter now has readable labels, in-menu search, live match counts, and zero new dependencies
The STAC Stack Browser now includes an interactive Timeline/Gantt view that lets analysts discover exercises by their...
Analysts can now save, restore, and delete named filter configurations in the STAC Browser filter bar — filter sets p...
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...
Persistent filter bar with pill-shaped lozenges, all 10 SRD filter types, OR groups with drag-to-group, and CQL2 seri...
VS Code E2E suite expanded from 8 skipped specs to 18 active files, driven by real Python services parsing real REP d...
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.
Every feature row now has an info button that shows geometry type and coordinates in a dialog
Analysis results now open automatically in a tabbed bottom panel — charts render inline, images display at full resol...
Analysts can now draw operational zones and patrol paths directly on the map with validated multi-vertex polygons and...
Analysts can now annotate maps with points and rectangles. The implementation is a pure function sitting between Geom...
Multi-geometry schemas wired up: 6 new classes, 10 golden fixtures, 146 tests passing
Delivered the first E03 tool: grid and scatter reference point generation in Python and TypeScript
First track manipulation tool: derive course and speed from raw positions using great-circle math
Second shape manipulation spec: scaling annotations via linear interpolation with 3 golden fixtures
Maps stable result IDs to current files, emits change events when tools re-run, sets foundation for auto-refresh
A shared tree view that makes STAC catalog structure visible — with change highlighting after snapshots.
Narrowed undo/redo to UI display state. Data changes now tracked by Log Recording Service instead.
Save clean GeoJSON snapshots at any timeline point, navigate history without loading files, assemble cross-snapshot t...
Analysts can now select individual positions within tracks, not just whole features
Playwright driving a full VS Code workbench inside Claude Code's sandbox, after four dead ends.
Plots opened in one session automatically restore when VS Code restarts, no manual re-opening required.
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...
Analysis tools now appear based on selection in VS Code, with three access points and provenance on every result.
Single commands for test/build/dev, checksum-based caching, zero overhead dependency checks
Plots now preserve your viewport and selection state — temporal windows, map bounds, and selected features all surviv...
Drag a REP file onto the map. Watch your tracks appear. That simple.
VS Code activity bar now shows only what matters for maritime analysis
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.
Standardized styling schemas enable consistent visual rendering of maritime tracks, waypoints, and annotations across...
Interactive component demos now flow automatically from Storybook to blog posts — the speckit workflow handles bundli...
We've completed the foundational component library for Future Debrief, delivering reusable React components for marit...
Maritime tactical analysis directly in VS Code with interactive maps and track visualization.
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.
REP file parsing is complete. Legacy Debrief files now transform into validated GeoJSON with line-level error reporting.
SpecKit now detects UI features and generates interaction design sections automatically.
Enhancing our spec workflow to detect UI features and capture interaction design details upfront.
Building local STAC catalog operations for offline-first analysis storage in Debrief v4.x.
Local STAC catalog operations are complete. Debrief v4.x can now create catalogs, store plots, and preserve provenanc...
Establishing the schema foundation for Debrief v4.x with LinkML as the single source of truth.
The schema foundation is complete. LinkML now generates Pydantic models, JSON Schema, and TypeScript interfaces from ...
Blog content is organised into three tracks: