Skip to content

Releases: lancegui/causal-powers

v0.25.0 — analysis-craft legibility axis

Choose a tag to compare

@lancegui lancegui released this 23 Jun 00:41

0.25.0 — analysis-craft legibility axis (the ponytail layer)

analysis-craft previously governed only code minimalism — remove machinery, smallest
diff. It now also governs legibility: the code that remains must be readable by a
referee, a replication-package reviewer, or a coauthor.

  • New ## Legibility section. Name intermediates in economic units; one conceptual
    step per line (decompose chains that hide a join / filter / winsorize); the referee
    test — can someone follow what each block computes and why in one pass, without
    running it?
  • The # why: convention. Every analytical decision (sample restriction, winsorize
    threshold, deflator/base year, fixed effect, cluster level) gets
    # why: <decision> — <reason> at the code site — the code-level echo of
    data-preparation's decisions log.
  • Reconciliation note so the two axes don't read as contradictory: minimalism cuts
    machinery; legibility keeps annotated logic; a one-liner-vs-named-steps choice is
    purely legibility, so legibility wins.
  • New red-flag and rationalization rows (the slick pipe that hides three decisions; "I
    made it a tight one-liner") plus three legibility trigger-eval cases; the description
    now also fires on "annotate this" / "make it readable for the replication package".

Adapted from ponytail's "don't write code
you don't need" ladder, inverting its fewest-lines goal to readability.

v0.22.2 — The flow picture, and a tidier repo

Choose a tag to compare

@lancegui lancegui released this 13 Jun 22:44

Docs-and-presentation release; no skill or hook changes.

  • Hand-laid flow SVG replaces the Mermaid diagram in the README. GitHub's Mermaid auto-layout scattered the cross-cutting side rails; the new docs/flow.svg is a self-contained, hand-laid graphic (inline presentation attributes, no <style> block for the sanitizer to strip) showing the same spine — frame → fork to reduced-form / structural → approval gate → execute → verify → ship, with the always-on layer and the three side rails.
  • Design specs hidden from the public repo: docs/specs/ is now gitignored (kept on disk, untracked).
  • docs/LESSONS.md ships as an empty template — the log belongs to your project, not the plugin.
  • GitHub About refreshed to name the reduced-form and structural scope and the superpowers homage.

Update with /plugin update causal-powers@causal-powers, then restart Claude Code.

v0.22.1 — README landing page + gateway jargon

Choose a tag to compare

@lancegui lancegui released this 13 Jun 21:17

A docs-and-copy release. The README is rewritten as a proper landing page; the one change to a loaded skill is a two-word jargon fix in the gateway.

README

  • Three-feature highlight up top — economic framing of mature, proven skills · it grows into your data's domain (per-project learning) · built for day-to-day, resumable research.
  • A Mermaid flow diagram of the discipline: frame → fork to reduced-form / structural → write-the-plan approval gate → execute → verify → ship, with the always-on layer, the human-in-the-loop guardrail, and the learn loop drawn in.
  • A Motivation section crediting the software-engineering lineage it adapts — superpowers, Karpathy's notes, ECC, planning-with-files — and stating that the name is a homage to superpowers.
  • Prose tightened to an applied-micro register; the redundant "Why a separate family" section removed and remaining repetition cut.

Skill

  • Gateway (using-causal-powers): "interactive viz" → "interactive visualization", "PAP" → "pre-analysis plan" in the family table. No description or trigger change (trigger CI unchanged, precision 145/145).

Update: /plugin update causal-powers@causal-powers.

v0.22.0 — Recall, not fold (the two-layer learning model)

Choose a tag to compare

@lancegui lancegui released this 13 Jun 18:54

Prompted by the right question: are lessons and memory being used effectively, or becoming bloat? The audit found the card had re-bloated (970→1256 words, no eviction rule), the project's LESSONS.md was rich but write-only (4 capture sites in the skills, 0 recall sites), and a 22 KB memory file sat on a dormant project.

The decision (user-driven): lessons stay in the project; skills point to them

Folding domain-specific lessons (ARCOS, CBSA vintage, ring-overlap) into the general skills would bloat the shared family with one project's idiosyncrasies — and ship other users a data-contracts skill muttering about opioid-treatment geocoding. So: two layers — general skills + card carry the method (lean, stable, shareable); the project's LESSONS.md + memory carry the scar tissue (domain-specific, grows there); and a recall link points the skills at the project store at the right moment. The real gap was never "lessons → skill edits" — it was recall. Capture without consult is a write-only journal.

Shipped

  • Recall + consolidation-suggestion wiring (the only permanent addition — text in 3 existing files, no new skill): the card gains "consult LESSONS.md + memory at start / before a join / before reporting; recalled here, not folded; if bloated/stale while consulting, suggest consolidation"; result-verification's "Capture what bit you" → "Consult — and capture —"; data-contracts consults the project log before a merge. Consolidation-suggestion is demand-driven — surfaced when the rot is noticed, never scheduled, never auto-run.
  • Two domain-free pattern folds (pattern only; instance left in the project): versioned/vintage join keys must assert the same vintage on both sides (data-contracts); a robustness check returning a number identical to baseline is a silent no-op, not evidence (result-verification).
  • Card re-diet + eviction rule: 1256 → 1156 words while adding the recall section; a top-of-file budget comment now guards against creep.
  • Memory consolidation (via the consolidate-memory skill, on the suggestion model): the 22 KB dormant-proxy file → 3 KB (−86%), keeping the orientation + the one durable conclusion + gotchas.

How "evolving" should feel now: the general family changes slowly (it's the method); the project compounds — you'll feel it the first time a session says "this project's LESSONS flags a vintage-join trap here — asserting vintage before I merge."

Update: /plugin update causal-powers@causal-powers + restart.

v0.21.0 — Task-altitude planning (from real-session dogfood)

Choose a tag to compare

@lancegui lancegui released this 13 Jun 15:58

Reviewing the user's actual analysis sessions gave a sharper diagnosis than any eval: causal-powers plans at the study altitude (estimand / PAP / model card) but hand-waves at the task altitude"merge these two messy sources", "diagnose why this number is off" get a dive, not a roadmap-you-agree-to-first. On a real co-located-coordinate bug the agent dove into record-dumping and the user had to interrupt to impose an order; the project had zero analysis-plan.md. Full write-up: docs/2026-06-13-task-altitude-rung-and-dogfood.md.

Task-altitude planning rung (carried by skill bodies, card as backstop)

  • wrong-number-debugging: REPRODUCE now ends by stating the diagnostic roadmap and getting a nod before running scans; LOCATE executes the agreed roadmap.
  • analysis-craft: a multi-step build/refactor gets a numbered roadmap confirmed before coding — an approved upstream study design does not waive the build steps.
  • data-preparation: fires for an ad-hoc mid-analysis merge/reconcile; plan agreed before executing.
  • card + gateway: "always a written plan" reframed to two altitudes, same write → agree → loop → checkpoint-on-deviation pattern, same couple-of-steps threshold so trivial edits aren't taxed.

Measured

  • Viz-trigger validation (the gate): eval-triggers --live --competitors, haiku — question-framing won 17/19 build-from-data cases against the full menu incl. superpowers:brainstorming (all 5 viz cases won; 2 losses to the causal-powers gateway, in-family), negatives 20/20 clean. The v0.19.0 viz broadening is validated and the precision boundary held.
  • pressure-roadmap-first scenario, card-alone haiku: 0/1 — re-confirming that card text alone doesn't change a weak model's behavior (v0.20.0 redux). The rung is delivered by the skill bodies (which the user's real opus/fable sessions load); body-level validation needs the full-plugin arm.

Also

  • Lesson-nudge recurrence (stop-gate): the lesson gate re-fires as new debugging accumulates without a lesson (capped 2/session); escape hatch is one line to LESSONS.md — the lesson or a no-lesson: <why> note — so a silent skip becomes a recorded decision. Motivated by the live ledger (5 debugging stops, 0 lessons). Per-obligation markers now independent.
  • Re-trigger context cost: re-trigger now means re-apply the discipline (always) vs reload the body (only when scrolled out/compacted).

What's validated in production: the discipline fires in real sessions (checkpoints / identification / debugging), the Stop-gate shipped in 0.20.0 is firing live, and docs/LESSONS.md is compounding.

Update: /plugin update causal-powers@causal-powers + restart.

v0.20.0 — The ranked-next adoptions, executed and measured

Choose a tag to compare

@lancegui lancegui released this 12 Jun 22:42

All six ranked candidates from the 0.19.0 evolution survey, adopted in one pass — with the measurements run, not just the machinery built. Full results: docs/2026-06-12-pressure-descopt-subagent-tests.md.

Measured

  • Pressure suite (4 scenarios, --manifest manifest-pressure.json): social-pressure plants — "the join was already validated", "skip the robustness, deadline tonight", "stay consistent with what the board saw", "drop the outliers". First run on haiku: card 1/4 vs baseline 1/4 — the always-on card alone does not rescue a weak model from social pressure (the card arm saw the row fan-out and rationalized it as "valid 1:M"). With 0.19.0's core result (sonnet 8/9 vs 8/9), the picture: protection lives in the enforcement layers + model strength, not in a context string.
  • Description hill-climbing (scripts/optimize-description.sh, official skill-creator harness): 3 challenger iterations each on question-framing and structural-estimationboth originals won on held-out test. The flagship descriptions are at a measured local optimum.
  • Subagent value regression (superpowers v5.0.6 method): 12/12 reviews surfaced the planted issues in both arms — with the instructive confound that analysis-review triggered natively 6/6 in the "generic" arm. Fresh-pass review catches what the author missed; persona delta null; agent kept pending an isolated rerun.

New enforcement

  • Stop-gate + JSONL run ledger (hooks/stop-gate): a once-per-session soft gate — results written without result-verification, or debugging without a LESSONS entry → the stop is blocked once with a precise reason and an explicit out. Five-condition loop safety; opt-in (analysis projects only); .causal-powers/ledger.jsonl audit trail.
  • Injection hardening: plan-resume excerpts sanitized + capped (the plan file is an injection surface).
  • Kill-switch: all five hooks honor CAUSAL_POWERS_DISABLED_HOOKS.

Update: /plugin update causal-powers@causal-powers + restart.

v0.19.0 — Measure the value, not just the firing

Choose a tag to compare

@lancegui lancegui released this 12 Jun 18:59

The family's evals tested whether skills trigger; nothing tested whether following them catches anything. This release measures both halves.

New

  • Behavioral benchmark (evals/behavioral/ + scripts/run-behavioral-eval.py): 9 tasks, each with one planted silent failure (fan-out join, silently filtered rollup, cents-vs-dollars, top-coded missingness, train/test overlap, post-treatment "control", diverging pre-trends, spatial silent drop, non-identified elasticity). Deterministic generator (rubric numbers computed from the data), claude -p A/B arms under an isolated CLAUDE_CONFIG_DIR (baseline verified plugin-free), LLM-graded. First calibration run (sonnet-4-6): card 8/9 vs baseline 8/9 — near-ceiling both arms; the one clean differential was train/test overlap, caught only with the card. Honest analysis + v1 hardening plan: docs/2026-06-12-behavioral-benchmark-v0.md.
  • Trigger CI (scripts/eval-triggers.py): the eval corpus through the real prompt-router vs a committed baseline (precision 145/145, recall 54/127 — a backstop by design); fails on regressions. --live --competitors tests description matching against the overlapping superpowers skills — the "brainstorming steals the trigger" failure mode, now measurable.
  • data-contracts ships code: references/contract-helpers.mdassert_join / reconcile / na_audit / freeze_baseline preludes in Python, R, Julia, and Stata.
  • Stale-plugin warning in hooks/session-start (counters claude-code#52218 — the mechanism behind "the skills never triggered" on a stale session).

Improved

  • Lessons loop closed: wrong-number-debugging and analysis-review end by logging the failure class to the project's docs/LESSONS.md.
  • Always-on card diet: 1,258 → 970 words (−23%), zero rules dropped; AGENTS.md inherits via symlink.
  • question-framing → data-viz deliverables: a map/figure/dashboard built from a dataset now triggers framing across all five surfaces (fixes the real-session leaflet-map miss).
  • Ecosystem survey: docs/2026-06-12-evolution-candidates.md (ranked adoption candidates).
  • CHANGELOG backfilled 0.11.0–0.18.1; tags + releases created for all skipped versions.

Update: /plugin update causal-powers@causal-powers, then restart Claude Code — and from now on the plugin will tell you itself when it's stale.

v0.18.1 — Codex one-liner installer

Choose a tag to compare

@lancegui lancegui released this 12 Jun 18:50

curl -fsSL https://raw.githubusercontent.com/lancegui/causal-powers/main/scripts/install-codex.sh | bash installs the skills into Codex's scan dir + the always-on discipline as a managed AGENTS.md block. Idempotent; --uninstall removes only the managed block.

v0.18.0 — Codex compatibility

Choose a tag to compare

@lancegui lancegui released this 12 Jun 18:50

Skills are Codex-native (same SKILL.md format). Adds AGENTS.md (symlink → hooks/session-context.md), a .codex-plugin manifest, and the Claude-Code→Codex tool mapping (Task→spawn_agent, Skill→native, TodoWrite→update_plan). Claude Code behavior unchanged.

v0.17.2 — Post-addition consistency audit

Choose a tag to compare

@lancegui lancegui released this 12 Jun 18:50

All 14 skills audited for consistency with data-preparation: executing-analysis-plans now routes its build step through data-preparation; data-contracts documents the doer/checker boundary. Corpus precision unchanged at 100%.