Releases: Aspegio/nelson
Release list
v2.4.0 — Dynamic Workflows & Standing Goals
This release makes Nelson suitable to two Claude Code features so power users can drive both from the framework: dynamic workflows (deterministic multi-agent orchestration) and /goal (session-scoped Stop hooks that keep a session working until a completion condition is met). Nelson wraps each with doctrine, gates, and verification — it governs these features, it does not auto-invoke them.
Features
- Dynamic workflow alignment (v1) — Two new execution modes,
workflow(one approved autonomous run for large fan-out, audits, migrations, or cross-checked research) andhybrid-workflow(a Nelson-gated sequence of runs with human approval between stages, for Station 2/3 work). Addsreferences/workflow-doctrine.md(suitability, Sounding-the-Channel probes, cost guardrails, verification contracts, telemetry), battle-plan Workflow Charter fields, a charter-to-runnable-script bridge so the approved charter maps onto a real Workflow script, andworkflow_*telemetry events. Saved workflows live in.claude/workflows/*.jsand run as/<name>. - Goal alignment — Nelson now aligns with Claude Code's
/goal. Newreferences/goal-alignment.mddoctrine, built on the load-bearing fact that the/goalevaluator judges only the conversation transcript — so completion evidence must be surfaced into chat, not left on disk. Newnelson-data.py goal-conditioncomposes a transcript-verifiable/goalstring from the sailing orders (outcome + metric + stop criteria, plus ascuttle-and-reformescape), with--max-turns,--record(persists the condition + logs agoal_setevent for resumption), and--json. Wired into SKILL.md at Sailing Orders (offer/reconcile), Stand Down (surface evidence so the goal auto-clears), and session resumption (re-establish on a fresh session). Addsgoal_set/goal_clearedevents and an optional persistedgoal_conditionfield. The standing goal and the Mission Complete Gate reinforce each other.
Maintainability & docs
- Backlog triage (#124) — admiralty-decision documentation, mission session-marker sidecar cleanup, and an incremental (per-module) strict-mypy sensor rollout.
- New
test_nelson_data_goal.py(composer purity/immutability, CLI output/JSON/record/limit, event validity, schema preservation);tool-mapping.md,structured-data.md,README.md, anddocs/project_structure.mdupdated. All sensors green: Ruff, formatter, pytest, pre-commit, markdownlint, typos, and the doc cross-reference check.
Commits since v2.3.0
v2.3.0 — Override-Learned Trust Calibration
This release introduces override-learned trust calibration — Nelson now learns how much to trust its own admiralty decisions from how often they get overridden — and lands the first tier of agent-hardening "sensors" that keep the codebase maintainable as agents work on it.
Features
- Override-learned trust calibration (#88, v1) — Nelson records admiralty decisions and the human overrides against them, then aggregates per-key calibration so future decisions are weighted by their historical override rate. Hardened for correctness: per-
task_iddedupe (latest wins), required--recorded-by+session_marker_presentprovenance, corrupt-store.bakrotation, andindex --rebuildnow resets and recomputes the calibration store rather than silently accumulating stale double-counts. Key validation is enforced at the aggregation boundary, not just the CLI.- v2 (auto-elevation, Fisher/Wilson gating, raise-only mutation) remains tracked for a future release per #88.
Maintainability & CI
- Tier-1 agent-hardening sensors (#123) — AI-targeted Ruff thresholds, formatter, secret scanning (Gitleaks), and a documented suppress-with-reason / bump-threshold workflow so lint output is feedback an agent self-corrects against. See
CLAUDE.md→ "Maintainability sensors". - CI hardening — actions and pre-commit hooks SHA-pinned, a pre-commit parity job mirroring local hooks, and per-directory parallel test jobs.
- Secret scanning fix —
GITLEAKS_LICENSEis now wired into thesecret-scanjob env, so the gitleaks check passes on the org-owned repo.
Docs
- README polished for clarity and scannability; brownfield wording softened; the sensors workflow documented in
CLAUDE.md/AGENTS.md.
Commits since v2.2.4
8804ebdchore: release v2.3.0c70c434ci: pass GITLEAKS_LICENSE secret to gitleaks-action01e5d37docs: polish README for clarity and scannability32eec71feat: override-learned trust calibration (#88, v1)c8a27b3Merge #123 — chore/harden-for-agents7ade8feci: SHA-pin actions and pre-commit, add parity job, parallel tests0a60bf7chore: suppression hygiene + safer subprocess test pattern21df007chore: tighten lint config and triage surfaced violations361a506fix: restore LICENSE and README ownership27460f9chore: harden codebase for AI coding agents (Tier 1 sensors)
v2.2.4 — Learned Standing Orders
Painting by Salvatore Colacicco - Pair of marine paintings of Royal Navy warships
This release adds a Darwin Gödel Machine-inspired pipeline that learns new standing orders from accumulated mission data, with human review before any candidate is promoted.
Features
- Learned standing orders pipeline (#87, #120) —
skills/nelson/scripts/nelson_data_patterns.pyminesavoidpatterns from accumulated mission data, scores them with Fisher's exact test + log-odds, filters against existing orders and a dismissed archive, and synthesises candidate standing orders for human review. Falls back to a heuristic stub when no FM client is wired. - Three new
nelson-dataCLI subcommands —detect-patterns,promote-candidate,dismiss-candidate. Promotion writes a new.mdunderreferences/standing-orders/with an audit-lineage comment and adds a row to the SKILL.md lookup table. Dismissal archives the fingerprint so re-runs cannot resurface it. - Intelligence Brief surfaces pending candidates —
CANDIDATE STANDING ORDERS (awaiting review): Nappears in both the text and JSON brief when the queue is non-empty.
Design notes
- Ranking is
confidence × (1 + novelty), notsigmoid(confidence) × (1 + novelty). Sigmoid maps[0, 1]confidence into[0.5, 0.73]— too compressed to discriminate when novelty's range is[1, 2]. Documented inline in_review_score. - Novelty uses token containment (fraction of a pattern's tokens covered by an existing order) rather than TF-IDF Jaccard — better fit for short avoid-phrases vs. full standing-order documents.
- Add-only invariant: candidates may never modify or remove existing orders, mitigating the objective-hacking failure mode in DGM Appendix H.
detect-patternsskips writing an empty queue file on first runs to avoid littering the memory directory.
Testing
- 35 new tests in
test_nelson_data_patterns.py - Full Python suite: 338/338 passing
ruff checkclean on new code
Commits since v2.2.3
v2.2.3 — Phase-Aware Recovery, Estimate Split, and Squadron Validation
Painting by Salvatore Colacicco - Pair of marine paintings of Royal Navy warships
This release consolidates everything shipped since v2.2.1, including the work that was version-bumped as v2.2.2 in source but never tagged on GitHub.
Features
- Phase-aware recovery after
/compact— Nelson is now resumable at every phase boundary. The recovery briefing also surfaces fleet-status staleness so a relieving admiral can spot a stale handoff. - Estimate phase split into subagents (#111, #114) — Q2–Q3 and Q4–Q7 now run as separate Estimate subagents in SKILL.md Step 2, with split-dispatch and
pulling-the-oarwiring. Model-selection guidance carves the Estimate phase out from generic cost-savings advice. pulling-the-oarstanding order (#111) — codifies the anti-pattern where the admiral does work that should be delegated.- GitHub star prompt at Stand Down (#117) — one-time prompt asking users to star the repo, with hardened preflight checks.
- Restored TaskCreate captain-misuse enforcement via an admiral session marker (#119), replacing the mode-check hook removed in #112. The session marker uses a fail-open posture so a missing or unreadable marker never blocks legitimate work.
- Fleet-status freshness — new event constants and a staleness threshold;
cmd_eventnow updates fleet-status for state-changing events (#114).
Fixes
- Squadron shape validation in
form— the compositeformcommand used to crash with aTypeErrorwhenadmiral,red_cell, or a captain entry inplan-input.jsonwas a bare string instead of an object, after tasks had already been registered._validate_plan_jsonnow checks the squadron sub-document fully and emits a clear error with an example of the expected shape. - Mission lookup picks the most recent active mission (#114) — older active markers no longer shadow a newer mission.
- Dedupe active-mission markers by resolved path — symlink and trailing-slash variants of the same path no longer produce duplicate markers.
- Removed contradictory TaskCreate mode-check hook (#112) — the hook fought against the documented admiral-uses-TaskCreate exception.
Refactors & Docs
- Threaded the event index from
_append_eventand deduped progress arithmetic. - README refreshed for accuracy; redundancy trimmed.
- Documented fleet-status freshness fields and the staleness warning.
Commits since v2.2.1
634f445fix: mission lookup picks the most recent active mission (#114)9df7000feat: add fleet-status event constants and staleness threshold651b38dfeat: cmd_event updates fleet-status for state-changing events (#114)78bc3f2feat: recovery briefing surfaces fleet-status staleness (#114)562eb79feat: add pulling-the-oar standing order (#111)d15260fdocs: model-selection — Estimate phase carved out from cost-savings (#111)de2b2ebfeat: split Q2-Q3 and Q4-Q7 into Estimate subagents (#111, #114)cc5f759feat: SKILL.md Step 2 split-dispatch + pulling-the-oar wiring (#111, #114)e05566edocs: document fleet-status freshness fields and staleness warningc449ef3fix: dedupe active-mission markers by resolved path62ba0c6refactor: thread event index from _append_event, dedupe progress arithmetic7fb028bfix: remove TaskCreate mode-check hook that contradicts admiral exception (#112)2317485docs: refresh README accuracy and trim redundancy208cfc0feat: make nelson resumable after /compact at every phase boundaryd7a61abrefactor: address self-review fixes for phase-aware recovery26ae592feat: restore TaskCreate captain-misuse enforcement via admiral session marker7a1117cfix: tighten admiral session marker fail-open postureb992488feat: add one-time GitHub star prompt at Stand Downb68cdd4fix: harden star prompt preflight and reposition README notee41ec0efix: validate squadron shape in plan JSON before forming
v2.2.1 — Scope Preservation Fixes
Fixes
- Scope preservation in Battle Plan (#110): captains no longer create parallel implementations when extending existing code; the Battle Plan step now includes an explicit scope-preservation clause.
- Persist
modification_targetsin structured data capture so scope is retained across the mission.
Commits since v2.2.0
af5521dfix: persist modification_targets in structured data capture172c894fix: prevent captains from creating parallel implementations when extending existing code572f971fix: add scope-preservation clause to Battle Plan step
v2.2.0 — The Estimate Phase
What's Changed
Minor release adding The Estimate — a new 7-Question Maritime Tactical Estimate phase.
New Features
- The Estimate phase — a structured decision-making step between Sailing Orders and Battle Plan, using the 7-Question Maritime Tactical Estimate format. Elevates Nelson from a six-step to an eight-step operational framework. (#105)
Bug Fixes
- Restore cost-savings instruction in Battle Plan step
- Consolidate phase authority and address review findings
- Unlink lock file after release in
_file_lock - Move
nelson_conflict_radar.pynext to its dependency - Sync marketplace.json version
Internal
- Added unit tests for
scripts/count-tokens.py - CI now runs tests in
scripts/directory - Gitignore
docs/superpowers/and remove tracked plan artifacts (#108) - Removed empty codemap.md templates
Full Changelog: v2.1.2...v2.2.0
v2.1.2 — Mission Directory Desync Fix
What's Changed
Patch release fixing a setup-phase desync between SKILL.md and `nelson-data.py` that caused Nelson to leave an orphan mission directory and break SESSION_ID-based recovery.
Bug Fixes
- `nelson-data.py init` now owns mission-directory creation end-to-end — generates the SESSION_ID, creates `.nelson/missions/{stamp}_{SESSION_ID}/`, writes the three initial JSON files, and writes the `.nelson/.active-{SESSION_ID}` sidecar in one atomic step. SKILL.md no longer instructs Claude to `mkdir` manually. Eliminates the "The script is creating a new timestamped directory rather than using mine" behavior. (#102, #103)
Internal
- New `--session-id` arg on `init` for deterministic tests and known-id resumes (8 lowercase hex chars, validated)
- 4 new tests covering auto-generation, explicit session id, sidecar contents, and invalid-id rejection
Full Changelog: v2.1.1...v2.1.2
v2.1.1 — Plugin Cache Fix
v2.1.0 — Budget Circuit Breakers & Plugin Root Fix
What's New
Automated Budget Circuit Breakers (#85, #97)
- Advisory circuit breakers that evaluate thresholds at each quarterdeck checkpoint and on
TeammateIdle - Logs structured
circuit_breaker_trippedevents and recommends damage control procedures - Configurable via
sailing-orders.jsoncircuit_breakerskey - Advisory only — no auto-abort
Bug Fixes
- Plugin root path fix (#99, #100, #101): replaced
{skill-dir}placeholder with${CLAUDE_PLUGIN_ROOT}in SKILL.md auto-exec block; corrected script path to includeskills/nelson/prefix sonelson-data.pyis found at the correct location; added regression checks tocheck-references.shto prevent recurrence - CI fix: removed
AGENTS.local.mdfrom tracking to fix CI markdown lint
Documentation
- README refresh (#98): added Conflict Radar, Enforcement Hooks, Cross-mission Intelligence, and Admiral Synthesis sections; expanded file tree; fixed stale paths for the split
nelson_data_*modules
v2.0.0
What's New
Cross-Mission Memory Store (#94)
- Persistent pattern library (
.nelson/memory/patterns.json): accumulates adopt/avoid patterns from every mission - Standing order stats (
.nelson/memory/standing-order-stats.json): tracks violation frequency and correlations across missions - Pattern capture:
stand-downnow accepts--adoptand--avoidflags to record reusable patterns - Intelligence brief (
briefcommand): pre-mission command that surfaces relevant patterns, win rate, standing order hot spots, and context-matched precedents - Cross-mission analytics (
analyticscommand): focused metric queries (success-rate, standing-orders, efficiency) with text and JSON output - Index sync: running
indexbackfills the memory store for missions completed before this feature existed
Modular Architecture
- Split monolithic
nelson-data.py(2500+ lines) into 5 focused modules:nelson-data.py— thin CLI entry point (340 lines)nelson_data_utils.py— shared I/O, validation, constantsnelson_data_memory.py— cross-mission memory storenelson_data_lifecycle.py— mission lifecycle commandsnelson_data_fleet.py— fleet intelligence and analytics
- Test suite split into 3 files with shared
conftest.py
Bug Fixes
- Replaced bare
open()+try/finallylock pattern with_file_lock()context manager across all lock sites - Fixed mid-file import and replaced
time.sleepwith deterministic mission IDs in tests - Fixed duplicate record-building code in
cmd_index()that ran outside the file lock
Test Coverage
- 234 total tests (182 scripts + 52 hooks), all passing
- 21 new tests for memory store, brief, analytics, and index sync