Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
276 commits
Select commit Hold shift + click to select a range
34f8b67
docs: define polyglot code intelligence goal
Jul 16, 2026
a8897b8
docs: plan polyglot phase zero
Jul 16, 2026
f75b129
docs: accept production code intelligence engine
Jul 16, 2026
20d4422
feat: define provider-neutral code intelligence graph
Jul 16, 2026
1ce784e
feat: add evidence-bearing language capability matrix
Jul 16, 2026
9541a7b
test: pin polyglot benchmark corpus
Jul 16, 2026
7bab12b
test: add polyglot phase zero baseline runner
Jul 16, 2026
9fa47c0
test: record polyglot phase zero baseline
Jul 16, 2026
8dffe8f
docs: close polyglot phase zero
Jul 16, 2026
4ec4874
docs: record polyglot phase zero checkpoint
Jul 16, 2026
a8d9fb8
docs: plan polyglot phase one
Jul 16, 2026
118179b
feat: define native code intelligence protocol
Jul 16, 2026
fe94d2b
feat: add bounded rust code intelligence engine
Jul 16, 2026
9699320
feat: add native code intelligence provider port
Jul 16, 2026
917bde7
feat: bridge native intelligence to source graph
Jul 16, 2026
2a7e26e
feat: expose native graph preview
Jul 16, 2026
28a5cba
test: prove packed native intelligence preview
Jul 16, 2026
6cae921
docs: close polyglot phase one
Jul 16, 2026
e7f517d
docs: plan polyglot phase two
Jul 16, 2026
8f1d9b7
feat: add polyglot truth evaluation contracts
Jul 16, 2026
87ee2dd
feat: close native javascript typescript gaps
Jul 16, 2026
99dffe8
feat: add python go rust intelligence batch
Jul 16, 2026
8cf78cd
feat: add jvm dotnet intelligence batch
Jul 16, 2026
32060e4
feat: add native mobile intelligence batch
Jul 16, 2026
76e67c6
feat: add php ruby intelligence batch
Jul 16, 2026
ea54631
test: record tier one language evidence
Jul 16, 2026
1d32da6
docs: close polyglot phase two
Jul 16, 2026
bba0b62
docs: plan polyglot phase three
Jul 16, 2026
603878a
feat: define sqlite source index contract
Jul 16, 2026
6fcb1c4
feat: add isolated source index store
Jul 16, 2026
2092632
feat: persist normalized code intelligence generations
Jul 16, 2026
78603bb
feat: add dependency aware incremental indexing
Jul 16, 2026
aa73746
feat: add bounded source index watcher
Jul 16, 2026
9279410
feat: add source index diagnosis and repair
Jul 16, 2026
6ff1644
feat: bridge native source index lifecycle
Jul 16, 2026
919d10e
perf: bound native incremental refresh
Jul 16, 2026
2c9b3a9
docs: close polyglot phase three
Jul 16, 2026
fda196d
feat: make native index search token aware
Jul 16, 2026
7cb5689
feat: expose native relationship evidence
Jul 16, 2026
100e655
fix: keep native relationships language-local
Jul 16, 2026
d857c26
feat: add bounded native intelligence projections
Jul 16, 2026
6cd0c86
feat: expose native projections through repo architecture
Jul 16, 2026
822abac
docs: record phase four intelligence evidence
Jul 16, 2026
f3b020b
build: define native platform packages
Jul 16, 2026
d01aa41
feat: verify packaged native binaries
Jul 16, 2026
b96705a
docs: record local native distribution proof
Jul 16, 2026
3cd57b9
fix: make native package checks cross-platform
Jul 16, 2026
6df6d0f
ci: verify five native package targets
Jul 16, 2026
88e6732
docs: define cross-platform native evidence gate
Jul 16, 2026
d9fb208
fix: verify native index source freshness
Jul 16, 2026
9d2a58f
build: trim checkout reports from npm package
Jul 16, 2026
80efca7
docs: record native freshness gate
Jul 16, 2026
5daa512
fix: keep bounded native refresh atomic
Jul 16, 2026
7ffffd0
feat: add freshness-gated MCP auto engine
Jul 16, 2026
fb7f057
test: prove native package reinstall preservation
Jul 16, 2026
9c7e088
feat: add reversible MCP client config
Jul 16, 2026
459e40a
fix: harden home config writes
Jul 16, 2026
1ce79bd
test: prove bounded cross-service intelligence
Jul 16, 2026
61189de
feat: add bounded repository registry
Jul 16, 2026
4bceaa5
fix: preserve exact Go import coordinates
Jul 16, 2026
e43ad4b
feat: trace Go services across repositories
Jul 16, 2026
e85c516
feat: expose cross-repository Go intelligence
Jul 16, 2026
7a63fe1
test: prove packaged multi-repository workflows
Jul 16, 2026
9b4cad6
test: add licensed GitNexus comparison gate
Jul 16, 2026
9d14d26
test: add bounded million-node index benchmark
Jul 17, 2026
ea5753d
fix: use exact million-node benchmark seed
Jul 17, 2026
ef7e10c
fix: harden million-node benchmark gate
Jul 17, 2026
fd065b7
fix: remove quadratic decorator scan
Jul 17, 2026
d553e00
perf: reduce index conversion memory
Jul 17, 2026
b260aad
perf: deduplicate node resolution lookup
Jul 17, 2026
b4e8c63
fix: prove phase 4 process paths
Jul 17, 2026
ecb7717
fix: normalize relative import targets
Jul 17, 2026
1fd70e2
fix: preserve Node builtin import identity
Jul 17, 2026
fc4000e
fix: resolve CommonJS member bindings
Jul 17, 2026
f7eb9be
feat: expose bounded compatibility deltas
Jul 17, 2026
0220f20
test: refresh phase 1 compatibility evidence
Jul 17, 2026
39b1cd9
fix: preserve hyphenated package imports
Jul 17, 2026
9edb479
fix: preserve scoped package imports
Jul 17, 2026
03d9eee
test: enforce compatibility receipt invariants
Jul 17, 2026
0fa2c29
fix: distinguish incomplete process paths
Jul 17, 2026
79faac2
test: refresh phase 1 compatibility evidence
Jul 17, 2026
3ecea08
fix: resolve lexical sibling calls
Jul 17, 2026
98235bf
fix: index assigned JavaScript methods
Jul 17, 2026
5a25cd2
fix: index chained Express routes
Jul 17, 2026
6558436
test: refresh phase 1 compatibility evidence
Jul 17, 2026
c127af8
fix: enable safe native MCP selection
Jul 17, 2026
2f64864
docs: explain installed MCP auto mode
Jul 17, 2026
9d19f3e
test: prove installed MCP auto selection
Jul 17, 2026
7970b21
fix: expose mobile search action
Jul 17, 2026
1e87783
test: bind phase 4 evidence to current code
Jul 17, 2026
88aeb2f
ci: retain native distribution receipts
Jul 17, 2026
cfead77
test: cover degraded language inputs
Jul 17, 2026
ffa8885
test: refresh integrated intelligence evidence
Jul 17, 2026
68bd5cf
test: bind phase 3 evidence to source index
Jul 17, 2026
bc2960e
test: refresh phase 3 source index evidence
Jul 17, 2026
19686e7
test: retain installed Go cross-repo evidence
Jul 17, 2026
4ecf50c
feat: resolve bounded C build targets
Jul 17, 2026
6acca7c
fix: persist source index scan bound
Jul 17, 2026
4bcac6f
test: refresh native evidence and trim package
Jul 17, 2026
e288e3e
fix: keep bounded dependency evidence complete
Jul 17, 2026
a57819c
test: verify installed MCP tool inventory
Jul 17, 2026
de0dbc5
fix: prioritize semantic calls under graph bounds
Jul 17, 2026
5487aec
test: refresh bounded intelligence evidence
Jul 17, 2026
1a81475
test: isolate packaged native polyglot gate
Jul 17, 2026
d234a0c
fix: fail closed on unavailable source indexes
Jul 17, 2026
c503d1a
fix: prefer packaged native reads
Jul 17, 2026
8831d27
fix: tailor native read recovery guidance
Jul 17, 2026
35bb093
fix: align packaged native read contracts
Jul 17, 2026
809b6cc
test: bind packaged native default evidence
Jul 17, 2026
94613f3
fix: preserve source index coverage diagnostics
Jul 17, 2026
e3ca9e9
test: cover native polyglot recall map
Jul 17, 2026
ecd8130
test: verify installed native workbench
Jul 17, 2026
5e7015a
feat: read native index in web workbench
Jul 17, 2026
f3b98af
test: expose native processes in Recall Map
Jul 17, 2026
6c10ecf
test: verify installed native processes
Jul 17, 2026
0db0b80
feat: show native processes in Map
Jul 17, 2026
4b6ac2b
test: verify installed MCP architecture
Jul 17, 2026
01dbbf3
test: prove native route and impact evidence
Jul 17, 2026
559ea3c
fix: extract CommonJS assignment exports
Jul 17, 2026
9e46e62
test: preserve CommonJS exports in compatibility graph
Jul 17, 2026
b4ef1c6
test: prove JavaScript type evidence
Jul 17, 2026
3bd98f8
test: refresh Phase 4 intelligence evidence
Jul 17, 2026
fcb9524
test: prove JavaScript export evidence
Jul 17, 2026
322f0ac
test: bound Phase 3 repository checkout
Jul 17, 2026
7122e1b
test: refresh Phase 3 index evidence
Jul 17, 2026
cfe3215
test: align release evidence with JavaScript floor
Jul 17, 2026
5d6d2ae
feat: add native hybrid code search
Jul 17, 2026
5155d61
test: bind Phase 3 evidence to hybrid search
Jul 17, 2026
4cc3200
feat: add constrained native context traversal
Jul 17, 2026
4d44665
test: refresh constrained query evidence
Jul 17, 2026
38ef9ae
test: bind constrained traversal release evidence
Jul 17, 2026
9c66ee2
test: prove TypeScript type inference
Jul 17, 2026
e6736fe
test: prove TypeScript import resolution
Jul 17, 2026
25775b4
fix: resolve Python package imports
Jul 17, 2026
210151b
test: refresh native intelligence receipts
Jul 17, 2026
bf78e85
test: prove Python heritage resolution
Jul 17, 2026
2b15f47
test: prove Python type inference
Jul 17, 2026
baf9b94
fix: ignore Python route examples in docstrings
Jul 17, 2026
c763656
test: record clean Python route evidence
Jul 17, 2026
2946ed2
feat: index Python package configuration
Jul 17, 2026
5d7e940
test: refresh Python configuration evidence
Jul 17, 2026
fecfbb6
test: harden Python framework evidence
Jul 17, 2026
cc1d875
fix(ingest): bind Python framework routes
Jul 17, 2026
82fe9e1
test: add real Python route corpus cases
Jul 17, 2026
fe66130
test: prove Python framework routes
Jul 17, 2026
6dec82d
test: refresh framework route evidence
Jul 17, 2026
c9de868
test: record clean source index evidence
Jul 17, 2026
cafcf39
test: record clean compatibility evidence
Jul 17, 2026
97a20b3
test: bind Python route integration fixture
Jul 17, 2026
14eb07b
test: align native ingest quality contracts
Jul 17, 2026
a08e3ae
test: align governed typed-call evidence
Jul 17, 2026
8cdfb7a
test: close Python route slice gates
Jul 17, 2026
dc8fb91
docs: add exact completion matrix
Jul 18, 2026
c267179
ci: enforce native-first stable publication
Jul 18, 2026
f549353
ci: bind native SBOM and npm provenance
Jul 18, 2026
1b7430b
ci: bind exact root release artifact
Jul 18, 2026
7b10c3c
feat: paginate native intelligence projections
Jul 18, 2026
7b4b1d0
feat: bound real repository intelligence gates
Jul 18, 2026
728c78f
docs: record stable semver compatibility audit
Jul 18, 2026
7f4f34a
fix: make Tier 1 capability applicability explicit
Jul 18, 2026
df8dea1
test: refresh native intelligence evidence
Jul 18, 2026
1876721
docs: bind capability evidence slice
Jul 18, 2026
3517843
test: prove Go import capability
Jul 18, 2026
020289b
docs: bind Go capability evidence
Jul 18, 2026
08bc953
fix: preserve full namespace import targets
Jul 18, 2026
8686271
test: refresh import-aware intelligence receipts
Jul 18, 2026
fbe68ed
docs: bind namespace import evidence
Jul 18, 2026
aac93e8
fix: preserve Tier 1 import coordinates
Jul 18, 2026
141e7cd
docs: bind Tier 1 import evidence
Jul 18, 2026
6e5b127
docs: bind import slice commit
Jul 18, 2026
d2e289c
feat: model Go and Rust exports
Jul 18, 2026
691a424
test: keep GitNexus export gaps explicit
Jul 18, 2026
a64f61f
docs: bind Go and Rust export evidence
Jul 18, 2026
5ef530a
fix: gate root publish on native registry proof
Jul 18, 2026
276f182
docs: bind root publish guard evidence
Jul 18, 2026
d3e0502
feat: resolve Dart package exports
Jul 18, 2026
9bc7c96
test: refresh Rust intelligence receipts
Jul 18, 2026
cedd26e
docs: bind Dart export evidence
Jul 18, 2026
2273cdc
test: prove Dart call resolution
Jul 18, 2026
b06e797
docs: bind Dart call evidence
Jul 18, 2026
dae56c2
test: prove Kotlin call ownership
Jul 18, 2026
fe1f0a7
docs: bind Kotlin call evidence
Jul 18, 2026
b2efef4
fix: reject C++ macro constructions
Jul 18, 2026
91c03e4
test: refresh C++ index receipt
Jul 18, 2026
3e8b8c9
test: refresh C++ intelligence receipt
Jul 18, 2026
59c8989
docs: bind C++ type evidence
Jul 18, 2026
369fad0
test: prove Kotlin type construction
Jul 18, 2026
3219565
docs: bind Kotlin type evidence
Jul 18, 2026
62d7c3a
test: prove Dart heritage
Jul 18, 2026
c19de84
test: refresh Dart index receipt
Jul 18, 2026
a8cbbaf
test: refresh Dart intelligence receipt
Jul 18, 2026
a020e91
docs: bind Dart heritage evidence
Jul 18, 2026
d83121c
test: prove C++ heritage
Jul 18, 2026
6814e67
test: refresh C++ index receipt
Jul 18, 2026
cbb68b8
test: refresh C++ intelligence receipt
Jul 18, 2026
f450960
docs: bind C++ heritage evidence
Jul 18, 2026
bc044fc
test: bind Go and PHP type evidence
Jul 18, 2026
fe7e574
fix: report bounded query results honestly
Jul 18, 2026
42951e6
fix: close bounded query contract gaps
Jul 18, 2026
bec0d4d
fix: bound million-node reader metadata
Jul 18, 2026
64972fc
test: record million-node reader proof
Jul 18, 2026
c870d4f
fix: make packaged rust the production default
Jul 18, 2026
775a6f1
test: prove all packaged MCP tools use rust
Jul 18, 2026
7a87501
fix: make native intelligence the only source graph path
Jul 19, 2026
046a487
test: refresh native intelligence evidence receipts
Jul 19, 2026
431c199
fix: preserve memory reads without native package
Jul 19, 2026
33aad97
fix: report stale repository indexes explicitly
Jul 19, 2026
64770ce
docs: correct completion matrix evidence
Jul 19, 2026
fd153b2
fix: make map recovery truthful
Jul 19, 2026
5b9c158
chore: prepare 2.0.0 release line
Jul 19, 2026
2d97bc8
docs: clarify 2.0.0 semver decision
Jul 19, 2026
efe71b7
fix: fail closed on stale repository indexes
Jul 19, 2026
2425abc
fix: make source index truncation explicit
Jul 19, 2026
654ff04
test: refresh source index evidence
Jul 19, 2026
8c2f9a8
test: refresh phase evidence receipts
Jul 19, 2026
d281b99
test: refresh packaged repository evidence
Jul 19, 2026
0993a59
test: cover large map browser disclosure
Jul 19, 2026
826365f
test: prove packed web stale-index recovery
Jul 19, 2026
010e41e
docs: refresh release proof ledger
Jul 19, 2026
35f3011
test: prove packed web missing-index recovery
Jul 19, 2026
625a4cb
docs: record packaged map recovery evidence
Jul 19, 2026
4bdb92b
test: cover map reload and keyboard selection
Jul 19, 2026
6402943
docs: record map interaction coverage
Jul 19, 2026
4f9ac2d
test: audit published web routes
Jul 19, 2026
f96fc5f
docs: record route audit evidence
Jul 19, 2026
c1e819c
test: exercise responsive primary navigation
Jul 19, 2026
7e4a850
docs: record responsive navigation proof
Jul 19, 2026
a403faa
fix: merge duplicate orientation path groups
Jul 19, 2026
22a2b91
docs: record orientation group fix
Jul 19, 2026
72c7e30
test: verify workbench controls are keyboard reachable
Jul 19, 2026
9ccd6ae
docs: record keyboard control coverage
Jul 19, 2026
eebff8c
ci: verify published packages on every native target
Jul 19, 2026
1effd2c
docs: record registry consumer gate
Jul 19, 2026
c02e986
fix: prove large repository map behavior
Jul 19, 2026
5b910a4
docs: record large repository map proof
Jul 19, 2026
12bb5bd
docs: complete workbench anti-slop review
Jul 19, 2026
82b10e0
test: harden browser release audit
Jul 19, 2026
c23e22e
docs: record frozen local release gates
Jul 19, 2026
a5885a2
ci: build native binary before Node suite
Jul 19, 2026
8174302
fix: harden native release platform boundaries
Jul 19, 2026
1873f5c
docs: refresh frozen release evidence
Jul 19, 2026
4afca35
test: make native intelligence parity hermetic
Jul 19, 2026
18e47de
ci: split Rust release quality gates
Jul 19, 2026
0033e71
fix: resolve Rust self method calls
Jul 19, 2026
c8f4ba5
test: refresh intelligence evidence receipts
Jul 19, 2026
ac5c023
fix: degrade memory search without FTS5
Jul 19, 2026
dd09223
test: bind intelligence evidence to FTS fallback
Jul 19, 2026
e4f8c76
ci: stage Rust before release validation
Jul 19, 2026
84ae722
fix: filter memory recall without FTS5
Jul 19, 2026
124d6a2
fix: stage native package in consumer smoke
Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-node@v6
with:
node-version: 22
cache: npm
- run: npm ci --ignore-scripts --no-audit --no-fund
- run: cargo build --locked --release --manifest-path rust/Cargo.toml --package oaf
- run: npm run bootstrap
- run: npm run doctor
- run: npm run ci
Expand Down
259 changes: 247 additions & 12 deletions .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,34 @@ on:
options:
- trusted-publishing
- npm-token
native_run_id:
description: Successful Rust workflow run containing the exact attested native release set
required: true
type: string
permissions:
actions: read
artifact-metadata: write
attestations: write
contents: read
id-token: write
jobs:
publish:
validate:
runs-on: ubuntu-latest
timeout-minutes: 25
environment: npm-release
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version: 22.14.0
registry-url: https://registry.npmjs.org
package-manager-cache: false
- run: npm install -g npm@latest
- uses: dtolnay/rust-toolchain@stable
- run: npm install -g [email protected]
- name: Validate manual confirmation
env:
INPUT_VERSION: ${{ inputs.version }}
INPUT_CONFIRM: ${{ inputs.confirm }}
INPUT_NATIVE_RUN_ID: ${{ inputs.native_run_id }}
run: |
ACTUAL_VERSION="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).version")"
EXPECTED_CONFIRM="publish memory-recall@${ACTUAL_VERSION}"
Expand All @@ -49,17 +57,244 @@ jobs:
echo "Confirmation must exactly match: $EXPECTED_CONFIRM" >&2
exit 1
fi
if ! printf '%s' "$INPUT_NATIVE_RUN_ID" | grep -Eq '^[1-9][0-9]*$'; then
echo "native_run_id must be a positive GitHub Actions run ID" >&2
exit 1
fi
- run: npm ci --ignore-scripts --no-audit --no-fund
- run: cargo build --locked --release --manifest-path rust/Cargo.toml --package oaf
- run: npm run bootstrap
- run: npm run ci
- run: npm run native:smoke
- run: npm run consumer:smoke
- run: npm run release:readiness:check
- run: npm publish --access public --dry-run
- name: Publish with npm Trusted Publishing
if: ${{ inputs.auth_mode == 'trusted-publishing' }}
run: npm publish --access public
- name: Publish with NPM_TOKEN fallback
if: ${{ inputs.auth_mode == 'npm-token' }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish --access public --provenance
- name: Verify source identity before packing
env:
RELEASE_COMMIT: ${{ github.sha }}
shell: bash
run: |
test "$(git rev-parse HEAD)" = "$RELEASE_COMMIT"
test -z "$(git status --porcelain --untracked-files=all)"
- name: Pack exact root release artifact once
env:
RELEASE_COMMIT: ${{ github.sha }}
shell: bash
run: |
SOURCE_CREATED="$(git show -s --format=%cI "$RELEASE_COMMIT")"
CREATED="$(node -e "process.stdout.write(new Date(process.argv[1]).toISOString().replace('.000Z', 'Z'))" "$SOURCE_CREATED")"
node scripts/native-release-set.mjs package-root --out output/root-release --commit "$RELEASE_COMMIT" --created "$CREATED"
- name: Validate exact root release artifact
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
run: node scripts/native-release-set.mjs validate-root --artifacts output/root-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" > output/root-release.validation.json
- name: Dry-run exact root tarball
shell: bash
run: |
ROOT_TARBALL="output/root-release/$(node -p "JSON.parse(require('fs').readFileSync('output/root-release/memory-recall-root-release.json', 'utf8')).package.tarball")"
npm publish "$ROOT_TARBALL" --access public --dry-run
- name: Attest root package provenance
uses: actions/attest@v4
with:
subject-path: output/root-release/*.tgz
- name: Attest root package SBOM
uses: actions/attest@v4
with:
subject-path: output/root-release/*.tgz
sbom-path: output/root-release/memory-recall-root.spdx.json
- name: Upload exact root release artifact
uses: actions/upload-artifact@v6
with:
name: memory-recall-root-release-${{ github.sha }}
path: output/root-release/*
if-no-files-found: error
retention-days: 14

publish:
needs: validate
runs-on: ubuntu-latest
timeout-minutes: 25
environment: npm-release
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version: 22.14.0
registry-url: https://registry.npmjs.org
package-manager-cache: false
- run: npm install -g [email protected]
- name: Download exact root release artifact
uses: actions/download-artifact@v8
with:
name: memory-recall-root-release-${{ github.sha }}
path: output/root-release
- name: Validate exact root release artifact
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
run: node scripts/native-release-set.mjs validate-root --artifacts output/root-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" > output/root-release.validation.json
- name: Verify root provenance signature
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
gh attestation verify output/root-release/*.tgz \
--repo "$GITHUB_REPOSITORY" \
--signer-workflow "$GITHUB_REPOSITORY/.github/workflows/npm-publish.yml" \
--signer-digest "$GITHUB_SHA" \
--source-digest "$GITHUB_SHA" \
--deny-self-hosted-runners
- name: Verify root SBOM signature
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
gh attestation verify output/root-release/*.tgz \
--repo "$GITHUB_REPOSITORY" \
--signer-workflow "$GITHUB_REPOSITORY/.github/workflows/npm-publish.yml" \
--signer-digest "$GITHUB_SHA" \
--source-digest "$GITHUB_SHA" \
--predicate-type https://spdx.dev/Document/v2.3 \
--deny-self-hosted-runners
- name: Verify exact successful Rust workflow run
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
INPUT_NATIVE_RUN_ID: ${{ inputs.native_run_id }}
shell: bash
run: |
RUN_JSON="$(gh api "repos/$GITHUB_REPOSITORY/actions/runs/$INPUT_NATIVE_RUN_ID")"
RUN_JSON="$RUN_JSON" node --input-type=module <<'NODE'
const run = JSON.parse(process.env.RUN_JSON);
const expected = {
repository: process.env.GITHUB_REPOSITORY,
commit: process.env.GITHUB_SHA,
workflow: '.github/workflows/rust.yml'
};
if (run.head_repository?.full_name !== expected.repository) throw new Error('native run repository mismatch');
if (run.path !== expected.workflow) throw new Error('native run workflow mismatch');
if (run.status !== 'completed' || run.conclusion !== 'success') throw new Error('native run must be completed successfully');
if (run.head_sha !== expected.commit) throw new Error('native run commit mismatch');
if (!['push', 'workflow_dispatch'].includes(run.event)) throw new Error('native run event is not release eligible');
NODE
- name: Download exact native release artifacts
uses: actions/download-artifact@v8
with:
run-id: ${{ inputs.native_run_id }}
github-token: ${{ secrets.GITHUB_TOKEN }}
name: memory-recall-native-release-set-${{ github.sha }}
path: output/native-release
- name: Validate complete signed native release set
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
run: node scripts/native-release-set.mjs validate --artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" > output/native-release.validation.json
- name: Verify native provenance signatures
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
while IFS= read -r -d '' artifact; do
gh attestation verify "$artifact" \
--repo "$GITHUB_REPOSITORY" \
--signer-workflow "$GITHUB_REPOSITORY/.github/workflows/rust.yml" \
--signer-digest "$GITHUB_SHA" \
--source-digest "$GITHUB_SHA" \
--deny-self-hosted-runners
done < <(find output/native-release -type f \( -name '*.tgz' -o -name 'native-package-*-receipt.json' \) -print0)
- name: Verify native SBOM signatures
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
while IFS= read -r -d '' artifact; do
gh attestation verify "$artifact" \
--repo "$GITHUB_REPOSITORY" \
--signer-workflow "$GITHUB_REPOSITORY/.github/workflows/rust.yml" \
--signer-digest "$GITHUB_SHA" \
--source-digest "$GITHUB_SHA" \
--predicate-type https://spdx.dev/Document/v2.3 \
--deny-self-hosted-runners
done < <(find output/native-release -type f -name '*.tgz' -print0)
- name: Prove exact root install, uninstall, and clean reinstall
shell: bash
run: |
export MEMORY_RECALL_ROOT_PACKAGE_TARBALL="$(node -p "require('path').resolve('output/root-release', JSON.parse(require('fs').readFileSync('output/root-release.validation.json', 'utf8')).artifact.tarball)")"
export MEMORY_RECALL_NATIVE_PACKAGE_TARBALL="$(node -p "require('path').resolve('output/native-release', JSON.parse(require('fs').readFileSync('output/native-release.validation.json', 'utf8')).artifacts.find(({ target }) => target === 'linux-x64-gnu').tarball)")"
test -f "$MEMORY_RECALL_ROOT_PACKAGE_TARBALL"
test -f "$MEMORY_RECALL_NATIVE_PACKAGE_TARBALL"
node scripts/native-code-intelligence-consumer-smoke.mjs
- name: Publish native packages
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
AUTH_MODE: ${{ inputs.auth_mode }}
NODE_AUTH_TOKEN: ${{ inputs.auth_mode == 'npm-token' && secrets.NPM_TOKEN || '' }}
run: node scripts/native-release-set.mjs publish-native --artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" --auth-mode "$AUTH_MODE"
- name: Verify native packages on npm
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
run: node scripts/native-release-set.mjs verify-registry --artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT"
- name: Dry-run root package after native registry verification
shell: bash
run: |
ROOT_TARBALL="output/root-release/$(node -p "JSON.parse(require('fs').readFileSync('output/root-release/memory-recall-root-release.json', 'utf8')).package.tarball")"
npm publish "$ROOT_TARBALL" --access public --dry-run
- name: Publish exact root package
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
AUTH_MODE: ${{ inputs.auth_mode }}
NODE_AUTH_TOKEN: ${{ inputs.auth_mode == 'npm-token' && secrets.NPM_TOKEN || '' }}
run: node scripts/native-release-set.mjs publish-root --artifacts output/root-release --native-artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" --auth-mode "$AUTH_MODE"
- name: Verify root package on npm
env:
RELEASE_VERSION: ${{ inputs.version }}
RELEASE_COMMIT: ${{ github.sha }}
run: node scripts/native-release-set.mjs verify-root-registry --artifacts output/root-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT"

registry-consumer:
name: Published package consumer (${{ matrix.target }})
needs: publish
runs-on: ${{ matrix.runner }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- target: darwin-arm64
runner: macos-15
- target: darwin-x64
runner: macos-15-intel
- target: linux-arm64-gnu
runner: ubuntu-22.04-arm
- target: linux-x64-gnu
runner: ubuntu-22.04
- target: win32-x64
runner: windows-2025
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version: 22.14.0
registry-url: https://registry.npmjs.org
package-manager-cache: false
- run: npm install -g [email protected]
- run: npm ci --ignore-scripts --no-audit --no-fund
- name: Fetch the published root and matching native package
env:
RELEASE_VERSION: ${{ inputs.version }}
NATIVE_TARGET: ${{ matrix.target }}
shell: bash
run: |
mkdir -p output/registry-consumer
npm pack "memory-recall@${RELEASE_VERSION}" --pack-destination output/registry-consumer --json > output/registry-consumer/root.json
npm pack "@memory-recall/native-${NATIVE_TARGET}@${RELEASE_VERSION}" --pack-destination output/registry-consumer --json > output/registry-consumer/native.json
ROOT_TARBALL="$(node -e "const [pack]=JSON.parse(require('fs').readFileSync('output/registry-consumer/root.json', 'utf8')); process.stdout.write(require('path').resolve('output/registry-consumer', pack.filename));")"
NATIVE_TARBALL="$(node -e "const [pack]=JSON.parse(require('fs').readFileSync('output/registry-consumer/native.json', 'utf8')); process.stdout.write(require('path').resolve('output/registry-consumer', pack.filename));")"
test -f "$ROOT_TARBALL"
test -f "$NATIVE_TARBALL"
printf 'MEMORY_RECALL_ROOT_PACKAGE_TARBALL=%s\n' "$ROOT_TARBALL" >> "$GITHUB_ENV"
printf 'MEMORY_RECALL_NATIVE_PACKAGE_TARBALL=%s\n' "$NATIVE_TARBALL" >> "$GITHUB_ENV"
- name: Prove clean global install, MCP, uninstall, and reinstall
run: node scripts/native-code-intelligence-consumer-smoke.mjs
Loading
Loading