Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
057ce10
add: detailed-plans.md
john-aigora May 28, 2025
55858d6
prep for porting
john-aigora May 28, 2025
2652175
Initialize project structure
john-aigora May 28, 2025
5a894d5
Merge pull request #1 from aigorahub/codex/review-sensr-folder-and-ex…
john-aigora May 28, 2025
332307e
Add initial implementation and tests
john-aigora May 28, 2025
7b856be
Merge pull request #2 from aigorahub/codex/read-plan-to-port-and-defi…
john-aigora May 28, 2025
f328864
Mark completed tasks
john-aigora May 28, 2025
fe2801e
Merge pull request #3 from aigorahub/codex/execute-remaining-steps-in…
john-aigora May 28, 2025
2cf2e98
Add duotrio proportion correct function
john-aigora May 28, 2025
c419b4a
Merge pull request #4 from aigorahub/codex/continue-development-as-pl…
john-aigora May 28, 2025
14d0ec2
Add discrim_2afc utility
john-aigora May 28, 2025
5c77a78
Merge branch 'master' into f8dy24-codex/continue-development-as-planned
john-aigora May 28, 2025
9add1a5
Merge pull request #5 from aigorahub/f8dy24-codex/continue-developmen…
john-aigora May 28, 2025
9e35be4
Add discrimination utilities
john-aigora May 28, 2025
6050de7
Merge branch 'master' into sgzjtn-codex/continue-development-as-planned
john-aigora May 28, 2025
56aec7c
Merge pull request #6 from aigorahub/sgzjtn-codex/continue-developmen…
john-aigora May 28, 2025
587ef8e
Expand discrimination utilities
john-aigora May 28, 2025
3bfdfb1
Merge pull request #5 from aigorahub/master
john-aigora May 28, 2025
3148692
Merge branch '47kgkv-codex/continue-development-as-planned'
john-aigora May 28, 2025
41f1fcd
feat: Implement core sensR functionalities in sensPy
google-labs-jules[bot] May 28, 2025
1ef32e1
Merge pull request #11 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 28, 2025
ac20f2a
feat: Implement remaining core sensR functions and initialize documen…
google-labs-jules[bot] May 28, 2025
6873e6f
Merge pull request #12 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 28, 2025
811b6c5
docs: Create and populate Eleventy documentation site for sensPy
google-labs-jules[bot] May 29, 2025
16bf920
Merge pull request #13 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 29, 2025
28aad3a
docs: Populate and enhance Eleventy documentation site
google-labs-jules[bot] May 29, 2025
6491d99
feat: Implement final core functions, enhance docs, attempt plot gene…
google-labs-jules[bot] May 29, 2025
f032876
docs: Complete documentation content and add plot generation scripts
google-labs-jules[bot] May 29, 2025
fcd8d9e
Merge pull request #14 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 29, 2025
d64e9a5
feat: Implement initial power and sample size module (senspy.power)
google-labs-jules[bot] May 29, 2025
3cd9e85
Merge pull request #6 from aigorahub/master
john-aigora May 29, 2025
72d0b8b
Merge pull request #15 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 29, 2025
420c5f2
Merge pull request #7 from aigorahub/master
john-aigora May 29, 2025
7bc4068
docs: Update README.md with comprehensive features and examples
google-labs-jules[bot] May 29, 2025
e0c6169
Merge pull request #8 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 29, 2025
d08042a
docs: Update plan-to-port.md with current project status
google-labs-jules[bot] May 29, 2025
6622a98
Merge pull request #9 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 29, 2025
f45aaad
Merge pull request #16 from aigorahub/master
john-aigora May 29, 2025
fe68013
Merge pull request #17 from aigorahub/master
john-aigora May 29, 2025
8217e1f
fix errors
john-aigora May 29, 2025
8671ac5
Merge remote-tracking branch 'origin/feature/senspy-core-porting-phas…
john-aigora May 29, 2025
484d8fe
Merge remote-tracking branch 'origin/f8dy24-codex/continue-developmen…
john-aigora May 29, 2025
46c93cd
Merge pull request #18 from aigorahub/feature/senspy-core-porting-phase2
john-aigora May 29, 2025
8c032c3
Jules was unable to complete the task in time. Please review the work…
google-labs-jules[bot] May 30, 2025
024bbdb
Hi there! I've been working on integrating `statsmodels` for more rob…
google-labs-jules[bot] May 30, 2025
150210c
Merge pull request #19 from aigorahub/jules_wip_1783544046489058631
john-aigora May 30, 2025
09f4fd0
Jules was unable to complete the task in time. Please review the work…
google-labs-jules[bot] May 30, 2025
1191d54
Refactor core models and enhance power module.
google-labs-jules[bot] May 30, 2025
92278ef
Merge pull request #20 from aigorahub/jules_wip_9386452759438983251
john-aigora May 30, 2025
5f51ae6
Enhance power module and implement profile likelihood CIs.
google-labs-jules[bot] May 31, 2025
4c6b69e
Merge pull request #21 from aigorahub/jules_wip_9386452759438983251
john-aigora May 31, 2025
05986dc
Add auto-comment-gemini-review.yml workflow
john-aigora Jun 21, 2025
18cc9e6
Removes source files from main repository
bartek-aigora Dec 16, 2025
b78c4d6
Establishes core project structure and documentation
bartek-aigora Dec 16, 2025
b0817d7
Updates dependencies and targets Python 3.10
bartek-aigora Dec 16, 2025
bb37efe
Merge pull request #23 from aigorahub/fresh_porting_plan
bartek-aigora Dec 16, 2025
46980cb
"Claude PR Assistant workflow"
bartek-aigora Dec 16, 2025
f930256
"Claude Code Review workflow"
bartek-aigora Dec 16, 2025
3b9849c
Merge remote-tracking branch 'origin/add-claude-github-actions-176591…
bartek-aigora Dec 16, 2025
b258fcb
Implements sensPy package with core features
bartek-aigora Dec 16, 2025
258c40b
Migrates CI to uv and adds Python 3.12
bartek-aigora Dec 16, 2025
a6ba87c
Standardizes d-prime search range
bartek-aigora Dec 16, 2025
d623dfa
Merge pull request #24 from aigorahub/phase0
bartek-aigora Dec 16, 2025
084bf6a
Implements discrim analysis and golden data generation
bartek-aigora Dec 16, 2025
10a72b4
Handles edge cases and improves statistical tests
bartek-aigora Dec 16, 2025
4402a49
Improves confidence interval calculation
bartek-aigora Dec 16, 2025
bc2d05f
Raises ValueError for unhandled statistic types
bartek-aigora Dec 16, 2025
216948e
Merge pull request #25 from aigorahub/phase1
bartek-aigora Dec 16, 2025
c45d127
Adds power and sample size calculations
bartek-aigora Dec 16, 2025
a75cd6e
Improves statistic argument handling
bartek-aigora Dec 16, 2025
eac118c
Handles edge cases and improves sample size estimation
bartek-aigora Dec 16, 2025
ce3612d
Merge pull request #26 from aigorahub/power_sample_size
bartek-aigora Dec 16, 2025
7907a2c
Add beta-binomial models for overdispersed discrimination data
bartek-aigora Dec 17, 2025
560351b
Fix numerical stability in chance-corrected beta-binomial likelihood
bartek-aigora Dec 17, 2025
a9a3c1f
Merge pull request #27 from aigorahub/beta-binomial
bartek-aigora Dec 17, 2025
c73447f
Add 2-AC protocol analysis function
bartek-aigora Dec 17, 2025
45d5b4b
PR review issues addressed
bartek-aigora Dec 17, 2025
967ead2
Merge pull request #28 from aigorahub/twoAC
bartek-aigora Dec 17, 2025
f3f2072
Add AI-generated documentation for coding agents
john-aigora Dec 17, 2025
201b3dd
Add Same-Different protocol
bartek-aigora Dec 17, 2025
61d0b32
Fix samediff PR review issues
bartek-aigora Dec 17, 2025
3a96451
Merge pull request #29 from aigorahub/same-different
bartek-aigora Dec 17, 2025
fc8b19b
Implement Phase 2: DOD model, d-prime tests, and A-Not-A protocol
bartek-aigora Dec 17, 2025
d2e7689
Address PR review findings for Phase 2 implementation
bartek-aigora Dec 17, 2025
dd340b4
Fix weighted average SE formula and expand valid protocols
bartek-aigora Dec 17, 2025
1757810
upd CI workflows timeout
bartek-aigora Dec 17, 2025
c97c6bc
fix broken test for python 3.10
bartek-aigora Dec 17, 2025
2ffa665
Fix CLD algorithm and variance calculation consistency
bartek-aigora Dec 17, 2025
164e57b
Fix numerical stability, CLD algorithm, and exception handling
bartek-aigora Dec 17, 2025
019c6eb
Merge pull request #30 from aigorahub/phase2
bartek-aigora Dec 17, 2025
724c340
Auto stash before checking out "origin/master"
bartek-aigora Dec 17, 2025
cfeb786
documentation
bartek-aigora Dec 17, 2025
4fb8c33
Fix numerical stability and code quality issues in ROC/plotting modules
bartek-aigora Dec 17, 2025
b81c56e
Fix scale parameter docs and unify color definitions
bartek-aigora Dec 17, 2025
26d5596
Merge pull request #31 from aigorahub/plotting
bartek-aigora Dec 17, 2025
cc2dcc0
Add double link functions, simulation, and protocol power
bartek-aigora Dec 17, 2025
745a635
text coverage and pr comments fixes
bartek-aigora Dec 17, 2025
d3dedb6
token optional
bartek-aigora Dec 17, 2025
80d7348
Merge pull request #32 from aigorahub/double_link
bartek-aigora Dec 17, 2025
62614d5
Add double link functions, simulation, and protocol-specific power
bartek-aigora Dec 17, 2025
6275d29
Normalize line endings and add .gitattributes
bartek-aigora Dec 17, 2025
35cf694
Merge branch 'double_link'
bartek-aigora Dec 17, 2025
bc002cd
Remove redundant files and update .gitignore
bartek-aigora Dec 17, 2025
d4cea87
Bump version to 0.1.0 and update README
bartek-aigora Dec 17, 2025
6c6d279
version upd
bartek-aigora Dec 17, 2025
e9f2d92
Add Codecov badge and update docs for v0.1.0
bartek-aigora Dec 17, 2025
cf338ba
Package publishing workflow
bartek-aigora Dec 17, 2025
c59288f
adding docs to github pages
bartek-aigora Dec 17, 2025
1df59e2
Add beta status disclaimers and call for testers
claude Dec 17, 2025
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
15 changes: 0 additions & 15 deletions .Rbuildignore

This file was deleted.

10 changes: 10 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"permissions": {
"allow": [
"Bash(rm:*)",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

The permission Bash(rm:*) is overly broad and presents a significant security risk. It allows the execution of rm with any arguments, which could lead to the unintentional deletion of any file or directory. It's crucial to restrict this permission to only what is absolutely necessary.

      "Bash(rm:-rf:build dist *.egg-info site .pytest_cache .coverage coverage.xml htmlcov)"

"Bash(.venv/bin/python -m pytest:*)",
"Bash(~/.local/bin/uv venv:*)",
"Bash(~/.local/bin/uv pip install:*)"
]
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Local Claude permissions file committed to repo

.claude/settings.local.json appears to be a developer-local configuration but is committed into the repo. It also allows broad commands like Bash(rm:*), which can unintentionally expand tool permissions for anyone using Claude with this checkout.

Fix in Cursor Fix in Web

Binary file added .coverage
Binary file not shown.
23 changes: 23 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Auto detect text files and perform LF normalization
* text=auto

# Force LF for all text files
*.py text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.json text eol=lf
*.toml text eol=lf
*.txt text eol=lf
*.rst text eol=lf
*.R text eol=lf
*.Rd text eol=lf
*.Rnw text eol=lf
*.bib text eol=lf

# Binary files
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.pdf binary
13 changes: 13 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
name: Bug Report
about: Create a report to help us improve sensPy
---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior.

**Expected behavior**
A clear and concise description of what you expected to happen.
5 changes: 5 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Summary
Describe the changes in this pull request.

## Testing
- [ ] `pytest`
51 changes: 51 additions & 0 deletions .github/workflows/auto-comment-gemini-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Place this file in: .github/workflows/auto-comment-gemini-review.yml

name: Auto Comment Gemini Review

on:
push:
branches:
- '**' # Trigger on push to any branch

jobs:
comment-gemini-review:
runs-on: ubuntu-latest
permissions:
pull-requests: write # Required to comment on pull requests
contents: read # Required to access repository contents

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Get branch name
id: branch
run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT

- name: Check for open pull requests
id: check-pr
env:
GITHUB_TOKEN: ${{ secrets.GEMINI_REVIEW_TOKEN }} # Use organization secret
run: |
PR_JSON=$(gh api \
-H "Accept: application/vnd.github+json" \
"/repos/${{ github.repository }}/pulls?head=${{ github.repository_owner }}:${{ steps.branch.outputs.branch }}&state=open")
PR_COUNT=$(echo "$PR_JSON" | jq length)
if [ "$PR_COUNT" -gt 0 ]; then
PR_NUMBER=$(echo "$PR_JSON" | jq -r '.[0].number')
echo "Found open PR #$PR_NUMBER"
echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
else
echo "No open PR found for branch ${{ steps.branch.outputs.branch }}"
echo "pr_number=" >> $GITHUB_OUTPUT
fi

- name: Comment on pull request
if: steps.check-pr.outputs.pr_number != ''
env:
GITHUB_TOKEN: ${{ secrets.GEMINI_REVIEW_TOKEN }} # Use organization secret
run: |
gh api \
-H "Accept: application/vnd.github+json" \
"/repos/${{ github.repository }}/issues/${{ steps.check-pr.outputs.pr_number }}/comments" \
-f body='/gemini review'
57 changes: 57 additions & 0 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Claude Code Review

on:
pull_request:
types: [opened, synchronize]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"

jobs:
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'

runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}

Please review this pull request and provide feedback on:
- Code quality and best practices
- Potential bugs or issues
- Performance considerations
- Security concerns
- Test coverage

Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.

Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.

# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Claude review workflow cannot post PR comments

claude-code-review.yml grants only pull-requests: read, but the provided prompt instructs using gh pr comment to leave feedback. Without pull-requests: write (or issues: write if commenting via issue comments), the workflow won’t be able to publish the review comment.

Fix in Cursor Fix in Web


50 changes: 50 additions & 0 deletions .github/workflows/claude.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Claude Code

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]

jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}

# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read

# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'

# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'

45 changes: 45 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Deploy Docs

on:
push:
branches: [master]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install dependencies
run: |
pip install mkdocs mkdocs-material mkdocstrings[python]

- name: Build docs
run: mkdocs build

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: site/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Docs workflow lacks MkDocs configuration

The Deploy Docs workflow runs mkdocs build, but the repository snapshot contains no mkdocs.yml/mkdocs.yaml, so the job will fail at runtime when MkDocs can’t find a configuration file.

Fix in Cursor Fix in Web

deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
35 changes: 35 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Publish to PyPI

on:
release:
types: [published]
workflow_dispatch: # Manual trigger

jobs:
publish:
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write # For trusted publishing

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v4

- name: Set up Python
run: uv python install 3.11

- name: Build package
run: |
uv venv .venv
uv pip install build
uv run python -m build

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
# For trusted publishing (no token needed if configured on PyPI)
# Or use: password: ${{ secrets.PYPI_API_TOKEN }}
packages-dir: dist/
41 changes: 41 additions & 0 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: CI

on:
push:
branches: [master, main]
pull_request:
branches: [master, main]

jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12']

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v4

- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}

- name: Create venv and install dependencies
run: |
uv venv .venv --python ${{ matrix.python-version }}
uv pip install -e .
uv pip install pytest pytest-cov

- name: Run tests with coverage
run: uv run pytest tests/ -v --tb=short --cov=senspy --cov-report=xml --cov-report=term-missing

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: CI installs editable package without packaging config

The CI job runs uv pip install -e ., but there’s no pyproject.toml, setup.py, or setup.cfg in the repository snapshot, so dependency installation will fail and tests won’t run.

Fix in Cursor Fix in Web

- name: Upload coverage reports to Codecov
if: matrix.python-version == '3.11'
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
37 changes: 28 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
.Rproj.user
.Rhistory
.RData
.Ruserdata
# Ignore all files ending with a 'tilde' (autogenerated by some
# programs, e.g. emacs):
*~
/doc/
/Meta/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*.so

# Virtual environments
venv/
.env

# Distribution / packaging
build/
dist/
*.egg-info/

# Misc
.DS_Store

# Build outputs
site/

# Test/cache
.pytest_cache/
.coverage
coverage.xml
htmlcov/

# Virtual environments
.venv/
Loading