Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
fed7fb8
SEO rework: meta description, keyword-rich title, and comparison table
May 28, 2026
7a65780
Add StaggeredDiD group-time effect plots (#939)
drbenvincent Jun 4, 2026
da0c4fb
Fix scalar score coercions for mypy (#940)
drbenvincent Jun 4, 2026
f2b082e
Update UML Diagrams (#933)
github-actions[bot] Jun 4, 2026
9abc057
Slim ARCHITECTURE.md and reference it from CONTRIBUTING.md (#945)
drbenvincent Jun 8, 2026
c43af84
ci(docs-preview): cancel when not in defined scopes of git diff (#943)
RussellSB Jun 8, 2026
fd88812
Add deterministic structural check scripts (#948)
drbenvincent Jun 8, 2026
f85604b
Bump the actions group across 1 directory with 3 updates (#923)
dependabot[bot] Jun 8, 2026
4d2442b
Warn when staggered DiD ATTs lack untreated-period support (#949)
drbenvincent Jun 8, 2026
2f3f054
Refresh agent skills layout (#952)
drbenvincent Jun 8, 2026
2f2685c
Add local patch coverage gate (#951)
drbenvincent Jun 8, 2026
efaccfe
Redesign CausalPy method selection skill (#931)
drbenvincent Jun 8, 2026
6fe2ec3
Fix #664: clone sklearn models to avoid mutating fit_intercept
aahammer-eu Jun 8, 2026
261a84e
Add outcome falsification, random placebo folds, and model clone supp…
cetagostini Jun 10, 2026
c0edc6f
Update UML Diagrams (#955)
github-actions[bot] Jun 10, 2026
d903132
Skip welcome workflow for automated bot accounts (#956)
drbenvincent Jun 10, 2026
e852b95
Bump pre-commit hooks and fix PyMarkdown MD032 violations (#957)
drbenvincent Jun 10, 2026
c8de426
ci: harden welcome.yml and document pull_request_target use (#908)
anevolbap Jun 10, 2026
838ec25
Widen numpydoc-validation checks across causalpy (#902)
drbenvincent Jun 10, 2026
93cff0b
Merge commit 'fed7fb81a5bd3a4c941a7e03a227c27e33cb75cf' into feature/…
drbenvincent Jun 11, 2026
71ef5e9
docs: add CausalImpact to comparison table
drbenvincent Jun 11, 2026
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
1 change: 0 additions & 1 deletion .agents/skills

This file was deleted.

35 changes: 35 additions & 0 deletions .agents/skills/feature-exploration/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
name: feature-exploration
description: Explore unfamiliar APIs, libraries, or implementation behavior with minimal reproducible examples and documented findings. Use when implementation details are unclear and can be resolved by reading docs, inspecting code, and running focused experiments.
---

# Feature Exploration

Use this developer skill when a task depends on API behavior that is unclear from memory or partially documented. The goal is to resolve uncertainty before changing production code.

## Workflow

1. State the uncertainty: name the API, behavior, or integration detail that needs proof.
2. Read the closest authoritative docs or source code before experimenting.
3. Build the smallest reproducible example that answers the question.
4. Run it in the project environment when it imports project code or dependencies.
5. Iterate only until the behavior is understood.
6. Record the finding in the final answer or in the durable project docs if it affects future work.
7. Apply the production change using the confirmed behavior.

## Guardrails

- Do not create throwaway files in tracked locations. If a temporary note is needed, use `.scratch/`.
- Do not leave exploratory scripts behind unless they become real tests or documented examples.
- Prefer adding a proper test under `causalpy/tests/` when the discovered behavior is important to preserve.
- Keep experiments narrow; avoid broad refactors while investigating.
- Follow the repository environment rules in `AGENTS.md` for commands that import CausalPy, PyMC, PyTensor, matplotlib, or repo tooling.

## Output

When using this skill, report:

- The uncertainty investigated.
- The evidence gathered.
- The conclusion.
- Any production change or test that now relies on that conclusion.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Bug-specific template:
<Clear, concise description of the bug>

## Steps to Reproduce

1. <Step 1>
2. <Step 2>

Expand All @@ -42,6 +43,7 @@ Bug-specific template:
<What actually happens>

## Environment

- CausalPy version:
- Python version:
- OS:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ Create `.scratch/issue_comments/issue-<number>-evaluation.md` with:
<Restate issue + status>

### Current Relevance

- Code references checked:
- Related PRs:
- Changes since issue creation:
Expand All @@ -73,8 +74,10 @@ Create `.scratch/issue_comments/issue-<number>-evaluation.md` with:
<Key points from comments>

### Recommendation

- **Status:** <Ready / Needs info / Blocked / Can be closed>
- **Proposed next steps:** <Actionable items>

```

Present the draft for user approval before posting. Do not hard-wrap lines in markdown drafts; keep paragraphs on a single line.
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ gh api graphql -f query='query {
Do **not** apply fallback automatically.

When native sub-issues are unavailable, first inform the user:

- what capability check failed (missing `parent`/`subIssues` fields or no `addSubIssue` mutation)
- that native hierarchy cannot be created in this repo/account context
- that a markdown tracking-issue fallback is available
Expand All @@ -137,8 +138,10 @@ Then explicitly ask whether they want to proceed with fallback. Only continue af
Use a tracking issue body with markdown task links:

```md

- [ ] #123 Child issue one
- [ ] #124 Child issue two

```

This renders correctly on GitHub and preserves parent-child tracking even without native hierarchy.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ Use subagents (via the Task tool) when work is noisy, broad, or high-risk. Each
Trigger when CI logs are long/noisy, failures span multiple jobs, or failure family is unclear.

Handoff (include in Task prompt):

- PR number and branch name
- Failed job names and relevant log snippets or `gh run view` output
- Ask for: root cause ranking, fix-first order, and minimal patch plan
Expand All @@ -90,6 +91,7 @@ Handoff (include in Task prompt):
Trigger when rebase/merge produces non-trivial conflicts, intent differs across branches, or conflict count is high.

Handoff (include in Task prompt):

- Target branch and merge/rebase direction
- Full conflict list (`git diff --name-only --diff-filter=U`) and key conflict markers/snippets
- Ask for: conflict risk map, lowest-risk resolution order, and explicit escalations
Expand All @@ -99,11 +101,13 @@ Handoff (include in Task prompt):
Do not auto-resolve and continue silently when conflicts are highly complex. Instead, stop and request maintainer input with a brief report.

Escalate by default when:

- `.ipynb` conflicts are messy (overlapping cell content plus metadata/output churn)
- conflict resolution would drop one branch's meaningful behavior
- conflicts touch core contracts and intent is ambiguous (experiments/models/tests/docs all changed around same behavior)

Escalation report must include:

- conflicted file list and risk class
- resolution options (1-2) with trade-offs
- recommended next step and what decision is needed from maintainer
Expand All @@ -113,12 +117,14 @@ Escalation report must include:
Do not keep patching silently when greening a PR turns into broader compatibility work outside the PR's feature surface. Stop after root-cause identification and ask the maintainer whether to continue in the PR or split the work into a separate branch/PR from `main`.

Escalate by default when:

- the failing checks are caused by third-party API or version drift in shared/core code
- the fix would benefit multiple open PRs or the default branch, not just the current PR
- the next fix would modify shared integrations beyond the feature the PR is introducing
- successive CI reruns keep exposing new failure families outside the original PR scope

Scope-drift report must include:

- the original PR goal and the newly discovered broader issue
- which files are feature-specific versus shared/core compatibility files
- options: patch in the PR, split a separate compatibility PR, or pause for maintainer direction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ prek run --files path/to/file.py

# Full verification before push/commit
prek run --all-files

# Python source/test changes: local patch coverage gate
make test-patch-cov
```

## If hooks modify files
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ Read these when the PR touches the relevant surface:

## CausalPy Review Norms

- Before reviewing code, read `AGENTS.md` and relevant local context. For docs-heavy PRs, also inspect `docs/source/notebooks/index.md`; for process-sensitive PRs, inspect `CONTRIBUTING.md` when present.
- Before reviewing code, read `AGENTS.md` (workflow) and `ARCHITECTURE.md` (design) for core changes. For docs-heavy PRs, also inspect `docs/source/notebooks/index.md`; for process-sensitive PRs, inspect `CONTRIBUTING.md` when present.
- Use `$CONDA_EXE run -n CausalPy <command>` for commands that import project code, run tests, build docs, or invoke repo tooling. `AGENTS.md` defines how to detect or set `CONDA_EXE`; if it is unset, inspect that environment guidance before running project commands.
- Use full permissions for commands that import PyMC, PyTensor, or matplotlib to avoid false sandbox failures.
- During review, prefer targeted local checks that match the changed surface. If you edit code or prepare a commit, run `prek run` during iteration and `prek run --all-files` before handoff unless the user explicitly says not to.
Expand All @@ -79,6 +79,7 @@ Use this structure:

```markdown
## Findings

- [severity] `path`: issue, why it matters, and what should change.

## Merge Readiness
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Each recurring pattern should include:

- Canonical example: <PR reference and concrete instance>.
- How to spot: <specific diagnostic prompt>.

```

## When to Prune
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ Thanks for the PR. I have comments grouped by severity below.

- [Specific positive about the implementation, tests, docs, or scope.]
- [Another specific positive when available.]

```

Keep positives specific. Generic praise adds little, but concrete reinforcement helps contributors preserve the good parts while fixing issues.
Expand Down
1 change: 0 additions & 1 deletion .claude/skills

This file was deleted.

2 changes: 2 additions & 0 deletions .cursor/agents/ci-failure-investigator.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@ When invoked:
5. Recommend exact verification commands to confirm fixes.

CausalPy-specific requirements:

- Respect AGENTS.md conventions: CausalPy env via `$CONDA_EXE run -n CausalPy <command>`.
- For commands importing PyMC/PyTensor/matplotlib or running pytest/doctest, explicitly note full permission requirements.
- Prefer targeted reruns before full suite reruns.
- If behavior changed, require proper pytest updates under `causalpy/tests/` (no throwaway scripts).

Output format (strict):

- Failing checks summary
- Root-cause ranking (highest leverage first)
- Minimal patch plan
Expand Down
5 changes: 5 additions & 0 deletions .cursor/agents/merge-conflict-analyst.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Operating mode:
- Escalate ambiguous or high-risk conflicts to maintainer decision.

When invoked:

1. Inventory conflicted files and classify each as:
- mechanical (format/import ordering/adjacent edits)
- semantic (behavior/API/test/docs meaning may differ)
Expand All @@ -28,11 +29,13 @@ When invoked:
4. After resolution, recommend focused verification commands and required tests.

Hard escalation rules (must not auto-resolve):

- `.ipynb` conflicts with many overlapping cell/output/metadata changes
- conflicts affecting experiment/model contracts (`causalpy/experiments/`, `causalpy/pymc_models.py`, `causalpy/skl_models.py`) where intent is unclear
- conflicts that require dropping one side's behavior without explicit maintainer approval

Notebook-specific handling:

- Prefer preserving semantic cell content and minimizing output/metadata churn.
- If notebook conflict is messy, produce a maintainer report:
- conflicting notebook paths
Expand All @@ -41,11 +44,13 @@ Notebook-specific handling:
- recommended manual next action

CausalPy requirements:

- Respect AGENTS.md conventions and avoid destructive git operations.
- Never discard unknown user changes.
- If behavior changes, require pytest updates in `causalpy/tests/`.

Output format (strict):

- Conflict map (file -> risk class)
- Proposed resolutions (ordered low-risk to high-risk)
- Escalations requiring maintainer input
Expand Down
3 changes: 0 additions & 3 deletions .cursor/commands/causalpy_demos.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/causalpy_estimators.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/causalpy_extras.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/causalpy_marimo.md

This file was deleted.

6 changes: 0 additions & 6 deletions .cursor/commands/causalpy_methods.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/causalpy_research.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/commit.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/evaluate_issue.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/file_bug_report.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/implement.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/issue-to-pr.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/make_plan.md

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/commands/research.md

This file was deleted.

1 change: 0 additions & 1 deletion .cursor/skills

This file was deleted.

6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ jobs:
python-version: "3.12"
- name: Run prek on changed files in PRs
if: github.event_name == 'pull_request'
uses: j178/prek-action@6ad80277337ad479fe43bd70701c3f7f8aa74db3 # v2.0.3
uses: j178/prek-action@bdca6f102f98e2b4c7029491a53dfd366469e33d # v2.0.4
with:
extra-args: --from-ref ${{ github.event.pull_request.base.sha }} --to-ref ${{ github.event.pull_request.head.sha }}
- name: Run prek on all files on pushes
if: github.event_name != 'pull_request'
uses: j178/prek-action@6ad80277337ad479fe43bd70701c3f7f8aa74db3 # v2.0.3
uses: j178/prek-action@bdca6f102f98e2b4c7029491a53dfd366469e33d # v2.0.4
with:
extra-args: --all-files

Expand Down Expand Up @@ -102,7 +102,7 @@ jobs:
python ./docs/source/.codespell/notebook_to_markdown.py --tempdir tmp_markdown
codespell
- name: Upload coverage to Codecov
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
with:
token: ${{ secrets.CODECOV_TOKEN }} # use token for more robust uploads
name: ${{ matrix.python-version }}
Expand Down
54 changes: 0 additions & 54 deletions .github/workflows/interrogate-badge.yml

This file was deleted.

Loading