Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
5014240
feat(runtime): build isolated workspace and closed bundles (U1)
nathanvale Aug 8, 2026
dd04981
fix(review): close U1 review findings
nathanvale Aug 8, 2026
2c25ad3
feat(runtime): add runtime-exec custody engine with verified shared c…
nathanvale Aug 8, 2026
1e62309
feat(runtime): add custody skill, honest skill status, and U2 proof o…
nathanvale Aug 8, 2026
c18def8
refactor(build): share shell-projection helpers across renderers
nathanvale Aug 8, 2026
649d35b
fix(review): close U2 custody-engine review findings
nathanvale Aug 8, 2026
457a649
fix(review): close PR #22 custody-engine review findings
nathanvale Aug 8, 2026
7027a0e
feat(runtime): activate Bun-only plugin payload (U3)
nathanvale Aug 8, 2026
7526beb
feat(runtime): qualify single Bun candidate (U4)
nathanvale Aug 8, 2026
4519bfa
fix(runtime): harden Bun custody qualification
nathanvale Aug 8, 2026
4cd3967
fix(review): close remaining Bun custody findings
nathanvale Aug 8, 2026
9b726d1
fix(proof): validate runtime control envelopes
nathanvale Aug 8, 2026
99dd9b7
fix(review): close Codex runtime findings
nathanvale Aug 8, 2026
b21ea49
fix(build): enforce admitted dependency graph
nathanvale Aug 8, 2026
6ae9e37
fix(build): resolve workspace lock entries
nathanvale Aug 8, 2026
36acd0e
fix(runtime): close loader and repair escapes
nathanvale Aug 8, 2026
2009fe7
fix(proof): enforce offline runtime execution
nathanvale Aug 8, 2026
4a47ff6
fix(proof): preserve isolated runner environment
nathanvale Aug 8, 2026
a49eaa8
fix(build): contain bare asset loads
nathanvale Aug 8, 2026
2cbb4c7
fix(runtime): close peer and lock failure paths
nathanvale Aug 8, 2026
50e80a5
fix(build): resolve workspace peer ranges
nathanvale Aug 8, 2026
a814e56
fix(runtime): clean up failed staged chmod
nathanvale Aug 8, 2026
92a50fc
fix(runtime): diagnose noexec cache failures
nathanvale Aug 8, 2026
d1bed8f
fix(runtime): preserve cleanup failure envelopes
nathanvale Aug 8, 2026
3501129
fix(runtime): report unreadable lock records
nathanvale Aug 8, 2026
4e3c890
fix(runtime): close corrupt recovery cleanup paths
nathanvale Aug 8, 2026
5f97910
fix(runtime): approve migrated cache recovery
nathanvale Aug 8, 2026
78c958d
fix(build): admit package import aliases
nathanvale Aug 8, 2026
4d12747
fix(runtime): harden stale lock reclamation
nathanvale Aug 8, 2026
e6b4095
fix(build): close dependency admission gaps
nathanvale Aug 8, 2026
13817ae
fix(build): bind alias and peer resolution
nathanvale Aug 8, 2026
64104f8
fix(runtime): bind closed execution claims
nathanvale Aug 8, 2026
cf17a30
fix(build): reject runtime code generation
nathanvale Aug 8, 2026
6a61d10
fix(build): make loader validation token-aware
nathanvale Aug 8, 2026
1289adf
docs(runtime): clarify bundle trust boundary
nathanvale Aug 8, 2026
bd986aa
fix(build): close loader token edge cases
nathanvale Aug 8, 2026
feae154
fix(runtime): reject symlinked repair locks
nathanvale Aug 8, 2026
0ce0895
fix(build): admit only known runtime modules
nathanvale Aug 8, 2026
7baee40
fix(build): distinguish loader call sites
nathanvale Aug 8, 2026
f65baef
fix(build): close indirect loader escapes
nathanvale Aug 8, 2026
e88b499
fix(build): reject optional ambient calls
nathanvale Aug 8, 2026
d426649
fix(build): reject computed ambient references
nathanvale Aug 8, 2026
6e247ce
fix(build): preserve contextual of operands
nathanvale Aug 8, 2026
c057bd0
fix(runtime): recover stale reclaim markers
nathanvale Aug 8, 2026
e9f3f2d
fix(runtime): bind reclaim markers to owners
nathanvale Aug 8, 2026
b0d25ac
fix(runtime): revalidate stale marker identity
nathanvale Aug 8, 2026
bcb3aad
fix: fail closed without writer identity
nathanvale Aug 8, 2026
2c4c815
fix: close remaining custody races
nathanvale Aug 8, 2026
6042e55
fix: preserve uncertain runtime owners
nathanvale Aug 8, 2026
4dd2680
fix: distinguish loader method declarations
nathanvale Aug 8, 2026
d97f3f3
fix: reject computed ambient destructuring
nathanvale Aug 8, 2026
65a83aa
fix: balance loader method parameters
nathanvale Aug 8, 2026
f758529
fix: reject nested ambient destructuring
nathanvale Aug 8, 2026
8a7867f
fix: close ambient loader aliases
nathanvale Aug 8, 2026
f3e3fd9
fix: distinguish declaration regex contexts
nathanvale Aug 8, 2026
1847b7f
fix: recognize statement block regex contexts
nathanvale Aug 8, 2026
ffd35da
fix: recognize labeled statement blocks
nathanvale Aug 8, 2026
2f0c950
fix(review): close two bundle-admission scanner bypasses
nathanvale Aug 8, 2026
1dda026
fix(review): close runtime builtin escapes
nathanvale Aug 8, 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
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"plugins": [
{
"name": "harness-native-plugin-prototype",
"description": "Prove native plugin distribution with a Bun-authored portable runtime",
"description": "Dependency-closed skills using a verified, plugin-managed Bun runtime",
"author": {
"name": "Prototype"
},
Expand Down
3 changes: 1 addition & 2 deletions .fallowrc.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{
"$schema": "https://docs.fallow.tools/config-schema.json",
"entry": ["scripts/*.ts", "runtime/src/bun-proof-adapter.ts", "runtime/src/quickjs-adapter.ts"],
"ignoreDependencies": ["qjs:std"]
"entry": ["scripts/*.ts", "runtime/src/bun-proof-adapter.ts"]
}
4 changes: 1 addition & 3 deletions .github/release-please-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@
{ "type": "json", "path": "plugin.config.json", "jsonpath": "$.version" },
{ "type": "json", "path": ".claude-plugin/marketplace.json", "jsonpath": "$.metadata.version" },
{ "type": "json", "path": "plugin/.claude-plugin/plugin.json", "jsonpath": "$.version" },
{ "type": "json", "path": "plugin/.codex-plugin/plugin.json", "jsonpath": "$.version" },
{ "type": "generic", "path": "plugin/hooks/codex/hooks.json" },
{ "type": "generic", "path": "plugin/runtime/hello-world.js" }
{ "type": "json", "path": "plugin/.codex-plugin/plugin.json", "jsonpath": "$.version" }
]
}
}
Expand Down
78 changes: 71 additions & 7 deletions .github/workflows/plugin-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,35 @@ concurrency:
cancel-in-progress: true

jobs:
candidate:
name: Build candidate once
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
with:
bun-version: 1.3.14
- name: Package the exact workflow commit
env:
SOURCE_COMMIT: ${{ github.sha }}
run: bun run package
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Comment thread
coderabbitai[bot] marked this conversation as resolved.
with:
name: runtime-candidate-${{ github.sha }}
overwrite: true
path: |
dist/*.tar.gz
dist/*.checksums.json
if-no-files-found: error

compatibility:
name: Compatibility (${{ matrix.target }})
needs: candidate
permissions:
actions: read
contents: read
strategy:
fail-fast: false
matrix:
Expand All @@ -36,11 +63,31 @@ jobs:
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
with:
bun-version: 1.3.14
- run: bun run spike:quickjs:ci
- name: Download the single packaged candidate
env:
GH_TOKEN: ${{ github.token }}
run: gh run download "$GITHUB_RUN_ID" --repo "$GITHUB_REPOSITORY" --name "runtime-candidate-${GITHUB_SHA}" --dir "$RUNNER_TEMP/platform-candidate"
- name: Prove packaged runtime custody on this target
shell: bash
run: |
set -euo pipefail
archive=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.tar.gz' -print -quit)
checksums=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.checksums.json' -print -quit)
[[ -n "$archive" && -n "$checksums" ]]
bun run prove:runtime-platform -- \
--archive "$archive" \
--checksums "$checksums" \
--target "${{ matrix.target }}" \
--fixture-acknowledged

package:
name: Deterministic package
needs: compatibility
needs:
- candidate
- compatibility
permissions:
actions: read
contents: read
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand All @@ -49,20 +96,36 @@ jobs:
bun-version: 1.3.14
- name: Install pinned native marketplace CLIs
run: bun add --global "@anthropic-ai/claude-code@2.1.222" "@openai/codex@0.146.1"
- name: Download the platform-proven candidate
env:
GH_TOKEN: ${{ github.token }}
run: gh run download "$GITHUB_RUN_ID" --repo "$GITHUB_REPOSITORY" --name "runtime-candidate-${GITHUB_SHA}" --dir "$RUNNER_TEMP/platform-candidate"
- run: bun run generate:check
- run: bun test
- run: bun run prove:harness-install -- --require-native
- run: bun run prove:harness-install -- --require-native --fixture-acknowledged
- run: bun run release:validate
- run: bun run prove:distribution
- run: bun run prove:dx
- name: Prove generated runtime was merged with its source
run: git diff --exit-code -- plugin/runtime/hello-world.js
- name: Compare the rebuilt package with the platform-proven candidate
shell: bash
run: |
set -euo pipefail
candidate_archive=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.tar.gz' -print -quit)
candidate_checksums=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.checksums.json' -print -quit)
rebuilt_archive=$(find dist -maxdepth 1 -name '*.tar.gz' -print -quit)
rebuilt_checksums=$(find dist -maxdepth 1 -name '*.checksums.json' -print -quit)
[[ -n "$candidate_archive" && -n "$candidate_checksums" && -n "$rebuilt_archive" && -n "$rebuilt_checksums" ]]
cmp --silent "$candidate_archive" "$rebuilt_archive"
cmp --silent "$candidate_checksums" "$rebuilt_checksums"
- name: Prove generated payload was merged with its sources
run: git diff --exit-code -- plugin/
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: agent-plugin-${{ github.sha }}
overwrite: true
path: |
dist/*.tar.gz
dist/*.checksums.json
${{ runner.temp }}/platform-candidate/*.tar.gz
${{ runner.temp }}/platform-candidate/*.checksums.json
if-no-files-found: error

attest:
Expand All @@ -71,6 +134,7 @@ jobs:
needs: package
runs-on: ubuntu-24.04
permissions:
actions: read
contents: read
id-token: write
attestations: write
Expand Down
83 changes: 76 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -325,10 +325,44 @@ jobs:
manifest-file: .github/.release-please-manifest.json
release-as: ${{ steps.bootstrap-version.outputs.release_as }}

candidate:
name: Build release candidate once
if: needs.resolve.outputs.mode == 'publish' || needs.resolve.outputs.mode == 'repair'
needs: resolve
permissions:
actions: read
contents: read
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ needs.resolve.outputs.candidate_sha }}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
with:
bun-version: 1.3.14
- name: Package the resolved release candidate
env:
SOURCE_COMMIT: ${{ needs.resolve.outputs.candidate_sha }}
run: bun run package
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: release-platform-candidate-${{ github.run_id }}
overwrite: true
path: |
dist/*.tar.gz
dist/*.checksums.json
if-no-files-found: error

compatibility:
name: Release compatibility (${{ matrix.target }})
if: needs.resolve.outputs.mode == 'publish' || needs.resolve.outputs.mode == 'repair'
needs: resolve
needs:
- resolve
- candidate
permissions:
actions: read
contents: read
strategy:
fail-fast: false
matrix:
Expand All @@ -349,14 +383,34 @@ jobs:
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
with:
bun-version: 1.3.14
- run: bun run spike:quickjs:ci
- name: Download the single packaged candidate
env:
GH_TOKEN: ${{ github.token }}
ARTIFACT_NAME: release-platform-candidate-${{ github.run_id }}
run: gh run download "$GITHUB_RUN_ID" --repo "$GITHUB_REPOSITORY" --name "$ARTIFACT_NAME" --dir "$RUNNER_TEMP/platform-candidate"
- name: Prove packaged runtime custody on this target
shell: bash
run: |
set -euo pipefail
archive=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.tar.gz' -print -quit)
checksums=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.checksums.json' -print -quit)
[[ -n "$archive" && -n "$checksums" ]]
bun run prove:runtime-platform -- \
--archive "$archive" \
--checksums "$checksums" \
--target "${{ matrix.target }}" \
--fixture-acknowledged

package:
name: Prove release candidate
if: needs.resolve.outputs.mode == 'publish' || needs.resolve.outputs.mode == 'repair'
needs:
- resolve
- candidate
- compatibility
permissions:
actions: read
contents: read
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand All @@ -367,22 +421,37 @@ jobs:
bun-version: 1.3.14
- name: Install pinned native marketplace CLIs
run: bun add --global "@anthropic-ai/claude-code@2.1.222" "@openai/codex@0.146.1"
- name: Download the platform-proven release candidate
env:
GH_TOKEN: ${{ github.token }}
ARTIFACT_NAME: release-platform-candidate-${{ github.run_id }}
run: gh run download "$GITHUB_RUN_ID" --repo "$GITHUB_REPOSITORY" --name "$ARTIFACT_NAME" --dir "$RUNNER_TEMP/platform-candidate"
- name: Validate and prove release payload
env:
SOURCE_COMMIT: ${{ needs.resolve.outputs.candidate_sha }}
run: |
bun run prove:all
bun run prove:distribution
- name: Compare the rebuilt package with the platform-proven candidate
shell: bash
run: |
set -euo pipefail
candidate_archive=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.tar.gz' -print -quit)
candidate_checksums=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.checksums.json' -print -quit)
rebuilt_archive=$(find dist -maxdepth 1 -name '*.tar.gz' -print -quit)
rebuilt_checksums=$(find dist -maxdepth 1 -name '*.checksums.json' -print -quit)
[[ -n "$candidate_archive" && -n "$candidate_checksums" && -n "$rebuilt_archive" && -n "$rebuilt_checksums" ]]
cmp --silent "$candidate_archive" "$rebuilt_archive"
cmp --silent "$candidate_checksums" "$rebuilt_checksums"
- name: Reject generated release-surface drift
run: git diff --exit-code -- plugin/runtime/hello-world.js plugin/hooks/codex/hooks.json
run: git diff --exit-code -- plugin/
- name: Bind checksum metadata to candidate
env:
CANDIDATE_SHA: ${{ needs.resolve.outputs.candidate_sha }}
RELEASE_TAG: ${{ needs.resolve.outputs.release_tag }}
VERSION: ${{ needs.resolve.outputs.version }}
run: |
set -euo pipefail
checksums=$(find dist -maxdepth 1 -name '*.checksums.json' -print -quit)
checksums=$(find "$RUNNER_TEMP/platform-candidate" -maxdepth 1 -name '*.checksums.json' -print -quit)
[[ -n "$checksums" ]]
checksums_repository=$(jq -er .repository "$checksums")
checksums_repository_identity=$(bun -e 'import { canonicalGitHubRepositoryIdentity } from "./scripts/release-validate.ts"; process.stdout.write(canonicalGitHubRepositoryIdentity(process.argv.at(-1) ?? ""))' "$checksums_repository")
Expand All @@ -402,8 +471,8 @@ jobs:
name: release-candidate-${{ github.run_id }}
overwrite: true
path: |
dist/*.tar.gz
dist/*.checksums.json
${{ runner.temp }}/platform-candidate/*.tar.gz
${{ runner.temp }}/platform-candidate/*.checksums.json
if-no-files-found: error

release:
Expand Down
Loading