Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
be764c7
derive search-plan terms from the asked question alone
TheGreenCedar Jul 28, 2026
23ece3d
derive the generalization lint's banned corpus tokens
TheGreenCedar Jul 28, 2026
c8ef9d5
name the typed-anchor subquery terms for what they now are
TheGreenCedar Jul 28, 2026
5bef809
add directed call degrees to the grounding store read model
TheGreenCedar Jul 28, 2026
34d9c73
rank grounding roots by role band, directed graph evidence, and struc…
TheGreenCedar Jul 28, 2026
b07a71e
rank search roots by repository evidence and delete the coverage catalog
TheGreenCedar Jul 28, 2026
41679b9
scan the runtime ranking surfaces with the generalization lint
TheGreenCedar Jul 28, 2026
0935155
report the two new orientation uncertainty variants on the cli surface
TheGreenCedar Jul 28, 2026
77f6ce7
seek the candidate chunk when reading directed call degrees
TheGreenCedar Jul 28, 2026
28747e9
build search orientation evidence where every candidate can reach it
TheGreenCedar Jul 28, 2026
40d81c3
declare the two new orientation variants on every surface that carrie…
TheGreenCedar Jul 28, 2026
93fc2bf
scan every runtime source file for holdout names
TheGreenCedar Jul 28, 2026
1e6e21e
keep diversity, breadth, and alias evidence honest across both surfaces
TheGreenCedar Jul 28, 2026
d1d67a2
report the first lint guard failure instead of a poison cascade
TheGreenCedar Jul 28, 2026
5ef74a5
delete the domain noun tables the planner still consulted
TheGreenCedar Jul 28, 2026
f5d2f21
derive the generalization lint's exclusions from the product's own code
TheGreenCedar Jul 28, 2026
e52b99e
put architecture coverage scoring under the corpus scan
TheGreenCedar Jul 28, 2026
1d2738d
stop steering dense anchors by benchmark filenames
TheGreenCedar Jul 28, 2026
6c8db90
Merge pull request #1551 from TheGreenCedar/codex/dense-anchor-benchm…
TheGreenCedar Jul 28, 2026
6d4dcc2
refuse a symlinked download partial and key retention on cli identity
TheGreenCedar Jul 28, 2026
49a1ab2
bound the proof tooling waits to their declared timeouts
TheGreenCedar Jul 28, 2026
d38933b
read marketplace dispatch inputs from env and repair the publish need…
TheGreenCedar Jul 28, 2026
e333ca9
match readiness freshness to the staleness sidecar admission enforces
TheGreenCedar Jul 28, 2026
e6575a0
publish the marketplace catalog on the plugin fast lane
TheGreenCedar Jul 28, 2026
d3cb603
accept binding-verified reuse rows in the pre-publish closeout
TheGreenCedar Jul 28, 2026
733da3c
repair the pinned-provision gate's fail-open entry point and its tran…
TheGreenCedar Jul 28, 2026
3788de8
match the whole dispatched value and pin what the guard does, not wha…
TheGreenCedar Jul 28, 2026
528c7fe
refuse every unsanctioned secret read and every empty plugin chain
TheGreenCedar Jul 28, 2026
611b530
bind a reused row to the one commit the closeout proved
TheGreenCedar Jul 28, 2026
a112210
close the three ways around the no-follow partial open
TheGreenCedar Jul 28, 2026
41dc2cb
close the second admission gate readiness can see and stop sweeping a…
TheGreenCedar Jul 28, 2026
85e4be0
give the pull-request suite the history its binding proof needs
TheGreenCedar Jul 28, 2026
66bf1fd
sharpen the neutering probe to one only the whole-script pin can see
TheGreenCedar Jul 28, 2026
c4ac9c9
Merge pull request #1564 from TheGreenCedar/codex/closeout-accepts-re…
TheGreenCedar Jul 28, 2026
55d82df
Merge pull request #1563 from TheGreenCedar/codex/plugin-lane-marketp…
TheGreenCedar Jul 28, 2026
c6e5d39
Merge pull request #1559 from TheGreenCedar/codex/plugin-partial-syml…
TheGreenCedar Jul 28, 2026
a742016
Merge pull request #1560 from TheGreenCedar/codex/bound-proof-tooling…
TheGreenCedar Jul 28, 2026
aabf04b
Merge pull request #1562 from TheGreenCedar/codex/readiness-matches-a…
TheGreenCedar Jul 28, 2026
1006d8b
Merge remote-tracking branch 'origin/dev/codestory-next' into HEAD
TheGreenCedar Jul 28, 2026
96174f7
stop treating catalog publication as a release gate
TheGreenCedar Jul 28, 2026
741aee0
pin the guard's shell and make the interpolation ban cover the file
TheGreenCedar Jul 28, 2026
d1179cc
keep the dispatch guard binding, not advisory
TheGreenCedar Jul 28, 2026
dcd1f31
Merge pull request #1561 from TheGreenCedar/codex/workflow-input-and-…
TheGreenCedar Jul 28, 2026
5350afd
Merge branch 'codex/wp9b-ranking-rebuild-r2' into codex/wp9b-ranking-…
TheGreenCedar Jul 28, 2026
69d05b7
stage a servable store when a fixture calls itself healthy
TheGreenCedar Jul 28, 2026
32a5978
make the deferred catalog path actually complete
TheGreenCedar Jul 28, 2026
3df9759
recover a release from a lost self-hosted runner
TheGreenCedar Jul 28, 2026
7259dc2
exclude test module bodies by their declaration, not their file name
TheGreenCedar Jul 28, 2026
4e5ee7e
refuse a producer and verifier that disagree on the delivery-state names
TheGreenCedar Jul 28, 2026
f1aabe6
derive the generalization lint's banned corpus from benchmark tasks
TheGreenCedar Jul 28, 2026
102ca3f
hold the token-closure invariant for every subquery role
TheGreenCedar Jul 28, 2026
e0d58aa
run the generalization self-subject contracts in CI
TheGreenCedar Jul 28, 2026
7df8467
Merge pull request #1576 from TheGreenCedar/codex/readiness-fresh-sto…
TheGreenCedar Jul 28, 2026
00d52d5
pin the generalization lint's coverage floor and bound its pending in…
TheGreenCedar Jul 28, 2026
aaf0f26
close each flow requirement with its own cited evidence
TheGreenCedar Jul 28, 2026
6c92b28
Merge remote-tracking branch 'origin/dev/codestory-next' into codex/w…
TheGreenCedar Jul 28, 2026
7649107
pin the requirement inventory, same-role distinctness, and the holdou…
TheGreenCedar Jul 28, 2026
7ca5678
merge dev/codestory-next
TheGreenCedar Jul 28, 2026
5e09d52
record the packet sufficiency changes
TheGreenCedar Jul 28, 2026
5434e04
share one dead-client executable capture across worker threads
TheGreenCedar Jul 28, 2026
d2483d9
pin that a command-server prompt is not a shell-install prompt
TheGreenCedar Jul 28, 2026
29f5f45
record the origin refusal instead of raising it inside the try
TheGreenCedar Jul 28, 2026
d7f6887
re-pin the evidence fixture to the changed claim graph
TheGreenCedar Jul 28, 2026
4fc19d9
Merge pull request #1570 from TheGreenCedar/codex/catalog-publication…
TheGreenCedar Jul 28, 2026
8793c59
keep the evidence carriers free of benchmark-corpus identifiers
TheGreenCedar Jul 28, 2026
0439ac1
Merge pull request #1578 from TheGreenCedar/codex/dead-client-shared-…
TheGreenCedar Jul 28, 2026
3bf386a
Merge dev/codestory-next into codex/tolerate-lost-runner
TheGreenCedar Jul 28, 2026
d7f8c7f
Merge remote-tracking branch 'origin/dev/codestory-next' into HEAD
TheGreenCedar Jul 28, 2026
f5c2ec5
Merge pull request #1571 from TheGreenCedar/codex/tolerate-lost-runner
TheGreenCedar Jul 28, 2026
730e5a5
ban a corpus name that a separator is glued to
TheGreenCedar Jul 28, 2026
d27f2ce
merge dev/codestory-next
TheGreenCedar Jul 28, 2026
e47a473
route every dispatch input through step env, and refuse the shape gen…
TheGreenCedar Jul 28, 2026
fa96274
scope evidence carriers to the subsystem they speak for
TheGreenCedar Jul 28, 2026
4d6227d
keep the lane rustfmt-clean
TheGreenCedar Jul 28, 2026
f603517
refuse the channels a dispatch input can hide in, and bound the span …
TheGreenCedar Jul 28, 2026
aea8013
ban a corpus name wherever an identifier makes it a word
TheGreenCedar Jul 28, 2026
b21bdfc
refuse the event payload as a laundering channel
TheGreenCedar Jul 28, 2026
eeacb26
Merge pull request #1583 from TheGreenCedar/codex/generic-dispatch-in…
TheGreenCedar Jul 28, 2026
f9decb8
stop a directory from deciding which step a citation proves
TheGreenCedar Jul 28, 2026
1d10601
reflow the store import list rustfmt wanted
TheGreenCedar Jul 28, 2026
4d3c753
pin the digit-then-lowercase word break too
TheGreenCedar Jul 28, 2026
4a2eed3
take the self-subject exemption from the url, not the label
TheGreenCedar Jul 28, 2026
1449d84
Merge pull request #1579 from TheGreenCedar/codex/wp9b-ranking-from-r…
TheGreenCedar Jul 28, 2026
eea8583
Merge remote-tracking branch 'origin/dev/codestory-next' into wp9c-r4
TheGreenCedar Jul 28, 2026
47591de
authenticate the spawned producer against its own arguments
TheGreenCedar Jul 28, 2026
fb465f2
Merge pull request #1585 from TheGreenCedar/codex/release-lane-test-env
TheGreenCedar Jul 28, 2026
3ceee88
cut 0.16.3 and record 0.16.2 as withdrawn
TheGreenCedar Jul 28, 2026
b080827
enable the calibration freeze lineage guard
TheGreenCedar Jul 28, 2026
6659f4e
let each reuse binding declare what it equates
TheGreenCedar Jul 28, 2026
c93a7db
Merge pull request #1589 from TheGreenCedar/codex/binding-declares-wh…
TheGreenCedar Jul 28, 2026
e4eea60
merge dev/codestory-next
TheGreenCedar Jul 29, 2026
6d82c37
Merge remote-tracking branch 'origin/dev/codestory-next' into worktre…
TheGreenCedar Jul 29, 2026
71ace8a
run the calibration freeze lineage guard where a caller reaches it
TheGreenCedar Jul 29, 2026
77e97cf
Merge remote-tracking branch 'origin/dev/codestory-next' into HEAD
TheGreenCedar Jul 29, 2026
e287bfd
stop a file name or a single word from deciding which step a citation…
TheGreenCedar Jul 29, 2026
77bd643
Merge pull request #1587 from TheGreenCedar/codex/bump-0-16-3
TheGreenCedar Jul 29, 2026
7fe264d
Merge pull request #1588 from TheGreenCedar/codex/enable-calibration-…
TheGreenCedar Jul 29, 2026
2292cff
Merge pull request #1582 from TheGreenCedar/codex/wp9a-generalization…
TheGreenCedar Jul 29, 2026
cc3fcc9
Merge remote-tracking branch 'origin/dev/codestory-next' into worktre…
TheGreenCedar Jul 29, 2026
f5dafa6
stop a folder and two generic nouns from proving a flow
TheGreenCedar Jul 29, 2026
e717787
serialize retrieval lint fixtures across processes
TheGreenCedar Jul 29, 2026
ef02805
recover killed retrieval lint fixtures
TheGreenCedar Jul 29, 2026
b4a0c71
Merge pull request #1592 from TheGreenCedar/codex/retrieval-generaliz…
TheGreenCedar Jul 29, 2026
b80935e
[codex] handle indexer resolution cancellation cooperatively (#1594)
TheGreenCedar Jul 29, 2026
698e778
enforce release-head calibration lineage
TheGreenCedar Jul 29, 2026
58222b2
measure true idle from worker completion
TheGreenCedar Jul 29, 2026
fe9532a
bind every release head to its calibration source (#1596)
TheGreenCedar Jul 29, 2026
8f5f799
merge release-lineage guard
TheGreenCedar Jul 29, 2026
e6d102b
keep draft calibration off full-project reactivation
TheGreenCedar Jul 29, 2026
10344e9
keep draft calibration off full-project reactivation (#1600)
TheGreenCedar Jul 29, 2026
a73c25c
merge the calibration harness repair
TheGreenCedar Jul 29, 2026
7839b06
replace serialized generalization guard
TheGreenCedar Jul 29, 2026
48831fb
preserve generalization guard coverage
TheGreenCedar Jul 29, 2026
08aeeab
disambiguate generalization findings
TheGreenCedar Jul 29, 2026
2b97dd8
Merge pull request #1602 from TheGreenCedar/codex/1601-fast-generaliz…
TheGreenCedar Jul 29, 2026
3c2e1b7
Merge remote-tracking branch 'origin/dev/codestory-next' into codex/1…
TheGreenCedar Jul 29, 2026
e5d0295
use a fresh calibration live query
TheGreenCedar Jul 29, 2026
891d2a4
make calibration gpu-only and constant-only
TheGreenCedar Jul 29, 2026
67dd2f5
fix all-feature lint
TheGreenCedar Jul 29, 2026
0944b74
fix benchmark lint
TheGreenCedar Jul 29, 2026
07451c4
Merge pull request #1604 from TheGreenCedar/codex/1603-gpu-constant-c…
TheGreenCedar Jul 29, 2026
ab2d267
merge gpu-only calibration repair
TheGreenCedar Jul 29, 2026
5cd73eb
accept native gpu backend families
TheGreenCedar Jul 29, 2026
7c24527
freeze embedding server constants
TheGreenCedar Jul 29, 2026
7291b52
bind package cache finalization to its owner
TheGreenCedar Jul 29, 2026
fc065a1
Merge pull request #1606 from TheGreenCedar/codex/1605-package-cache-…
TheGreenCedar Jul 29, 2026
7933576
Merge remote-tracking branch 'origin/dev/codestory-next' into codex/1…
TheGreenCedar Jul 29, 2026
4f425de
unfreeze embedding constants for repaired candidate
TheGreenCedar Jul 29, 2026
f511689
freeze embedding server constants
TheGreenCedar Jul 29, 2026
733eeb8
resolve windows sccache executable identity
TheGreenCedar Jul 29, 2026
4f8befe
Merge pull request #1608 from TheGreenCedar/codex/1607-windows-sccach…
TheGreenCedar Jul 29, 2026
553786c
Merge remote-tracking branch 'origin/dev/codestory-next' into codex/1…
TheGreenCedar Jul 29, 2026
08451fa
unfreeze constants after workflow repair
TheGreenCedar Jul 29, 2026
e38fbe5
freeze constants from repaired calibration
TheGreenCedar Jul 29, 2026
c8714b6
reuse packaged qualification drivers
TheGreenCedar Jul 30, 2026
f2b2457
Merge pull request #1610 from TheGreenCedar/codex/1609-packaged-quali…
TheGreenCedar Jul 30, 2026
ef9ee2c
Merge commit 'f2b2457661d36cd24d19f3d74657ea7c3f486fd7' into codex/15…
TheGreenCedar Jul 30, 2026
34154f2
unfreeze embedding constants
TheGreenCedar Jul 30, 2026
c2318eb
freeze embedding server constants
TheGreenCedar Jul 30, 2026
f1fb7af
stage cargo-linked qualification drivers
TheGreenCedar Jul 30, 2026
1506118
freeze calibrated embedding constants
TheGreenCedar Jul 30, 2026
d0f5834
reuse exact windows release artifacts (#1613)
TheGreenCedar Jul 30, 2026
41e60ba
guard the fast retrieval fixture architecture (#1614)
TheGreenCedar Jul 30, 2026
9d06644
make frozen candidate quality optional
TheGreenCedar Jul 30, 2026
a1bc3d2
Merge pull request #1615 from TheGreenCedar/codex/1395-axios-v2-quali…
TheGreenCedar Jul 30, 2026
29ddaeb
Merge remote-tracking branch 'origin/dev/codestory-next' into codex/1…
TheGreenCedar Jul 30, 2026
74dd8b0
bind true idle to product completion
TheGreenCedar Jul 30, 2026
76dfa93
freeze calibrated embedding constants
TheGreenCedar Jul 30, 2026
9de9409
accept cargo target test capability
TheGreenCedar Jul 30, 2026
b0e9250
Accept Cargo test-capable Windows release binaries (#1617)
TheGreenCedar Jul 30, 2026
d318b48
merge windows artifact selector repair
TheGreenCedar Jul 30, 2026
04605eb
freeze calibrated embedding constants
TheGreenCedar Jul 30, 2026
f265f76
enforce atomic candidate archive admission
TheGreenCedar Jul 30, 2026
ef17d6e
accept cargo-owned windows hardlinks
TheGreenCedar Jul 30, 2026
5e7b14c
Merge pull request #1620 from TheGreenCedar/codex/1618-windows-cargo-…
TheGreenCedar Jul 30, 2026
196fd36
Merge remote-tracking branch 'origin/dev/codestory-next' into codex/1…
TheGreenCedar Jul 30, 2026
c6c1379
enforce release freeze barrier
TheGreenCedar Jul 30, 2026
c5c0c2f
authenticate the release freeze
TheGreenCedar Jul 30, 2026
ca16670
move freeze authority into actions
TheGreenCedar Jul 30, 2026
ab962dd
bind freeze to live dev head
TheGreenCedar Jul 30, 2026
e980b82
freeze embedding server constants
TheGreenCedar Jul 30, 2026
9b2a26d
paginate active proof cancellation
TheGreenCedar Jul 30, 2026
40fb321
isolate windows package features
TheGreenCedar Jul 30, 2026
4cf5ab9
Merge pull request #1623 from TheGreenCedar/codex/1611-package-featur…
TheGreenCedar Jul 30, 2026
69a82a6
merge windows package repair
TheGreenCedar Jul 30, 2026
6c28714
restore unfrozen calibration input
TheGreenCedar Jul 30, 2026
681ca99
prove only the frozen candidate once
TheGreenCedar Jul 30, 2026
c72c87a
freeze embedding server constants
TheGreenCedar Jul 30, 2026
d79c298
reconcile frozen candidate proof
TheGreenCedar Jul 30, 2026
7390373
require carrier evidence to name its flow
TheGreenCedar Jul 30, 2026
97fb528
bound formatting carrier vocabulary
TheGreenCedar Jul 30, 2026
4e63f63
align freeze with frozen candidate
TheGreenCedar Jul 30, 2026
d94e8e6
seal acceptance job bodies
TheGreenCedar Jul 30, 2026
1a7c8a4
authenticate workflow execution context
TheGreenCedar Jul 30, 2026
47e4137
refresh release evidence fixture binding
TheGreenCedar Jul 30, 2026
470b099
Merge pull request #1581 from TheGreenCedar/codex/wp9c-sufficiency-pe…
TheGreenCedar Jul 30, 2026
3e49d28
Merge pull request #1622 from TheGreenCedar/codex/1621-release-freeze…
TheGreenCedar Jul 30, 2026
ca2ff38
avoid descendant capture waits
TheGreenCedar Jul 30, 2026
91770e7
retain qualified cache reuse
TheGreenCedar Jul 30, 2026
04dd580
make timeout capture assertion portable
TheGreenCedar Jul 30, 2026
72f4774
Merge pull request #1627 from TheGreenCedar/codex/1625-file-backed-pr…
TheGreenCedar Jul 30, 2026
11ffedc
pin qualification cache evidence flow
TheGreenCedar Jul 30, 2026
32f92ab
bind cache state to qualified runner
TheGreenCedar Jul 30, 2026
3e194ea
Merge pull request #1628 from TheGreenCedar/codex/1626-qualification-…
TheGreenCedar Jul 30, 2026
0170ce0
freeze integrated release candidate
TheGreenCedar Jul 30, 2026
0d02f4b
use available windows probe shell
TheGreenCedar Jul 30, 2026
dc45376
refresh release claim fixtures
TheGreenCedar Jul 30, 2026
80e1083
stabilize windows native probe
TheGreenCedar Jul 30, 2026
9f3f68e
grant coordinator status authority
TheGreenCedar Jul 30, 2026
1bf1cbd
enforce reusable workflow permissions
TheGreenCedar Jul 30, 2026
ac2d788
restore pre-calibration source
TheGreenCedar Jul 30, 2026
54b4067
freeze calibrated runtime constants
TheGreenCedar Jul 30, 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
38 changes: 35 additions & 3 deletions .github/scripts/build-marketplace-fixture.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ import { execFileSync } from "node:child_process";
import { mkdirSync, writeFileSync } from "node:fs";
import path from "node:path";

import {
FIXTURE_MARKER_FILENAME,
FIXTURE_MARKER_PURPOSE,
} from "./marketplace-delivery-identity.mjs";

function fail(message) {
console.error(`::error::${message}`);
process.exit(1);
Expand Down Expand Up @@ -53,7 +58,8 @@ if (typeof manifest.version !== "string" || !manifest.version) {
fail("pinned commit has no plugin version");
}

const catalogDirectory = path.join(path.resolve(args.out), ".agents", "plugins");
const fixtureRoot = path.resolve(args.out);
const catalogDirectory = path.join(fixtureRoot, ".agents", "plugins");
mkdirSync(catalogDirectory, { recursive: true });
// Mirrors the live catalog's shape at .agents/plugins/marketplace.json. The
// resolver rejects a catalog missing `name`, and the live catalog carries no
Expand Down Expand Up @@ -87,9 +93,35 @@ writeFileSync(
`${JSON.stringify(catalog, null, 2)}\n`,
);

// The fixture must be a git repository: the Codex resolver clones it like the live catalog.
// A fixture catalog is a DISTINCT delivery state, not a stand-in that may pass for the live
// catalog, so it says so in its own bytes. The installed-runtime predicate refuses to accept a
// deferred installation unless the resolved marketplace root carries this marker naming the
// exact commit the catalog pins -- an arbitrary local git directory, or a clone of the live
// marketplace, cannot satisfy the deferred shape by accident.
//
// This file sits beside .agents/, not inside it: the resolver reads only
// .agents/plugins/marketplace.json, so the catalog the resolver sees stays byte-identical in
// shape to the live one.
writeFileSync(
path.join(fixtureRoot, FIXTURE_MARKER_FILENAME),
`${JSON.stringify(
{
schema_version: 1,
purpose: FIXTURE_MARKER_PURPOSE,
pinned_commit: commit,
plugin_version: manifest.version,
},
null,
2,
)}\n`,
);

// The fixture must be a git repository: the Codex resolver reads it like the live catalog.
// It deliberately has NO `origin` remote. Pointing one at the live marketplace URL would make
// the fixture claim an identity it does not have, and the deferred predicate asserts the
// absence positively rather than tolerating a failed probe.
const git = (...command) =>
execFileSync("git", ["-C", path.resolve(args.out), ...command], { encoding: "utf8" });
execFileSync("git", ["-C", fixtureRoot, ...command], { encoding: "utf8" });
git("init", "--quiet", "--initial-branch", "main");
git("config", "user.email", "release@codestory.invalid");
git("config", "user.name", "CodeStory release");
Expand Down
70 changes: 68 additions & 2 deletions .github/scripts/build-marketplace-fixture.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
// fixture path failed at preflight.

import assert from "node:assert/strict";
import { execFileSync } from "node:child_process";
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
import { execFileSync, spawnSync } from "node:child_process";
import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
import test from "node:test";
Expand Down Expand Up @@ -76,3 +76,69 @@ test("the fixture states no version, because the live catalog states none", () =
rmSync(out, { recursive: true, force: true });
}
});

// A fixture catalog is a DISTINCT delivery state, not a stand-in that may pass for the live one.
// The installed-runtime predicate refuses a deferred install whose marketplace root does not carry
// this marker naming the exact commit the catalog pins, so an arbitrary local git directory -- or
// a clone of the live marketplace -- cannot satisfy the deferred shape by accident.
test("the fixture identifies itself and the commit it pins", () => {
const { out, commit } = buildFixture();
try {
const marker = JSON.parse(
readFileSync(path.join(out, ".codestory-marketplace-fixture.json"), "utf8"),
);
assert.deepEqual(Object.keys(marker).sort(), [
"pinned_commit",
"plugin_version",
"purpose",
"schema_version",
]);
assert.equal(marker.schema_version, 1);
assert.equal(marker.purpose, "codestory-candidate-pinned-marketplace-fixture");
assert.equal(marker.pinned_commit, commit);
// The marker must be committed, or a clean-tree check would pass over a fixture that had
// been re-marked after the fact.
assert.equal(
execFileSync("git", ["-C", out, "status", "--porcelain"], { encoding: "utf8" }).trim(),
"",
);
} finally {
rmSync(out, { recursive: true, force: true });
}
});

// The fixture deliberately has no `origin`. Pointing one at the live marketplace URL would make it
// claim an identity it does not have, and the predicate asserts the absence positively rather than
// treating a failed probe as proof of anything. The predicate's own probe used to hard-fail here,
// which is what made the deferred path unprovable in the first place.
test("the fixture is local-only and never claims the live marketplace as its origin", () => {
const { out } = buildFixture();
try {
const probe = spawnSync("git", ["-C", out, "remote", "get-url", "origin"], {
encoding: "utf8",
});
assert.notEqual(probe.status, 0, "a candidate-pinned fixture must have no origin remote");
assert.match(probe.stderr, /No such remote/u);
assert.equal(
execFileSync("git", ["-C", out, "remote"], { encoding: "utf8" }).trim(),
"",
);
} finally {
rmSync(out, { recursive: true, force: true });
}
});

// The resolver reads .agents/plugins/marketplace.json and nothing else, so the marker must not
// change the catalog the resolver sees.
test("the marker sits outside the catalog the resolver reads", () => {
const { out, catalog } = buildFixture();
try {
assert.equal(catalog.fixture, undefined);
assert.equal(
existsSync(path.join(out, ".agents", "plugins", ".codestory-marketplace-fixture.json")),
false,
);
} finally {
rmSync(out, { recursive: true, force: true });
}
});
Loading
Loading