Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions .claude/references/model-versions.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
<!-- CURRENT: Opus 4.8 | Sonnet 4.6 | Haiku 4.5 -->
<!-- CURRENT: Fable 5 | Opus 4.8 | Sonnet 4.6 | Haiku 4.5 -->

# Current Model Versions (single source of truth)

**Last verified against Anthropic docs:** 2026-05-31
**Last verified against Anthropic docs:** 2026-06-10

This file is the **one place** that names current Claude model point versions. Everything else in the template should either refer to tiers abstractly ("newest Opus", "the Haiku tier") or point here. `scripts/check-model-versions.sh` flags any **superseded** version that is presented as **current** in the template's user-facing surfaces.

The machine-readable `<!-- CURRENT: ... -->` marker at the top is parsed by the checker — keep it in sync with the table.

| Tier | Current version | Model ID | Notes |
|------|-----------------|----------|-------|
| Opus (high-judgment) | **Opus 4.8** | `claude-opus-4-8` | newest; API default; GA 2026-05-28; $5/$25 per MTok; 1M context; defaults to `high` effort |
| Fable (Mythos-class; hardest, long-horizon) | **Fable 5** | `claude-fable-5` (alias `fable`; 1M variant `claude-fable-5[1m]`) | most capable model in Claude Code; **opt-in** (`/model fable` or the `best` alias) — NOT the default on any account type; GA 2026-06-09; $10/$50 per MTok; 1M context (128k max output); defaults to `high`; requires Claude Code ≥ 2.1.170; falls back to Opus 4.8 on flagged cyber/bio content |
| Opus (high-judgment) | **Opus 4.8** | `claude-opus-4-8` | current Opus tier; **API/account default**; GA 2026-05-28; $5/$25 per MTok; 1M context; defaults to `high` effort; the content-fallback target for Fable 5 |
| Sonnet (workhorse) | **Sonnet 4.6** | `claude-sonnet-4-6` | 1M context |
| Haiku (fast / mechanical) | **Haiku 4.5** | `claude-haiku-4-5-20251001` | fast tier; ID is the snapshot-pinned alias |

**Retiring 2026-06-15:** Sonnet 4 + original Opus 4 → migrate to Sonnet 4.6 / Opus 4.8.

**Fast mode:** Opus 4.8 fast mode is $10/$50 per MTok (~2.5× speed). Opus 4.7 fast mode is $30/$150; Opus 4.6 fast mode is deprecated (~2026-06).

**Fable 5 maturity caveat (2026-06-10):** routing guidance lives in [`model-routing.md`](../rules/model-routing.md) — as of launch week, Fable 5 is deliberately **not** routed to the forked-reviewer fleet (2× the Opus price on the judgment tier, and day-one forced-tool-protocol reliability was observed to lag Opus 4.8: 28/28 structured-output subagent failures in one session's workflow vs 0 on Opus). Re-evaluate as point releases land.

## Prior generations

It is fine to mention older versions in **historical** contexts (CHANGELOG entries) or in explicit **"prior generation" / comparison** lines (e.g. "Opus 4.8's `high` does what Opus 4.7's `xhigh` did"). They must **not** be presented as the current / newest / default model.
Expand All @@ -30,4 +33,5 @@ The checker allows a line to mention an older version when it carries a marker s

1. Update the table **and** the `<!-- CURRENT: ... -->` marker above, plus the "Last verified" date.
2. Run `./scripts/check-model-versions.sh` and fix every current-state surface it flags.
3. Add a "Changed — model refresh" entry to `CHANGELOG.md`; leave historical CHANGELOG entries intact.
3. **Manually grep for superlatives** — `grep -rniE "newest|most capable" README.md CLAUDE.md guide/ docs/index.html .claude/rules/` — and re-verify each hit. The checker validates *version strings*; a claim like "X is the newest model" is a **semantic** assertion it can only partially catch (it flags `newest`/`most capable` lines that name a non-top tier, but tier-relative phrasings like "the newest Opus" are legitimately allowed). The 2026-06-09 Fable 5 launch made exactly this class of claim false while the gate stayed green.
4. Add a "Changed — model refresh" entry to `CHANGELOG.md`; leave historical CHANGELOG entries intact.
13 changes: 9 additions & 4 deletions .claude/references/scheduled-routines.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,23 @@ The nightly reproducibility job is the *backstop*. The *immediate* signal is the

## Setting one up

`/schedule` takes a **natural-language description**, not flags:

```text
/schedule create "nightly-repro" --cron "0 6 * * *" \
--prompt "Run /audit-reproducibility against the current passport. If any claim FAILs (not EXPLAINED), summarize which tables are affected and push a notification; otherwise exit quietly."
/schedule nightly at 6am: run /audit-reproducibility against the current passport.
If any claim FAILs (not EXPLAINED), summarize which tables are affected and notify me;
otherwise exit quietly.
```

`scripts/nightly-repro-check.sh` is a thin local equivalent for users who prefer a machine cron over a Routine (note: a local cron does not survive a closed laptop — prefer `/schedule`).
A precise cron expression (e.g. `0 6 * * *`) is applied via `/schedule update` *after* the routine exists; manage with `/schedule list` / `update` / `remove`. Two scheduling constraints to design around: the **minimum interval is 1 hour**, and accounts carry a **daily run cap** — so batch checks into one routine rather than many small ones. Routines operate on **committed repos**: anything uncommitted or private-by-design (e.g. a local research vault) is invisible to them.

`scripts/nightly-repro-check.sh` is a thin local equivalent for users who prefer a machine cron over a Routine — and the right tool for uncommitted/private material (note: a local cron does not survive a closed laptop; for committed repos prefer `/schedule`).

## Guardrails for unattended runs

- **Never point an unattended loop at a submission portal, shared/restricted data, or a co-author's inbox without a human gate.** Routines *propose*; a human *sends*. (`/triage-inbox` never auto-sends; the [`git-guardrails`](../hooks/git-guardrails.py) hook still blocks destructive git even in a routine.)
- **Bound the cost.** A nightly full-manuscript re-audit is fine; a nightly 7× `/seven-pass-review` is not — cost-pilot first.
- **MCP may be absent in headless/cron runs** (interactively-authenticated servers like Gmail). Routines that need them must degrade gracefully.
- **Connectors are INCLUDED by default — least-privilege them.** Cloud Routines run with **all of your claude.ai connectors attached, write access included, and no approval prompts**. An unattended routine that only needs to read your repo should have Gmail/Calendar/Slack *removed from that routine's connector list* before it ever fires — the risk is not a missing connector but a fully-armed one acting without you. (Locally-authenticated MCP servers in your *terminal* sessions are a separate thing and may still be absent in other headless contexts — degrade gracefully either way.)

## Cross-references

Expand Down
9 changes: 9 additions & 0 deletions .claude/references/v2.0-backlog.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@ The v2.0.0 "modernization" release (2026-06-09) shipped the loop-first / gate-en

## Still deferred (post-v2.0)

### From the 2026-06-10 currency audit (do-soon tier)

- **Awesome-list distribution** — after topics/homepage/CITATION.cff land: one-line PRs to `hanlulong/awesome-ai-for-economists` (CC0) and the main claude-code awesome list(s). Low effort, high reach for the exact audience.
- **Zenodo DOI** — connect the GitHub repo to Zenodo (owner's account), then the next tagged release mints a DOI automatically; add the DOI badge to README + the `doi` field to CITATION.cff. The citability flywheel for replication-package acknowledgements.
- **Hook touchpoints note** for `orchestrator-protocol.md` / `scheduled-routines.md` — optional wiring (reduce-trigger / failure-resilience / per-reviewer logging hook events). *Verify each event name against current docs before documenting* — this audit caught fabricated CLI syntax; don't repeat it with hook names.
- **Persona-segmented cost table** (grad student vs faculty) — a small "what a month costs" table in the guide's Cost-Conscious Composition section; the model-routing rule now carries a one-line version.
- **Non-Claude coauthor gate note** — document the path for a coauthor who pulls the repo *without* Claude Code: `./scripts/install-hooks.sh` works for them too (pre-commit is plain bash/python), but skills/hooks guidance assumes the Claude loop; a short "for your non-Claude coauthor" README box would close it.
- **Audience scope (owner-set, 2026-06-10):** econ + closely related fields. The psychology/sociology/public-health cards below remain deferred indefinitely — do not build without an explicit owner ask.

### Portfolio hub: package development — Stata & Python (R shipped in v1.10.0)

The R package triad shipped in v1.10.0. Stata and Python remain, to cover the rest of the owner's package portfolio (2 Stata packages, 1 Python package).
Expand Down
11 changes: 11 additions & 0 deletions .claude/rules/model-routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@ Model tier is the second cost lever; **effort is the first.** Every model runs a

Set per skill/agent with the `effort:` frontmatter field. Several skills ship at `effort: high` for genuinely hard gates (e.g. `/seven-pass-review`, `/simulation-study`, `/r-package-check`). Match effort to the cognitive demand the same way you match model tier — and tune effort before you swap models.

## Where Fable 5 fits — and where it does not

**Fable 5** (GA 2026-06-09) is the most capable model in Claude Code — and this rule deliberately does **not** route any of the template's fleet to it. Two verified reasons:

1. **Cost discipline.** Fable 5 is $10/$50 per MTok vs Opus 4.8's $5/$25 — a flat 2× on exactly the judgment tier the 70/20/10 split exists to guard. The referee/editor/verifier agents are bounded, single-sitting tasks; Fable's premium is priced for *long-horizon, larger-than-one-sitting* autonomous work, which the fleet is not.
2. **Protocol maturity.** In one launch-week session's fan-out, Fable 5 subagents failed the forced structured-output tool protocol 28/28 times vs 0 observed failures on Opus 4.8 — a single-session signal, not a benchmark, but exactly the failure mode that matters here: in a fan-out fleet, a silent tool-protocol failure means a review lens returns *nothing*. (Same logic as the "don't push Opus down a tier" anti-pattern: a too-immature judge is as bad as a too-cheap one.)

**Where Fable 5 *is* the right call:** your own interactive sessions on the hardest long-horizon work — a multi-day refactor, a deep research synthesis you'll steer by hand — where you are in the loop to catch a protocol hiccup and the task actually exploits the model's horizon. Select it per-session (`/model fable`); leave the fleet's `model:` pins alone. Re-evaluate at Fable point releases (the protocol gap is the kind of thing that gets fixed); when it does, the high-judgment tier is the natural first candidate.

**Cost reality check (grad-student budgets):** a full `/review-paper --peer` runs a meaningful fraction of a dollar-denominated token budget at Opus prices; doubling the judgment tier doubles that line item with no quality evidence yet. When cost-constrained, drop *effort* first (the first lever, above), then tier — never the reverse.

## Why this matters

Cost reduction on routed skills is typically **50–80%** with no quality loss on the mechanical tier. The cache-TTL change (5-min default in 2026; Claude subscriptions get 1-hour automatically, API keys opt in) made multi-turn pipelines on API keys materially more expensive; per-agent routing recovers that lost ground without sacrificing the high-judgment lens where it matters.
Expand Down
2 changes: 1 addition & 1 deletion .claude/scripts/statusline.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Claude Code status line: shows permission mode, model, and git branch.
#
# Claude Code pipes a JSON session snapshot to stdin. Relevant keys:
# .model.display_name e.g. "Opus 4.x"
# .model.display_name e.g. "Opus <version>"
# .permission_mode e.g. "bypassPermissions" | "plan" | "acceptEdits" | "default"
# .workspace.current_dir absolute path of the cwd
#
Expand Down
76 changes: 76 additions & 0 deletions .claude/skills/submission-disclosures/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
name: submission-disclosures
description: Generate the submission-time disclosure block for a manuscript — the AI-use disclosure statement matched to the target journal's policy, CRediT author-contribution roles, conflict-of-interest statement, and data-availability statement. Use when the user says "AI disclosure", "disclosure statement", "do I need to disclose Claude", "CRediT roles", "conflict of interest statement", "data availability statement", or is preparing a submission package. NOT statistical-disclosure screening of restricted-data outputs — that is /disclosure-check.
argument-hint: "[manuscript path] [journal short-name, e.g. AER] [--no-ai | --statements-only]"
allowed-tools: ["Read", "Grep", "Glob", "Write", "WebSearch", "WebFetch"]
effort: medium
---

# /submission-disclosures — The Submission-Time Disclosure Block

Draft the four statements journals now require (or strongly expect) at submission, in one pass: **AI-use disclosure**, **CRediT contributor roles**, **conflict-of-interest**, and **data availability**. Journals tightened AI-use policies through 2025–2026; an undisclosed-AI finding at a top journal is now a research-integrity problem, not a formatting one — so the statement should be drafted *deliberately*, not improvised in the submission portal at midnight.

**This skill is about the author's disclosures TO the journal.** It is unrelated to [`/disclosure-check`](../disclosure-check/SKILL.md), which screens restricted-data *outputs* for statistical-disclosure risk (small cells, PII). Same word, different worlds.

## When to use

- Preparing a submission or resubmission package and the portal asks for AI-use / COI / data-availability statements.
- A revise-and-resubmit at a journal that adopted an AI policy since the original submission.
- A coauthor asks "do we need to say we used Claude/Copilot/ChatGPT on this?"

## Phases

### Phase 1 — Resolve the journal's actual policy

1. If a journal short-name is given, read its profile in [`journal-profiles.md`](../../references/journal-profiles.md) (top-5 econ + AEA-imprint policy notes + poli-sci top-3).
2. **Verify the current policy on the journal's own site** (`WebSearch`/`WebFetch`: "<journal> artificial intelligence policy authors", the journal's submission guidelines page). Policies moved fast in 2025–2026; a cached or remembered policy is not good enough for a submission. Record the URL and retrieval date in the output.
3. If no explicit AI policy exists, default to the strictest common denominator (disclose tools, scope of use, and human responsibility) — over-disclosure is free; under-disclosure is not.

### Phase 2 — Inventory what was actually used

Interview briefly (or infer from the repo when evident — e.g. `quality_reports/`, session logs, a CLAUDE.md):

- **Which tools** (Claude Code, Copilot, ChatGPT, Grammarly-class) and **for what**: writing/editing prose, code authoring, code review, literature search, data analysis, translation.
- **What stayed human**: research design, identification choices, interpretation, final verification of every number and citation (tie to the repo's own verification story — `/audit-reproducibility`, `/verify-claims` — when true, *say so*: "all AI-assisted numbers were independently verified against code" is a strength, not a confession).
- **What AI was NOT used for** when the journal cares (e.g., most policies bar AI as a listed author and bar undisclosed AI-generated images/data).

### Phase 3 — Draft the four statements

Write `quality_reports/submission_disclosures_[manuscript-slug].md` containing:

1. **AI-use disclosure** — journal-matched wording: tools + versions, scope of use, the affirmation that authors take full responsibility for all content and verified all AI-assisted output. Honest and specific; never boilerplate that overclaims ("no AI was used") when the repo's own logs say otherwise.
2. **CRediT roles** — the 14-role taxonomy mapped to each author (interview for the mapping; flag roles no author holds).
3. **Conflict-of-interest** — funding sources, paid/unpaid positions, data-provider relationships (IRB/data-use agreements often constrain what must be stated; cross-ref [`confidential-data.md`](../../rules/confidential-data.md)).
4. **Data availability** — aligned with the replication deposit: openICPSR/DCAS language when the target is an AEA-imprint journal (delegate the deposit itself to [`/replication-package`](../replication-package/SKILL.md); restricted-data access language per [`confidential-data.md`](../../rules/confidential-data.md)).

With `--statements-only`, emit the statements to chat without writing the file. With `--no-ai`, skip statement 1 (the user asserts no AI assistance — note in chat that the repo's own session logs may contradict this, if they visibly do).

### Phase 4 — Parity check against the manuscript

Grep the manuscript for an existing acknowledgments/disclosure section; flag contradictions (e.g., the paper thanks "research assistance" that the COI omits, or an existing AI statement that the new one contradicts). Do not silently overwrite — surface the diff.

## Exit behavior

- **Statements drafted, policy verified:** write the file, print the four statements + the policy URL/date, and remind the user the statements are drafts for *author* review — sign-off is theirs.
- **Journal policy unverifiable** (site unreachable, no policy found): emit the strict-default statements, clearly marked "default wording — verify against the journal's current author guidelines before submission."
- **Inventory contradicts `--no-ai`:** stop and surface the contradiction; never produce a false "no AI" statement.

## Flags

- `--no-ai` — Skip the AI-use statement (user asserts none was used). The skill still warns if repo evidence visibly contradicts the assertion.
- `--statements-only` — Print the statements to chat; write no file.

## Cross-references

- [`.claude/skills/disclosure-check/SKILL.md`](../disclosure-check/SKILL.md) — statistical-disclosure screening of restricted-data outputs (the other "disclosure"; unrelated).
- [`.claude/skills/replication-package/SKILL.md`](../replication-package/SKILL.md) — the deposit the data-availability statement must match.
- [`.claude/references/journal-profiles.md`](../../references/journal-profiles.md) — per-journal calibration, incl. the AEA DCAS policy note.
- [`.claude/rules/confidential-data.md`](../../rules/confidential-data.md) — restricted-data constraints on what the statements can say.
- [`.claude/skills/humanize/SKILL.md`](../humanize/SKILL.md) — detecting AI-voice in prose; disclosure and voice are separate obligations.

## What this skill does NOT do

- **Screen outputs for statistical disclosure risk** — that is [`/disclosure-check`](../disclosure-check/SKILL.md).
- **Build the replication deposit** — that is [`/replication-package`](../replication-package/SKILL.md); this skill only writes the statement that points at it.
- **Decide your ethics.** It drafts honest statements from what you report and what the repo shows; whether a use *needed* disclosing under a vague policy is the author's call — the skill defaults to disclosure when in doubt.
- **Submit anything.** Statements go in the user's submission package by the user's hand.
7 changes: 7 additions & 0 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Code of Conduct

This project follows the [Contributor Covenant v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).

**The short version:** be kind, be constructive, assume good faith. Critique ideas and code as hard as you like — the whole template is built on adversarial review — but never people. Harassment, discrimination, and personal attacks are not tolerated.

**Enforcement:** report conduct issues privately to the maintainer (see the email on [psantanna.com](https://psantanna.com)). Reports are handled confidentially. The maintainer may edit, remove, or reject contributions and ban contributors for behavior that violates this code.
Loading
Loading