Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
61a28b9
fix(ci): bootstrap pcs-core workspace dependency in benchmark.yml
fraware Oct 11, 2026
77fda6b
fix(ci): bootstrap pcs-core workspace dependency in contributor-dry-r…
fraware Oct 11, 2026
36a8b76
fix(ci): bootstrap pcs-core workspace dependency in mcp-contract.yml
fraware Oct 11, 2026
61f44d7
fix(ci): bootstrap pcs-core workspace dependency in security-sarif.yml
fraware Oct 11, 2026
b06b9ce
fix(ci): bootstrap pcs-core workspace dependency in release.yml
fraware Oct 11, 2026
46e53b0
fix(ci): match uv sibling path and package manager pin in benchmark.yml
fraware Oct 11, 2026
ded3b00
fix(ci): match uv sibling path and package manager pin in contributor…
fraware Oct 11, 2026
fa40933
fix(ci): match uv sibling path and package manager pin in mcp-contrac…
fraware Oct 11, 2026
1d90400
fix(ci): match uv sibling path and package manager pin in security-sa…
fraware Oct 11, 2026
08e3bb5
fix(ci): match uv sibling path and package manager pin in release.yml
fraware Oct 11, 2026
f873c27
fix(ci): match uv sibling path and package manager pin in corpus-vali…
fraware Oct 11, 2026
26ab56c
fix(ci): match uv sibling path and package manager pin in pcs-bench-p…
fraware Oct 11, 2026
0e78be2
fix(ci): match uv sibling path and package manager pin in portal-ci.yml
fraware Oct 11, 2026
9bc3c7f
fix(ci): provision pinned Ruff CLI for security SARIF job
fraware Oct 11, 2026
8d349cb
fix(ci): pass actual pcs-core schemas directory to mirror script
fraware Oct 11, 2026
49b842c
fix(ci): pass actual pcs-core schemas directory to mirror script
fraware Oct 11, 2026
d299123
fix(ci): add fail-closed, pinned PCS packaging bootstrap
fraware Oct 11, 2026
b3e34e4
fix(ci): pin and validate PCS workspace dependency in benchmark.yml
fraware Oct 11, 2026
c72a73e
fix(ci): pin and validate PCS workspace dependency in contributor-dry…
fraware Oct 11, 2026
6bda359
fix(ci): pin and validate PCS workspace dependency in mcp-contract.yml
fraware Oct 11, 2026
59a09cf
fix(ci): pin and validate PCS workspace dependency in security-sarif.yml
fraware Oct 11, 2026
7cf6283
fix(ci): pin and validate PCS workspace dependency in release.yml
fraware Oct 11, 2026
9fef033
fix(ci): pin and validate PCS workspace dependency in corpus-validati…
fraware Oct 11, 2026
f995bd3
fix(ci): pin and validate PCS workspace dependency in pcs-bench-produ…
fraware Oct 11, 2026
27ecef2
fix(ci): install pcs-bench into project venv instead of protected sys…
fraware Oct 11, 2026
442cf39
ci(temporary): produce checked Prettier output without write permission
fraware Oct 11, 2026
c29ee11
fix(ci): install all uv workspace packages for full pytest collection
fraware Oct 11, 2026
97ac4fe
style(portal): apply CI-verified Prettier formatting
fraware Oct 11, 2026
9cf5c57
style(portal): apply CI-verified Prettier formatting
fraware Oct 11, 2026
9de0038
style(portal): apply CI-verified Prettier formatting
fraware Oct 11, 2026
562b0e3
style(portal): apply CI-verified Prettier formatting
fraware Oct 11, 2026
8713b8c
style(portal): apply CI-verified Prettier formatting
fraware Oct 11, 2026
c7fc571
ci: remove one-time read-only formatting export workflow
fraware Oct 11, 2026
a640ceb
fix(fixtures): preserve byte-exact release artifacts across Git checkout
fraware Oct 12, 2026
4cc4912
fix(fixtures): restore manifest-digested CRLF bytes for dataset_recei…
fraware Oct 12, 2026
8bf53d7
fix(fixtures): restore manifest-digested CRLF bytes for environment_r…
fraware Oct 12, 2026
0beabbc
fix(fixtures): restore manifest-digested CRLF bytes for computation_r…
fraware Oct 12, 2026
bab8761
fix(fixtures): restore manifest-digested CRLF bytes for result_artifa…
fraware Oct 12, 2026
3ce83a3
fix(fixtures): restore manifest-digested CRLF bytes for computation_w…
fraware Oct 12, 2026
d98acad
fix(fixtures): restore manifest-digested CRLF bytes for workflow_prof…
fraware Oct 12, 2026
c24f949
fix(fixtures): restore manifest-digested CRLF bytes for science_claim…
fraware Oct 12, 2026
b009333
fix(fixtures): restore manifest-digested CRLF bytes for verification_…
fraware Oct 12, 2026
5a97a0f
fix(fixtures): restore manifest-digested CRLF bytes for signed_scienc…
fraware Oct 12, 2026
ece083a
fix(fixtures): restore manifest-digested CRLF bytes for proof_obligat…
fraware Oct 12, 2026
7eb0dc7
fix(fixtures): restore manifest-digested CRLF bytes for lean_check_re…
fraware Oct 12, 2026
00dc15d
fix(fixtures): preserve rejected-release artifact bytes across checkout
fraware Oct 12, 2026
9e5945b
fix(fixtures): restore signed rejected-release bytes of dataset_recei…
fraware Oct 12, 2026
268bd16
fix(fixtures): restore signed rejected-release bytes of environment_r…
fraware Oct 12, 2026
b409b9f
fix(fixtures): restore signed rejected-release bytes of computation_r…
fraware Oct 12, 2026
b421e50
fix(fixtures): restore signed rejected-release bytes of result_artifa…
fraware Oct 12, 2026
6b61786
fix(fixtures): restore signed rejected-release bytes of computation_w…
fraware Oct 12, 2026
3057168
fix(fixtures): restore signed rejected-release bytes of workflow_prof…
fraware Oct 12, 2026
4d329d2
fix(fixtures): restore signed rejected-release bytes of science_claim…
fraware Oct 12, 2026
dad30ab
fix(fixtures): restore signed rejected-release bytes of verification_…
fraware Oct 12, 2026
5911ea7
fix(fixtures): restore signed rejected-release bytes of signed_scienc…
fraware Oct 12, 2026
f123799
fix(fixtures): restore signed rejected-release bytes of proof_obligat…
fraware Oct 12, 2026
76abb8f
fix(fixtures): restore signed rejected-release bytes of lean_check_re…
fraware Oct 12, 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
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Bash recipes and shims must stay LF (Git Bash / Linux CI).
*.sh text eol=lf
scripts/node_bin/node text eol=lf

# These externally digested release artifacts must retain exact byte encodings.
tests/pcs/fixtures/computation-release/*.json -text
tests/pcs/fixtures/computation-rejected-release/*.json -text
15 changes: 15 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,21 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Checkout pcs-core (workspace dependency)
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py

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

- name: Install deps
Expand Down
25 changes: 22 additions & 3 deletions .github/workflows/contributor-dry-run-monthly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,33 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Checkout pcs-core (workspace dependency)
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py
- uses: astral-sh/setup-uv@v4
- uses: pnpm/action-setup@v4
with:
version: "10.0.0"
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: "pnpm"
- uses: pnpm/action-setup@v4
with:
version: 10
- name: Install elan for Lean build
run: |
curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y --default-toolchain none
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"
- name: Install Python deps
run: uv sync --all-packages
- name: Install portal deps
Expand Down
18 changes: 13 additions & 5 deletions .github/workflows/corpus-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,16 @@ jobs:
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core
continue-on-error: true

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py

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

Expand All @@ -29,7 +37,7 @@ jobs:

- name: Sync PCS benchmark schemas from pcs-core
if: hashFiles('pcs-core/schemas/**') != ''
run: uv run python scripts/sync_pcs_benchmark_schemas.py pcs-core
run: uv run python scripts/sync_pcs_benchmark_schemas.py pcs-core/schemas

- name: Install pcs-core extra (when checked out)
run: |
Expand All @@ -46,11 +54,11 @@ jobs:

- name: Install pcs-bench CLI
if: hashFiles('pcs-bench/pyproject.toml') != ''
run: uv pip install --system -e pcs-bench
run: uv pip install --python .venv/bin/python -e pcs-bench

- uses: pnpm/action-setup@v4
with:
version: 10
version: "10.0.0"

- uses: actions/setup-node@v4
with:
Expand All @@ -77,7 +85,7 @@ jobs:
run: uv run --project pipeline python -m sm_pipeline.cli validate-all

- name: Run pipeline tests
run: uv run --project pipeline pytest
run: uv run --all-packages pytest

- name: Run PCS contract tests
env:
Expand Down
15 changes: 15 additions & 0 deletions .github/workflows/mcp-contract.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Checkout pcs-core (workspace dependency)
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py
- uses: astral-sh/setup-uv@v4
- name: Install deps (including MCP extras)
run: uv sync --all-packages --extra mcp
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/pcs-bench-producer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,17 @@ jobs:
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py

- name: Checkout pcs-bench
uses: actions/checkout@v4
with:
Expand All @@ -49,7 +58,7 @@ jobs:
run: uv pip install --system -e pcs-bench

- name: Sync PCS benchmark schemas
run: uv run python scripts/sync_pcs_benchmark_schemas.py pcs-core
run: uv run python scripts/sync_pcs_benchmark_schemas.py pcs-core/schemas

- name: LabTrust producer gate (release-grade)
env:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/portal-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:

- uses: pnpm/action-setup@v4
with:
version: 10
version: "10.0.0"

- uses: actions/setup-node@v4
with:
Expand Down
17 changes: 16 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,25 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Checkout pcs-core (workspace dependency)
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py

- uses: astral-sh/setup-uv@v4
- uses: pnpm/action-setup@v4
with:
version: 10
version: "10.0.0"
- uses: actions/setup-node@v4
with:
node-version: 22
Expand Down
17 changes: 16 additions & 1 deletion .github/workflows/security-sarif.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,27 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Checkout pcs-core (workspace dependency)
uses: actions/checkout@v4
with:
repository: SentinelOps-CI/pcs-core
ref: 9c971f5f9da8a424924dd8f48d6a3b71a1009e1b
path: pcs-core

- name: Make PCS dependency available at uv.lock sibling path
run: |
test -f "$GITHUB_WORKSPACE/pcs-core/python/pyproject.toml"
ln -sfn "$GITHUB_WORKSPACE/pcs-core" "$GITHUB_WORKSPACE/../pcs-core"

- name: Verify pinned PCS revision and repair upstream packaging metadata
run: python scripts/prepare_pcs_core_workspace.py
- uses: astral-sh/setup-uv@v4
- name: Install Python deps
run: uv sync --all-packages
- name: Generate Ruff SARIF (warning-first)
run: |
uv run --project pipeline ruff check pipeline kernels kernels/conformance scripts tests --output-format sarif --exit-zero > ruff.sarif
uvx --from ruff==0.17.0 ruff check pipeline kernels kernels/conformance scripts tests --output-format sarif --exit-zero > ruff.sarif
- name: Upload SARIF to code scanning
uses: github/codeql-action/upload-sarif@v3
with:
Expand Down
9 changes: 7 additions & 2 deletions portal/app/pcs/claims/[claimId]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@ export default async function PcsClaimRoute({
<h1 className="text-3xl font-semibold">PCS claim not found</h1>
<p className="mt-2 text-gray-600">
No imported claim with id “{claimId}”. Run{" "}
<code className="rounded bg-gray-100 px-1">just pcs-import-bundle</code>{" "}
<code className="rounded bg-gray-100 px-1">
just pcs-import-bundle
</code>{" "}
then{" "}
<code className="rounded bg-gray-100 px-1">just pcs-render-claim</code>.
<code className="rounded bg-gray-100 px-1">
just pcs-render-claim
</code>
.
</p>
</main>
);
Expand Down
15 changes: 12 additions & 3 deletions portal/app/pcs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,14 @@ export default async function PcsClaimsIndexPage() {
{claimIds.length === 0 ? (
<p className="mt-6 text-sm text-gray-600">
No claims imported yet. Run{" "}
<code className="rounded bg-gray-100 px-1">just pcs-import-release</code>{" "}
<code className="rounded bg-gray-100 px-1">
just pcs-import-release
</code>{" "}
then{" "}
<code className="rounded bg-gray-100 px-1">just pcs-render-claim claim-pcs-qc-release-v0.1</code>.
<code className="rounded bg-gray-100 px-1">
just pcs-render-claim claim-pcs-qc-release-v0.1
</code>
.
</p>
) : (
<ul className="mt-6 space-y-3">
Expand All @@ -29,7 +34,11 @@ export default async function PcsClaimsIndexPage() {
const stale = model?.staleness?.stale === true;
return (
<li key={claimId} className="rounded border p-4">
<ClaimListHeader claimId={claimId} releaseId={releaseId} stale={stale} />
<ClaimListHeader
claimId={claimId}
releaseId={releaseId}
stale={stale}
/>
{model?.claim?.text != null && (
<p className="mt-2 line-clamp-2 text-sm text-gray-700">
{model.claim.text}
Expand Down
8 changes: 6 additions & 2 deletions portal/lib/pcsData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ async function readPcsExport(): Promise<PcsPortalExport | null> {
return JSON.parse(raw) as PcsPortalExport;
}

async function readClaimFromCorpus(claimId: string): Promise<PcsClaimReadModel | null> {
async function readClaimFromCorpus(
claimId: string,
): Promise<PcsClaimReadModel | null> {
const p = path.join(CORPUS_PCS, claimId, "read_model.json");
const raw = await fs.readFile(p, "utf8").catch(() => null);
if (!raw) return null;
Expand All @@ -25,7 +27,9 @@ export async function getAllPcsClaimIds(): Promise<string[]> {
if (exported?.claim_ids?.length) {
return exported.claim_ids;
}
const entries = await fs.readdir(CORPUS_PCS, { withFileTypes: true }).catch(() => []);
const entries = await fs
.readdir(CORPUS_PCS, { withFileTypes: true })
.catch(() => []);
return entries.filter((e) => e.isDirectory()).map((e) => e.name);
}

Expand Down
Loading
Loading