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