Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
c5a31d5
feat(sn): extend StandardName schema with rich fields and fix persist…
Simon-McIntosh Apr 10, 2026
a2b28a3
refactor(sn): rename ids_paths to imas_paths and add physics_domain f…
Simon-McIntosh Apr 10, 2026
952f9ec
docs: plan to import PhysicsDomain from imas-standard-names
Simon-McIntosh Apr 10, 2026
b67bd2c
fix: hardcode ACR image name so fork RC builds reach Azure
Simon-McIntosh Apr 10, 2026
5bf6247
refactor: import PhysicsDomain from imas-standard-names
Simon-McIntosh Apr 10, 2026
b61b361
fix: remove dead IMAS_DD_VERSION from container build workflow
Simon-McIntosh Apr 10, 2026
32bc0ca
docs: update AGENTS.md with fork/main workflow
Simon-McIntosh Apr 10, 2026
ba423bc
merge: develop into main for v5.2.1-rc1 release
Simon-McIntosh Apr 10, 2026
a21b3bb
chore: update GitHub Actions to Node.js 24 compatible versions
Simon-McIntosh Apr 10, 2026
1a5d910
feat(sn): extend SNCandidate with rich fields and update compose/vali…
Simon-McIntosh Apr 10, 2026
840d54c
chore: increase smoke test health check timeout margin
Simon-McIntosh Apr 10, 2026
867a6e6
feat(sn): add import-catalog CLI command for catalog feedback loop
Simon-McIntosh Apr 10, 2026
1efbc05
feat(sn): add version tracking and check mode to catalog import
Simon-McIntosh Apr 10, 2026
df6240b
refactor: rename sn import-catalog to sn import
Simon-McIntosh Apr 10, 2026
a102951
chore: migrate MCP config to project root with .vscode symlink
Simon-McIntosh Apr 10, 2026
a6d499a
feat(sn): lossless publish pipeline with rich catalog fields
Simon-McIntosh Apr 10, 2026
4809a3d
feat(sn): add MCP tools and benchmark quality tiers
Simon-McIntosh Apr 10, 2026
435ecab
test: add embedding coverage and coalesce safety integration tests
Simon-McIntosh Apr 10, 2026
4e706fa
refactor: rename MCP tools for consistent dd/ids naming
Simon-McIntosh Apr 10, 2026
6b0c3cb
test: add TestE2ERoundTrip for full SN lifecycle (build→publish→edit→…
Simon-McIntosh Apr 10, 2026
a2a89ec
fix: use keyword args for GraphClient.query() in sn_tools
Simon-McIntosh Apr 10, 2026
13740eb
docs: add standard names CLI, lifecycle, and MCP tools to AGENTS.md
Simon-McIntosh Apr 10, 2026
7f83dd2
fix: lifecycle_filter treats NULL as active in list/search_dd_paths
Simon-McIntosh Apr 10, 2026
8ea06bd
feat: resolve lifecycle_status inheritance at build time and backfill…
Simon-McIntosh Apr 10, 2026
96fc743
feat: surface lifecycle in check/version/changelog tools, gate get_gr…
Simon-McIntosh Apr 10, 2026
b2a2b2b
fix: pin setup-uv action to v8.0.0 (immutable tag)
Simon-McIntosh Apr 10, 2026
8fdd57e
docs: add standard name feature plans
Simon-McIntosh Apr 10, 2026
d1fe720
docs: update standard name implementation order
Simon-McIntosh Apr 10, 2026
312ce76
feat: rename sn build to sn mint
Simon-McIntosh Apr 10, 2026
256e519
fix: relax clean worktree check for RC releases
Simon-McIntosh Apr 10, 2026
59631de
docs: add consolidated SN benchmark and lifecycle plan (Plan 19)
Simon-McIntosh Apr 10, 2026
5d03485
feat: add sn reset and sn clear lifecycle commands
Simon-McIntosh Apr 10, 2026
4d2eedd
feat: fix benchmark prompt parity with mint pipeline
Simon-McIntosh Apr 10, 2026
8499610
fix: remove empty env blocks breaking CI workflows
Simon-McIntosh Apr 10, 2026
d0960bd
feat: expand benchmark reference set to 52 entries across 8 IDSs
Simon-McIntosh Apr 10, 2026
0065e83
feat: add calibration dataset and enhanced reviewer for benchmark
Simon-McIntosh Apr 10, 2026
646e921
feat: add cache reporting to benchmark and model selection runbook
Simon-McIntosh Apr 10, 2026
5b48611
docs: update documentation for SN benchmark and lifecycle features
Simon-McIntosh Apr 10, 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
10 changes: 10 additions & 0 deletions .github/agents/engineer.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,16 @@ When modifying LinkML schemas:
- Documentation and prompt template updates
- Refactors where the before/after is well-defined

### Commonly-Modified Areas

| Path | Purpose |
|------|---------|
| `imas_codex/sn/` | Standard name pipeline (mint, benchmark, graph ops) |
| `tests/sn/` | SN test suite (mostly mock-based, no Neo4j required) |
| `imas_codex/llm/prompts/sn/` | LLM prompt templates for SN |
| `imas_codex/sn/benchmark_reference.py` | Gold reference set for benchmark scoring |
| `imas_codex/sn/benchmark_calibration.yaml` | Calibration dataset for reviewer consistency |

## When to Escalate

If a task requires:
Expand Down
14 changes: 14 additions & 0 deletions .github/skills/project-dev/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ git push origin main
| `@pytest.mark.integration` | Full integration tests |
| `@pytest.mark.unit` | Fast unit tests |

SN tests live in `tests/sn/` and run with `uv run pytest tests/sn/ -v`. They do not require
Neo4j unless marked `@pytest.mark.graph` — the rest use mocks. Benchmark tests validate prompt
parity with the mint pipeline, calibration dataset integrity, and reference set coverage.

## Project Structure

| Directory | Purpose |
Expand All @@ -95,7 +99,9 @@ git push origin main
| `imas_codex/tools/` | MCP tool implementations |
| `imas_codex/remote/` | Remote execution (SSH, scripts) |
| `imas_codex/llm/` | LLM integration and prompt templates |
| `imas_codex/sn/` | Standard name pipeline (mint, benchmark, graph ops) |
| `tests/` | Test suite (mirrors source structure) |
| `tests/sn/` | Standard name test suite (mostly mock-based) |
| `plans/features/` | Active feature plans |
| `agents/` | Agent documentation and schema reference |

Expand All @@ -107,3 +113,11 @@ git push origin main
- **Model selection**: Use `get_model(section)` from `imas_codex.settings`
- **Facility config**: Use `get_facility(facility)` — never hardcode facility values
- **Remote execution**: Use `run_python_script()` from `imas_codex.remote.executor`

### SN Key Files

| File | Purpose |
|------|---------|
| `imas_codex/sn/benchmark_reference.py` | Gold reference set (52 entries across 8 IDSs) |
| `imas_codex/sn/benchmark_calibration.yaml` | Known-quality examples for reviewer consistency |
| `imas_codex/llm/prompts/sn/` | LLM prompt templates for mint, review, and benchmark |
5 changes: 5 additions & 0 deletions .github/skills/service-ops/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ uv run imas-codex llm spend # Cost tracking
uv run imas-codex llm logs # View logs
```

`sn mint` and `sn benchmark` require the LLM proxy to be running. Model names must use the
`openrouter/` prefix (e.g. `openrouter/anthropic/claude-sonnet-4-5`) to preserve
`cache_control` blocks — prompt caching is handled provider-side by OpenRouter, not by this
codebase.

## SSH Tunnels

```bash
Expand Down
7 changes: 2 additions & 5 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
name: Benchmark

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

on:
push:
tags: ["v*"]
Expand Down Expand Up @@ -54,7 +51,7 @@ jobs:
steps:
# ── Setup ──────────────────────────────────────────────────────────
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down Expand Up @@ -94,7 +91,7 @@ jobs:
df -h

- name: Install UV + ASV
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

Expand Down
1 change: 0 additions & 1 deletion .github/workflows/container-cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ on:
type: boolean

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
ACR_REGISTRY: crcommonallfrc.azurecr.io
IMAGE_NAME: iterorganization/imas-codex

Expand Down
31 changes: 15 additions & 16 deletions .github/workflows/docker-build-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ concurrency:
cancel-in-progress: true

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
GHCR_REGISTRY: ghcr.io
ACR_REGISTRY: crcommonallfrc.azurecr.io
IMAGE_NAME: ${{ github.repository }}
IMAS_DD_VERSION: "4.1.0"
# ACR image name is always the upstream path so Azure picks up fork RC
# builds. GHCR uses IMAGE_NAME (per-fork) — each fork has its own GHCR.
ACR_IMAGE_NAME: iterorganization/imas-codex
# Graph OCI artifacts: try the repo owner's registry first (where
# `imas-codex release` pushes them), fall back to the upstream org
# registry for forks that haven't pushed their own graph yet.
Expand Down Expand Up @@ -52,7 +53,7 @@ jobs:

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

- name: Install oras CLI
run: |
Expand Down Expand Up @@ -207,7 +208,7 @@ jobs:

- name: Install uv
if: steps.graph-tag.outputs.imas-tag != 'none'
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down Expand Up @@ -257,7 +258,7 @@ jobs:

- name: Upload test results
if: always() && steps.graph-tag.outputs.imas-tag != 'none'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: graph-quality-results
path: graph-quality-results.xml
Expand All @@ -270,7 +271,7 @@ jobs:
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down Expand Up @@ -316,16 +317,16 @@ jobs:
echo "Container started, waiting for services..."

- name: Wait for health check
timeout-minutes: 5
timeout-minutes: 10
run: |
echo "Waiting for MCP server to be ready..."
for i in $(seq 1 60); do
for i in $(seq 1 90); do
if docker exec smoke-test curl -sf http://127.0.0.1:8000/health > /dev/null 2>&1; then
echo "✅ MCP server healthy after ${i}s"
echo "✅ MCP server healthy after $((i * 5))s"
break
fi
if [ $i -eq 60 ]; then
echo "❌ Health check timed out"
if [ $i -eq 90 ]; then
echo "❌ Health check timed out after 450s"
docker logs smoke-test
exit 1
fi
Expand Down Expand Up @@ -436,7 +437,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0 # Full git history for dynamic versioning
# Ensure all refs are available
Expand Down Expand Up @@ -528,7 +529,7 @@ jobs:
id: meta-acr
uses: docker/metadata-action@v5
with:
images: ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}
images: ${{ env.ACR_REGISTRY }}/${{ env.ACR_IMAGE_NAME }}
tags: |
type=semver,pattern=v{{version}}${{ matrix.graph_variant.suffix }}
type=semver,pattern=v{{major}}.{{minor}}${{ matrix.graph_variant.suffix }}
Expand All @@ -555,7 +556,6 @@ jobs:
${{ steps.meta-ghcr-rc.outputs.labels }}
build-args: |
IDS_FILTER=
IMAS_DD_VERSION=${{ env.IMAS_DD_VERSION }}
GHCR_REGISTRY=${{ needs.graph-quality.outputs.graph-registry }}
GRAPH_TAG=${{ steps.variant.outputs.graph-tag }}
GRAPH_PACKAGE=${{ matrix.graph_variant.package }}
Expand Down Expand Up @@ -583,7 +583,6 @@ jobs:
${{ steps.meta-acr.outputs.labels }}
build-args: |
IDS_FILTER=
IMAS_DD_VERSION=${{ env.IMAS_DD_VERSION }}
GHCR_REGISTRY=${{ needs.graph-quality.outputs.graph-registry }}
GRAPH_TAG=${{ steps.variant.outputs.graph-tag }}
GRAPH_PACKAGE=${{ matrix.graph_variant.package }}
Expand Down Expand Up @@ -641,7 +640,7 @@ jobs:

- name: Generate artifact attestation for GHCR (releases only)
if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-rc')
uses: actions/attest-build-provenance@v1
uses: actions/attest-build-provenance@v4
with:
subject-name: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.build-release.outputs.digest }}
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/graph-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ concurrency:
cancel-in-progress: true

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
NEO4J_PASSWORD: imas-codex
NEO4J_URI: bolt://localhost:7687

Expand Down Expand Up @@ -58,7 +57,7 @@ jobs:

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

- name: Install oras CLI
run: |
Expand Down Expand Up @@ -186,7 +185,7 @@ jobs:
"MATCH (n) RETURN count(n) AS nodes, labels(n)[0] AS label ORDER BY nodes DESC LIMIT 10"

- name: Install uv
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down Expand Up @@ -230,7 +229,7 @@ jobs:

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: graph-quality-results
path: graph-quality-results.xml
Expand Down
9 changes: 3 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
name: Release

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

on:
push:
tags:
Expand All @@ -23,12 +20,12 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

Expand Down Expand Up @@ -90,7 +87,7 @@ jobs:
echo "tag_name=${TAG_NAME}" >> $GITHUB_OUTPUT

- name: Create Release
uses: softprops/action-gh-release@v1
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.changelog.outputs.tag_name }}
name: Release ${{ steps.changelog.outputs.tag_name }}
Expand Down
15 changes: 6 additions & 9 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
name: Test

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

on:
push:
branches: [main]
Expand All @@ -23,7 +20,7 @@ jobs:
imas-dd-version: ["3.42.2", "4.1.0"]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Set up Node.js
uses: actions/setup-node@v4
Expand All @@ -37,7 +34,7 @@ jobs:
npx --version

- name: Cache npm packages
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.npm
key: npm-${{ runner.os }}-${{ hashFiles('.github/workflows/test.yml') }}
Expand All @@ -51,7 +48,7 @@ jobs:
run: playwright install --with-deps chromium

- name: Install uv
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down Expand Up @@ -85,7 +82,7 @@ jobs:
IMAS_DD_VERSION: ${{ matrix.imas-dd-version }}

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v6
if: ${{ !cancelled() }}
with:
file: ./coverage.xml
Expand Down Expand Up @@ -116,10 +113,10 @@ jobs:
--health-start-period 30s

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install uv
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.0.0
with:
enable-cache: true
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ __pycache__/
imas_codex/graph/models.py
imas_codex/graph/schema_context_data.py
imas_codex/config/models.py
imas_codex/core/physics_domain.py
agents/schema-reference.md

# Generated index files
Expand Down
9 changes: 7 additions & 2 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
{
"mcpServers": {
"servers": {
"imas-dd": {
"type": "stdio",
"command": "uv",
"args": ["run", "imas-codex", "serve", "--dd-only"]
},
"codex": {
"type": "stdio",
"command": "uv",
"args": ["run", "imas-codex", "serve"]
},
"imas": {
"imas-prod": {
"type": "http",
"url": "https://imas-dd.iter.org/mcp"
},
Expand Down
22 changes: 0 additions & 22 deletions .vscode/mcp.json

This file was deleted.

1 change: 1 addition & 0 deletions .vscode/mcp.json
Loading
Loading