Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
5929fbc
Staging (#29)
crheckman Jan 23, 2026
0474c6f
Initial commit: Private VLA Foundations with solution infrastructure
crheckman Jan 24, 2026
4ac4bd5
Add setup completion guide
crheckman Jan 24, 2026
d6a216b
refactor: Senior Staff infrastructure hardening
crheckman Jan 24, 2026
3013b99
feat: implement technical hardening suite
crheckman Jan 24, 2026
eb1227a
Merge staging into main: security hardening and Shadow CI
crheckman Jan 24, 2026
8b4ceef
refactor: consolidate docs and harden repo sync
crheckman Jan 25, 2026
9d3548e
feat: add VLA Guard skill and pre-flight command
crheckman Jan 25, 2026
f0a5a71
feat: add comprehensive Claude Code skills for course management
crheckman Jan 25, 2026
d37ee03
docs: add student-facing claude.md development guide
crheckman Jan 26, 2026
cc1ff71
docs: add comprehensive claude.md development guide
crheckman Jan 26, 2026
58e6e67
Remove draft watermark, add import
Jan 27, 2026
d9b2c8f
Remove draft watermark, add import
Jan 27, 2026
434fa82
feat(scratch-1): complete solution, fixtures, and uv integration
Jan 27, 2026
4d74523
fix(sync): use safe merge strategy to preserve student branches
Jan 27, 2026
fe8434b
fix(sanitize): exclude documentation files from SOLUTION marker check
Jan 27, 2026
8bb00b6
fix(workflow): use heredoc for multi-line commit message
Jan 28, 2026
abd6fd8
fix(data): create learnable action encoding for convergence
Jan 28, 2026
812230a
feat(gpu): enable CUDA 11.8 training and verify convergence
Jan 28, 2026
0b25eec
docs(scratch-1): update loss expectations to realistic values
Jan 28, 2026
0e76674
fix(workflow): allow variable interpolation in heredoc
Jan 28, 2026
8c21ad4
fix(workflow): replace heredoc with multiline string variable
Jan 28, 2026
fffa5a8
fix(workflow): use multiple -m flags for multiline commit message
Jan 28, 2026
7ffab82
fix(workflow): add token validation and use git credential helper
Jan 28, 2026
a2f7d94
fix(workflow): revert to direct token authentication in remote URL
Jan 28, 2026
6d0742b
fix(workflow): use PUBLIC_REPO_TOKEN_2 secret
Jan 28, 2026
c581d2f
fix(workflow): add token debugging and remote access test
Jan 28, 2026
9f93d3c
fix(workflow): prevent checkout action from persisting credentials
Jan 28, 2026
df8de1d
fix(sanitize): remove instructor docs and Claude workflows from publi…
Jan 28, 2026
6aaecc4
Release: release-scratch-1 (2026-01-28 17:22:36 UTC)
actions-user Jan 28, 2026
433b091
Merge branch 'release-release-scratch-1' into public-main
actions-user Jan 28, 2026
4bff6f0
fix(workflows): remove conflicting paths and paths-ignore
Jan 28, 2026
c3f833c
fix(workflow): handle rename/delete merge conflicts properly
Jan 28, 2026
2b913b6
Release: release-scratch-1 (2026-01-28 17:57:07 UTC)
actions-user Jan 28, 2026
7662ad1
Merge release release-scratch-1: resolved with release content
actions-user Jan 28, 2026
29e50cc
fix(shadow-tester): fix authentication for cross-repo testing
Jan 29, 2026
15ed8fb
Release: release-scratch-1 (2026-01-29 04:24:04 UTC)
actions-user Jan 29, 2026
9fc7f16
Merge release release-scratch-1: resolved with release content
actions-user Jan 29, 2026
651b8a4
Fix GitHub Actions: update SSH host to direct.ristoffer.ch
arpg-bot Feb 1, 2026
e1058a8
Fix GitHub Actions: update SSH host to direct.ristoffer.ch (#33)
crheckman Feb 1, 2026
218827a
Fix capstone.mdx: remove unclosed div tag
arpg-bot Feb 2, 2026
7d81d46
fix: resolve LaTeX double-rendering and improve audit page styling
crheckman Feb 3, 2026
59ab9c8
fix: proper KaTeX CSS loading for static exports with client component
crheckman Feb 3, 2026
588a0ed
Revise capstone project details and objectives
crheckman Feb 3, 2026
db146f2
Complete Scratch-1: Transformer Backbone
antony-zhao Feb 4, 2026
9c920f0
[grading] temp commit for remote test run
crh-bot Feb 17, 2026
568dd0f
Add automated grading report (70/70)
crh-bot Feb 17, 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
8 changes: 8 additions & 0 deletions .continueignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# .continueignore
**/datasets/**
**/checkpoints/**
**/node_modules/**
*.pt
*.pth
*.png
*.jpg
14 changes: 13 additions & 1 deletion .github/workflows/deploy-staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@ name: Deploy Staging Branch
on:
push:
branches: [ staging ]
paths-ignore:
# Ignore changes that don't affect the site
- 'src/assignments/**'
- 'scripts/**'
- 'tests/**'
- 'private/**'
- '**.md'
- '.github/**'
- 'data/**'
- 'pyproject.toml'
- 'pytest.ini'
- 'uv.lock'

jobs:
deploy:
Expand All @@ -11,7 +23,7 @@ jobs:
- name: Deploy Static Site to Remote Server
uses: appleboy/ssh-action@v1.0.3
with:
host: ristoffer.ch
host: direct.ristoffer.ch
username: crh
key: ${{ secrets.SSH_DEPLOY_KEY }}
script: |
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@ name: Deploy to Production
on:
push:
branches: [ main ]
paths-ignore:
# Ignore changes that don't affect the site
- 'src/assignments/**'
- 'scripts/**'
- 'tests/**'
- 'private/**'
- '**.md'
- '.github/**'
- 'data/**'
- 'pyproject.toml'
- 'pytest.ini'
- 'uv.lock'

jobs:
deploy:
Expand All @@ -11,7 +23,7 @@ jobs:
- name: Deploy to Remote Server
uses: appleboy/ssh-action@v1.0.3
with:
host: ristoffer.ch
host: direct.ristoffer.ch
username: crh
key: ${{ secrets.SSH_DEPLOY_KEY }}
script: |
Expand Down
139 changes: 139 additions & 0 deletions .github/workflows/shadow-tester.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
name: Shadow Tester

on:
repository_dispatch:
types: [run-shadow-tests]

permissions:
contents: read
pull-requests: write # Needed to comment on PRs

jobs:
shadow-test:
runs-on: ubuntu-latest
steps:
- name: Checkout Private Repo
uses: actions/checkout@v4
with:
repository: crheckman/private-vla-foundations
token: ${{ secrets.PRIVATE_REPO_TOKEN }} # PAT with access to private repo

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install Python Dependencies
run: |
pip install pytest torch numpy

- name: Fetch Student Code from Public PR
env:
PR_NUMBER: ${{ github.event.client_payload.pr_number }}
HEAD_BRANCH: ${{ github.event.client_payload.head_branch }}
HEAD_SHA: ${{ github.event.client_payload.head_sha }}
REPO_URL: ${{ github.event.client_payload.repo_url }}
run: |
echo "Fetching student code from PR #${PR_NUMBER}"

# Clone the public repo
git clone https://github.com/arpg/vla-foundations.git /tmp/public-repo
cd /tmp/public-repo

# Fetch the PR branch
git fetch origin pull/${PR_NUMBER}/head:pr-${PR_NUMBER}
git checkout pr-${PR_NUMBER}

# Copy student code to our testing directory
# Copy src/assignments to the current repo
if [ -d "src/assignments" ]; then
cp -r src/assignments/* $GITHUB_WORKSPACE/src/assignments/ || true
fi

echo "Student code fetched successfully"

- name: Run Internal Rigorous Tests
id: tests
continue-on-error: true
run: |
# Run pytest with internal tests
pytest tests/internal/ -v --tb=short --maxfail=5 > test_output.txt 2>&1
TEST_EXIT_CODE=$?

# Capture output
cat test_output.txt

# Save exit code for later
echo "exit_code=${TEST_EXIT_CODE}" >> $GITHUB_OUTPUT

# Exit with the actual test result
exit $TEST_EXIT_CODE

- name: Prepare Test Summary
if: always()
id: summary
run: |
if [ -f test_output.txt ]; then
# Extract summary from pytest output
SUMMARY=$(tail -20 test_output.txt | grep -E "(PASSED|FAILED|ERROR)" || echo "Test execution completed")

# Escape newlines for GitHub output
SUMMARY="${SUMMARY//$'\n'/'%0A'}"
echo "summary=${SUMMARY}" >> $GITHUB_OUTPUT
else
echo "summary=No test output available" >> $GITHUB_OUTPUT
fi

- name: Comment on Public PR - Pass
if: steps.tests.outcome == 'success'
uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }} # Default token works for same repo
repository: arpg/vla-foundations
issue-number: ${{ github.event.client_payload.pr_number }}
body: |
## ✅ Shadow CI: Internal Tests Passed

Your submission passed all internal rigorous tests!

<details>
<summary>Test Summary</summary>

```
${{ steps.summary.outputs.summary }}
```

</details>

---
*These are hidden internal tests run by the instructor. Your code meets the required standards.*

- name: Comment on Public PR - Fail
if: steps.tests.outcome == 'failure'
uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }} # Default token works for same repo
repository: arpg/vla-foundations
issue-number: ${{ github.event.client_payload.pr_number }}
body: |
## ❌ Shadow CI: Internal Tests Failed

Your submission did not pass all internal tests. Please review the feedback and make necessary corrections.

<details>
<summary>Test Summary</summary>

```
${{ steps.summary.outputs.summary }}
```

</details>

### Next Steps:
1. Review the test failures above
2. Make corrections to your code
3. Push updates to your PR branch
4. Tests will automatically re-run

---
*These are hidden internal tests run by the instructor. Contact @crheckman if you need clarification on the failures.*
31 changes: 10 additions & 21 deletions .github/workflows/vla-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,15 @@ jobs:

### Common Issues:

**1. Semantic Line Breaks**
**1. Required Frontmatter Fields**
- Every audit MDX file must include these fields:
- `title`: Paper title
- `author`: Paper author(s)
- `topic`: Research topic/category
- `paper`: Link to paper or citation
- All fields must have non-empty values (no placeholders like "TBD" or "TODO")

**2. Semantic Line Breaks**
- Each sentence should be on its own line
- This makes PR commenting and reviewing much easier
- Example:
Expand All @@ -53,7 +61,7 @@ jobs:
+ This makes PR review much easier.
```

**2. Clean Git History**
**3. Clean Git History**
- No "Merge branch 'main'" commits allowed
- Use `git rebase main` instead of `git merge main`
- Keep your commit history linear and clean
Expand Down Expand Up @@ -144,22 +152,3 @@ jobs:

---
*This preview will be removed when the PR is closed.*

trigger-shadow-tests:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' && github.base_ref == 'staging'
needs: audit
steps:
- name: Trigger Shadow CI in Private Repo
uses: peter-evans/repository-dispatch@v2
with:
token: ${{ secrets.PRIVATE_DISPATCH_TOKEN }}
repository: crheckman/private-vla-foundations
event-type: run-shadow-tests
client-payload: |
{
"pr_number": "${{ github.event.pull_request.number }}",
"head_branch": "${{ github.event.pull_request.head.ref }}",
"head_sha": "${{ github.event.pull_request.head.sha }}",
"repo_url": "${{ github.event.pull_request.head.repo.clone_url }}"
}
22 changes: 10 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,13 @@ __pycache__/

# project-specific
/arxiv-digest/
# Private repo files - do not commit to public
private/
tests/
scripts/_sanitize_todos.py
scripts/manage_solutions.py
scripts/sanitize.sh
scripts/setup_private_repo.sh
scripts/add_github_secret.sh
pytest.ini
PRIVATE_REPO_SETUP.md
SETUP_WITH_GH_CLI.md
QUICK_REFERENCE.md

# Private solution infrastructure (NEVER commit to public branches)
*.backup.py

# Claude Code skill outputs (generated reports)
.claude/releases/*.md
.claude/sync-reports/*.md
!.claude/releases/.gitkeep
!.claude/sync-reports/.gitkeep
!tests/internal/reports/.gitkeep
97 changes: 0 additions & 97 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,103 +83,6 @@ git push --force-with-lease

---

## Repository Structure

```
vla-foundations/
├── app/ # Next.js App Router (web framework)
│ ├── page.tsx # Landing page
│ ├── textbook/[slug]/ # Dynamic chapter pages
│ ├── course/ # Course overview page
│ │ └── assignments/[slug]/ # Dynamic assignment pages
│ └── contributors/[slug]/ # Dynamic contributor profile pages
├── content/ # All MDX content (rendered as web pages)
│ ├── textbook/ # 8-chapter VLA textbook
│ │ ├── foundations/ # Chapter 0: Core concepts
│ │ ├── architectures/ # Chapter 1: Model designs
│ │ ├── data/ # Chapter 2: Dataset construction
│ │ ├── training/ # Chapter 3: Optimization methods
│ │ ├── evaluation/ # Chapter 4: Metrics and benchmarks
│ │ ├── deployment/ # Chapter 5: Production systems
│ │ ├── applications/ # Chapter 6: Real-world use cases
│ │ └── future/ # Chapter 7: Open problems
│ │
│ ├── course/ # Course materials
│ │ ├── Syllabus.mdx # Course syllabus
│ │ ├── assignments/ # Assignment specifications
│ │ └── submissions/ # Student submission reports
│ │
│ └── contributors/ # Contributor profiles
│ └── [github-handle].mdx # One profile per contributor
└── src/ # Executable source code
└── assignments/ # Assignment code templates
└── scratch-1/ # Example: Transformer implementation
├── README.md # Minimal README
├── backbone.py # Implementation template with TODOs
└── generate_data.py # Dataset generator script
```

---

## The 8-Chapter Textbook

0. **Foundations** - Core concepts and problem formulation
1. **Architectures** - Model designs and network topologies
2. **Data** - Dataset construction and curation strategies
3. **Training** - Optimization and fine-tuning methods
4. **Evaluation** - Metrics and benchmarking protocols
5. **Deployment** - Production systems and scaling
6. **Applications** - Real-world use cases and case studies
7. **Future Directions** - Open problems and research frontiers

---

## Development Workflow

### Initial Setup

```bash
# Clone the repository
git clone https://github.com/arpg/vla-foundations.git
cd vla-foundations

# Install dependencies
pnpm install

# Run development server
pnpm dev
```

Navigate to `http://localhost:3000` to see the site.

### Local Build

```bash
# Build the static site
pnpm build

# Preview the production build
pnpm start
```

---

## Technologies

### Core
- **Next.js 16**: Static site generation
- **TypeScript**: Type safety
- **Tailwind CSS**: Styling
- **MDX**: Markdown with JSX

### Content Processing
- **remark-math** + **rehype-katex**: LaTeX rendering
- **remark-gfm**: GitHub-flavored Markdown

---

## Resources

### Documentation
Expand Down
Loading