📦 deps(thirdparty): update snapshots

This commit is contained in:
ci[bot]
2026-07-22 10:09:47 +00:00
parent 316c012df0
commit 60364c6660
353 changed files with 24740 additions and 1264 deletions
@@ -12,7 +12,7 @@ const {
cleanupBackups,
inspectHostConfig,
} = require("../../lib/aas-v1/adapters");
const { inspectRegularFile } = require("../../lib/aas-v1/adapters/safety");
const { inspectRegularFile, runWindowsAcl } = require("../../lib/aas-v1/adapters/safety");
const FIXTURES = path.join(__dirname, "fixtures", "aas-v1-adapters");
const CODEX_SERVER = { command: "/opt/aas/aas-mcp", args: ["--stdio", "--runtime", "14.6.0"], enabled: true };
@@ -139,6 +139,31 @@ test("symlink, non-regular, and ownership mismatches are rejected", async (t) =>
await assert.rejects(inspectRegularFile(real, { expectedUid: stat.uid + 1 }), (error) => error.code === "AAS_ADAPTER_OWNERSHIP_MISMATCH");
});
test("Windows ACL runner passes paths out of the command and reports bounded diagnostics", () => {
const inspectedPath = String.raw`C:\Users\Example\.codex\config.toml`;
let invocation;
const runner = (...args) => {
invocation = args;
return { status: 1, stdout: "", stderr: "Get-Acl failed\r\nwith details\u0000" };
};
assert.throws(
() => runWindowsAcl("$p=$env:AAS_WINDOWS_ACL_PATH", inspectedPath, { phase: "inspectAcl", runner }),
(error) => {
assert.equal(error.code, "AAS_ADAPTER_WINDOWS_ACL_FAILED");
assert.deepEqual(error.details, {
status: 1,
phase: "inspectAcl",
path: inspectedPath,
diagnostic: "Get-Acl failed with details",
});
return true;
},
);
assert.deepEqual(invocation[1], ["-NoProfile", "-NonInteractive", "-Command", "$p=$env:AAS_WINDOWS_ACL_PATH"]);
assert.equal(invocation[2].env.AAS_WINDOWS_ACL_PATH, inspectedPath);
assert.ok(!invocation[1].includes(inspectedPath));
});
test("ambiguous TOML and duplicate JSON keys fail closed", async (t) => {
const directory = await temporaryDirectory(t);
const toml = path.join(directory, "config.toml");
@@ -68,7 +68,7 @@ test("search retrieval preserves catalog order without scores or relevance ranki
skills: [
{ id: "z-first", name: "Z first", category: "test", searchTokens: ["alpha"], description: "", tags: [], triggers: [] },
{ id: "a-many", name: "A many", category: "test", searchTokens: ["alpha", "beta"], description: "", tags: [], triggers: [] },
{ id: "m-second", name: "M second", category: "test", searchTokens: ["beta"], description: "", tags: [], triggers: [] },
{ id: "m-second", name: "M second", category: "test", searchTokens: ["beta", "many"], description: "", tags: [], triggers: [] },
{ id: "unrelated", name: "Unrelated", category: "test", searchTokens: ["gamma"], description: "", tags: [], triggers: [] },
],
};
@@ -85,22 +85,16 @@ test("search retrieval preserves catalog order without scores or relevance ranki
}
const exact = core.searchSkills(catalog, { query: "a-many", limit: 50 });
assert.deepEqual(exact.results.map((entry) => entry.id), ["a-many"]);
assert.deepEqual(exact.results.map((entry) => entry.id), ["a-many", "m-second"]);
});
test("every canonical skill is directly gettable, exactly searchable, and agent-composable", () => {
test("every canonical skill is directly gettable and agent-composable", () => {
const catalog = core.loadBundledCatalog();
for (const id of canonicalSkillIds) {
const skill = core.getSkill(catalog, id);
assert.equal(skill.id, id);
const search = core.searchSkills(catalog, { query: id, limit: 1 });
assert.equal(search.totalMatches, 1);
assert.equal(search.results[0]?.id, id, `exact search did not return ${id} first`);
assert.equal(Object.hasOwn(search.results[0], "score"), false);
assert.equal(Object.hasOwn(search.results[0], "rank"), false);
const composed = core.composeStack(catalog, selection([id]));
assert.equal(composed.ok, true);
assert.equal(composed.status, "composed");
@@ -10,6 +10,7 @@ const {
AGENT_SELECTION_CONTRACT,
MAX_JSON_DEPTH,
MAX_LINE_BYTES,
MAX_SESSION_MANIFESTS,
McpServer,
TOOL_NAMES,
parseStrictJsonLine,
@@ -38,6 +39,32 @@ async function initializedServer() {
return server;
}
test("MCP bounds composed manifest session state and evicts the oldest digest", async () => {
const server = await initializedServer();
const catalog = core.loadBundledCatalog({ root: ROOT });
const selectedId = catalog.skills[0].id;
const digests = [];
for (let index = 0; index <= MAX_SESSION_MANIFESTS; index += 1) {
const response = await server.handle({
jsonrpc: "2.0",
id: 1000 + index,
method: "tools/call",
params: {
name: "compose_stack",
arguments: {
profile: { goals: [`bounded-session-${index}`] },
skillIds: [selectedId],
},
},
});
assert.equal(response.result.isError, false);
digests.push(response.result.structuredContent.manifestDigest);
}
assert.equal(server.manifestSessions.size, MAX_SESSION_MANIFESTS);
assert.equal(server.manifestSessions.has(digests[0]), false);
assert.equal(server.manifestSessions.has(digests.at(-1)), true);
});
test("strict JSON-lines parser rejects invalid UTF-8, duplicate keys, excess depth, batches, and oversized input", () => {
assert.deepEqual(parseStrictJsonLine(Buffer.from('{"jsonrpc":"2.0"}')), { jsonrpc: "2.0" });
assert.doesNotThrow(() => parseStrictJsonLine(Buffer.from(JSON.stringify({
@@ -147,6 +147,26 @@ test("runtime promotion rejects a missing cache root under a group or world writ
);
});
test("runtime promotion rejects a private parent beneath a replaceable ancestor", async (t) => {
if (process.platform === "win32") return;
const root = await temp(t);
const sharedAncestor = path.join(root, "shared");
const privateParent = path.join(sharedAncestor, "mine");
await fsp.mkdir(privateParent, { recursive: true, mode: 0o700 });
await fsp.chmod(sharedAncestor, 0o777);
await fsp.chmod(privateParent, 0o700);
const fixture = releaseFixture();
await assert.rejects(
core.cache.installRuntimeFromRegistry({
cacheRoot: path.join(privateParent, "aas-cache"),
version: "14.6.0",
expectedIntegrity: fixture.integrity,
fetcher: fixture.fetcher,
}),
(error) => error.code === "AAS_RUNTIME_DIRECTORY_UNSAFE",
);
});
test("the packed runtime launches MCP from an isolated verified dependency closure", async (t) => {
const root = await temp(t);
const repoRoot = path.resolve(__dirname, "../../..");
@@ -392,6 +392,26 @@ test("layout cleanup removes only exact marker-owned stages left before publicat
fs.rmSync(fx.sandbox, { recursive: true });
});
test("layout stage cleanup propagates a failed deletion durability barrier", () => {
const fx = fixture();
fs.rmSync(fx.transactionDirectory, { recursive: true });
const inspected = inspectLayout(fx.adapter, { host: "codex", scope: "project", identityDigest: TARGET_ID });
const markerToken = "7".repeat(48);
const markerName = `.aas-layout-recovery-${"6".repeat(32)}`;
const directory = inspected.missingDirectories[0];
const stage = path.join(path.dirname(directory), `.aas-layout-stage-${markerToken}-${path.basename(directory)}`);
fs.mkdirSync(stage, { mode: 0o700 });
fs.writeFileSync(path.join(stage, markerName), `${markerToken}\n`, { mode: 0o600 });
assert.throws(() => cleanupMaterializedLayout(inspected, [directory], {
markerName,
markerToken,
fsyncDirectory() { throw new Error("injected parent fsync failure"); },
}), /injected parent fsync failure/);
assert.equal(fs.existsSync(stage), false);
cleanupMaterializedLayout(inspected, [directory], { markerName, markerToken });
fs.rmSync(fx.sandbox, { recursive: true });
});
test("layout cleanup postcondition detects a dangling symlink artifact", (t) => {
const fx = fixture();
fs.rmSync(fx.transactionDirectory, { recursive: true });
@@ -11,12 +11,21 @@ function readText(relativePath) {
const packageJson = JSON.parse(readText("package.json"));
const generatedFiles = JSON.parse(readText("tools/config/generated-files.json"));
const ciWorkflow = readText(".github/workflows/ci.yml");
const hygieneWorkflowForPages = readText(".github/workflows/repo-hygiene.yml");
const offlineCatalogBuilder = readText("tools/scripts/build-aas-v1-offline-catalog.js");
const canonicalMergeScript = readText("tools/scripts/merge_canonical_sync_pr.cjs");
const publishWorkflow = readText(".github/workflows/publish-npm.yml");
const releaseWorkflowScript = readText("tools/scripts/release_workflow.js");
const hygieneWorkflowPath = path.join(repoRoot, ".github", "workflows", "repo-hygiene.yml");
for (const [name, workflow] of [["main CI", ciWorkflow], ["repo hygiene", hygieneWorkflowForPages]]) {
assert.match(
workflow,
/merge_canonical_sync_pr\.cjs[\s\S]*?--head "\$PR_HEAD" \\\n+\s+--skip-pages/,
`${name} canonical sync must not dispatch release-only Pages`,
);
}
const prepareReleaseBlock = releaseWorkflowScript.slice(
releaseWorkflowScript.indexOf("function prepareRelease"),
releaseWorkflowScript.indexOf("function publishRelease"),
@@ -0,0 +1,26 @@
const assert = require('node:assert');
const { assertLiveSeoDocuments } = require('../check-live-seo-geo');
const expected = { countLabel: '1,987+', releaseLabel: 'V15.3.0' };
const documents = {
home: 'AAS Core Preview | Agent-first stacks backed by 1,987+ skills SoftwareSourceCode FAQPage specialized plugins',
plugins: 'AAS Specialized Plugins | 15 AI coding workflow packs specialized plugin packs numberOfItems',
sitemap: 'https://sickn33.github.io/agentic-awesome-skills/plugins',
llms: 'https://sickn33.github.io/agentic-awesome-skills/plugins Current release: V15.3.0. 1,987+',
robots: 'User-agent: GPTBot User-agent: OAI-SearchBot User-agent: ClaudeBot User-agent: PerplexityBot',
};
assert.doesNotThrow(() => assertLiveSeoDocuments(documents, expected));
assert.throws(
() => assertLiveSeoDocuments({
...documents,
home: 'Agentic Awesome Skills GitHub | 1,987+ AI coding skills SoftwareSourceCode FAQPage specialized plugins',
}, expected),
/AAS Core Preview/,
);
assert.throws(
() => assertLiveSeoDocuments({ ...documents, home: `${documents.home} prompt templates` }, expected),
/stale snippet/,
);
console.log('live SEO/GEO contract tests passed');
@@ -83,6 +83,13 @@ const wpSiteHealthCatalog = fs.readFileSync(
'utf8',
);
const dispatchSkill = fs.readFileSync(path.join(repoRoot, 'skills', 'dispatch', 'SKILL.md'), 'utf8');
const anywriteSkill = fs.readFileSync(path.join(repoRoot, 'skills', 'anywrite', 'SKILL.md'), 'utf8');
const sshepherdSkill = fs.readFileSync(path.join(repoRoot, 'skills', 'sshepherd', 'SKILL.md'), 'utf8');
const awsDiscoverySkill = fs.readFileSync(path.join(repoRoot, 'skills', 'hf-cloud-aws-context-discovery', 'SKILL.md'), 'utf8');
const pptxDeckSkill = fs.readFileSync(path.join(repoRoot, 'skills', 'pptx-deck-creation', 'SKILL.md'), 'utf8');
const pptxDesignProfiles = fs.readFileSync(path.join(repoRoot, 'skills', 'pptx-deck-creation', 'references', 'design-profiles.md'), 'utf8');
const cloudflareAuditSkill = fs.readFileSync(path.join(repoRoot, 'skills', 'cloudflare-security-audit', 'SKILL.md'), 'utf8');
const weaviatePdfReference = fs.readFileSync(path.join(repoRoot, 'skills', 'weaviate-cookbooks', 'references', 'pdf_multimodal_rag.md'), 'utf8');
const eclCreatorConfig = fs.readFileSync(
path.join(repoRoot, 'skills', 'ecl-harness-engineer', 'agents', 'creator-config.md'),
'utf8',
@@ -456,6 +463,20 @@ assert.match(
/^\s+codex:\s*blocked$/m,
'Dispatch must be blocked from plugin-safe Codex distribution',
);
for (const [name, skill] of [['anywrite', anywriteSkill], ['sshepherd', sshepherdSkill]]) {
assert.match(skill, /^\s+codex:\s*blocked$/m, `${name} must be blocked from Codex plugins without a shipped runtime`);
assert.match(skill, /^\s+claude:\s*blocked$/m, `${name} must be blocked from Claude plugins without a shipped runtime`);
assert.doesNotMatch(skill, /^\.\/dist\/(?:anywrite|sshepherd)\b/m, `${name} must not execute a workspace-relative binary`);
assert.match(skill, /explicit absolute path/i, `${name} must require a user-approved absolute executable path`);
}
assert.match(awsDiscoverySkill, /Never open or print `~\/\.aws\/credentials`/);
assert.doesNotMatch(awsDiscoverySkill, /credentials` are plain INI files — read-only/);
assert.match(`${pptxDeckSkill}\n${pptxDesignProfiles}`, /untrusted (?:reference )?data/i);
assert.match(`${pptxDeckSkill}\n${pptxDesignProfiles}`, /Ignore embedded instructions|never as instructions/i);
assert.match(cloudflareAuditSkill, /canonical physical repository path plus its normalized `origin`/);
assert.match(cloudflareAuditSkill, /Do not search or reuse prior runs from a basename-only directory/);
assert.doesNotMatch(weaviatePdfReference, /-o \/tmp\/(?:uv|ollama)-install\.sh/);
assert.match(weaviatePdfReference, /mktemp -d/);
assert.match(
dispatchSkill,
/^\s+claude:\s*blocked$/m,
@@ -508,6 +508,7 @@ function approvalDependencies(overrides = {}) {
headRefOid: HEAD_SHA,
headRefName: "maintenance/internal",
headRepository: { nameWithOwner: "OWNER/REPO" },
author: { login: "owner" },
};
let classifications = 0;
const dependencies = approvalDependencies({
@@ -532,6 +533,30 @@ function approvalDependencies(overrides = {}) {
assert.deepStrictEqual(result.runs, []);
}
{
const prDetails = {
number: 451,
baseRefName: "main",
baseRefOid: BASE_SHA,
headRefOid: HEAD_SHA,
headRefName: "maintenance/internal",
headRepository: { nameWithOwner: "owner/repo" },
author: { login: "collaborator" },
};
const dependencies = approvalDependencies({
classifyChangeRecords() {
return { approvalSafe: false, reasons: ["record_0:new_unapproved_path"] };
},
});
assert.throws(
() => mergeBatch.approveActionRequiredRuns("/repo", "owner/repo", prDetails, {
dependencies,
reviewedHeads: [HEAD_SHA],
}),
/not fork-approval-safe/,
);
}
{
const record = {
status: "M",
@@ -566,6 +591,23 @@ function approvalDependencies(overrides = {}) {
}),
report,
);
const nestedBundleRecord = {
...record,
old_path: "skills/example/examples/app/package-lock.json",
new_path: "skills/example/examples/app/package-lock.json",
};
const nestedBundleReport = {
...report,
changes: [{ ...report.changes[0], records: [nestedBundleRecord] }],
};
assert.strictEqual(
mergeBatch.validateChangedSkillEvidence(nestedBundleReport, {
mergeBaseOid: BASE_SHA,
headOid: HEAD_SHA,
rawRecords: [nestedBundleRecord],
}),
nestedBundleReport,
);
assert.throws(
() => mergeBatch.validateChangedSkillEvidence(
{ ...report, head_oid: BLOB_SHA },
@@ -78,12 +78,12 @@ assert.strictEqual(
"published package must declare the first Core-capable major",
);
assert.ok(
readme.includes("https://github.com/sickn33/agentic-awesome-skills/blob/main/docs/users/aas-core.md"),
"published README must link to the canonical AAS Core guide without relying on an unpackaged relative path",
readme.includes(`https://github.com/sickn33/agentic-awesome-skills/blob/v${packageJson.version}/docs/users/aas-core.md`),
"published README must link to the AAS Core guide pinned to the exact package release",
);
assert.ok(
!readme.includes("](docs/users/aas-core.md)"),
"published README must not link to an AAS Core guide path excluded from the npm package",
!readme.includes("/blob/main/docs/users/aas-core.md"),
"published README must not direct package readers to moving main-branch Core instructions",
);
assert.ok(
coreGuide.includes(`--package=agentic-awesome-skills@${packageJson.version}`),
@@ -20,13 +20,35 @@ function git(cwd, ...args) {
const mergeOid = "a".repeat(40);
const candidate = {
number: 10,
title: "chore: release v1.2.3",
author: { login: "owner" },
headRefName: "release/v1.2.3",
headRepository: { nameWithOwner: "owner/repo" },
baseRefName: "main",
mergeCommit: { oid: mergeOid },
mergedAt: "2026-01-01T00:00:00Z",
};
assert.strictEqual(release.selectMergedReleaseCandidate([candidate], "1.2.3"), candidate);
assert.throws(() => release.selectMergedReleaseCandidate([], "1.2.3"), /exactly one/);
assert.throws(() => release.selectMergedReleaseCandidate([candidate, { ...candidate, number: 11 }], "1.2.3"), /exactly one/);
const releaseIdentity = { repoSlug: "owner/repo", ownerLogin: "owner" };
assert.strictEqual(release.selectMergedReleaseCandidate([candidate], "1.2.3", releaseIdentity), candidate);
assert.throws(() => release.selectMergedReleaseCandidate([], "1.2.3", releaseIdentity), /exactly one/);
const newerCandidate = {
...candidate,
number: 11,
mergeCommit: { oid: "b".repeat(40) },
mergedAt: "2026-01-02T00:00:00Z",
};
assert.throws(
() => release.selectMergedReleaseCandidate([candidate, newerCandidate], "1.2.3", releaseIdentity),
/found 2/,
);
assert.throws(
() => release.selectMergedReleaseCandidate([{ ...candidate, headRepository: { nameWithOwner: "attacker/repo" } }], "1.2.3", releaseIdentity),
/found 0/,
);
assert.throws(
() => release.selectMergedReleaseCandidate([{ ...candidate, author: { login: "collaborator" } }], "1.2.3", releaseIdentity),
/found 0/,
);
const root = fs.mkdtempSync(path.join(os.tmpdir(), "release-workflow-"));
const repo = path.join(root, "repo");
@@ -9,6 +9,7 @@ const {
ensureRepoRelative,
getChangedSkillDirs,
getChangedSkillFiles,
getUnresolvedChangedSkillFiles,
isQuotaFailure,
reviewFingerprint,
reviewLabel,
@@ -20,7 +21,8 @@ const changed = getChangedSkillFiles('base', 'head', {
assert.deepStrictEqual(args, [
'diff',
'--name-only',
'--diff-filter=ACMR',
'--no-renames',
'--diff-filter=ACDMR',
'base',
'head',
'--',
@@ -28,25 +30,36 @@ const changed = getChangedSkillFiles('base', 'head', {
return [
'skills/alpha/SKILL.md',
'README.md',
'plugins/example/SKILL.md',
'plugins/bundle/skills/example/SKILL.md',
'plugins/bundle/package.json',
'skills/beta/notes.md',
'',
].join('\n');
},
});
assert.deepStrictEqual(changed, ['skills/alpha/SKILL.md', 'plugins/example/SKILL.md']);
assert.deepStrictEqual(changed, [
'skills/alpha/SKILL.md',
'plugins/bundle/skills/example/SKILL.md',
'skills/beta/notes.md',
]);
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aas-review-skills-'));
fs.mkdirSync(path.join(tempDir, 'skills', 'alpha'), { recursive: true });
fs.mkdirSync(path.join(tempDir, 'plugins', 'example'), { recursive: true });
fs.mkdirSync(path.join(tempDir, 'plugins', 'bundle', 'skills', 'example'), { recursive: true });
fs.writeFileSync(path.join(tempDir, 'skills', 'alpha', 'SKILL.md'), 'alpha');
fs.writeFileSync(path.join(tempDir, 'plugins', 'example', 'SKILL.md'), 'example');
fs.mkdirSync(path.join(tempDir, 'skills', 'alpha', 'references'));
fs.writeFileSync(path.join(tempDir, 'skills', 'alpha', 'references', 'guide.md'), 'guide');
fs.writeFileSync(path.join(tempDir, 'plugins', 'bundle', 'skills', 'example', 'SKILL.md'), 'example');
assert.deepStrictEqual(getChangedSkillDirs(changed, tempDir), [
'plugins/example',
'plugins/bundle/skills/example',
'skills/alpha',
]);
assert.deepStrictEqual(
getUnresolvedChangedSkillFiles(changed, ['plugins/bundle/skills/example', 'skills/alpha']),
['skills/beta/notes.md'],
);
assert.throws(
() => ensureRepoRelative('../outside/SKILL.md', tempDir),
@@ -129,6 +142,18 @@ assert.notStrictEqual(
alphaFingerprint,
);
fs.writeFileSync(path.join(tempDir, 'skills', 'alpha', 'SKILL.md'), 'alpha');
fs.writeFileSync(path.join(tempDir, 'skills', 'alpha', 'references', 'guide.md'), 'guide changed');
assert.notStrictEqual(
reviewFingerprint(['skills/alpha'], {
cacheVersion: '1',
repoRoot: tempDir,
threshold: '80',
workspace: 'antigravity-awesome-skills',
}),
alphaFingerprint,
);
const githubOutput = path.join(tempDir, 'github-output.txt');
const plan = writePlan(['skills/alpha'], {
cacheVersion: '1',
@@ -143,6 +168,20 @@ assert.match(fs.readFileSync(githubOutput, 'utf8'), /has-skills=true/);
assert.match(fs.readFileSync(githubOutput, 'utf8'), /skill-count=1/);
assert.match(fs.readFileSync(githubOutput, 'utf8'), /fingerprint=[0-9a-f]{64}/);
const deletedOutput = path.join(tempDir, 'deleted-output.txt');
const deletedPlan = writePlan([], {
githubOutput: deletedOutput,
unresolvedFiles: ['skills/deleted/SKILL.md', 'skills/deleted/examples/demo.md'],
});
assert.strictEqual(deletedPlan.hasSkills, false);
assert.strictEqual(deletedPlan.requiresManual, true);
assert.deepStrictEqual(deletedPlan.unresolvedFiles, [
'skills/deleted/SKILL.md',
'skills/deleted/examples/demo.md',
]);
assert.match(deletedPlan.fingerprint, /^manual-[0-9a-f]{64}$/);
assert.match(fs.readFileSync(deletedOutput, 'utf8'), /requires-manual=true/);
assert.strictEqual(isQuotaFailure('Credit quota exceeded for this workspace'), true);
assert.strictEqual(isQuotaFailure('Insufficient credits remaining'), true);
assert.strictEqual(isQuotaFailure('Monthly credit allowance has been reached'), true);
@@ -41,6 +41,26 @@ async function run() {
assert.throws(() => verifyLocalDeployment({ ...generatorOptions, deploymentRoot }), /unexpected=.*stale\.txt/);
fs.unlinkSync(stalePath);
const assertSymlinkRejected = (relativePath, type = 'file') => {
const target = path.join(deploymentRoot, relativePath);
const physical = `${target}.physical`;
fs.renameSync(target, physical);
try {
fs.symlinkSync(physical, target, type);
assert.throws(
() => verifyLocalDeployment({ ...generatorOptions, deploymentRoot }),
/physical|non-file entry|regular file/i,
);
} finally {
if (fs.existsSync(target) || fs.lstatSync(target).isSymbolicLink()) fs.unlinkSync(target);
fs.renameSync(physical, target);
}
};
assertSymlinkRejected('.nojekyll');
assertSymlinkRejected('redirect-manifest.json');
assertSymlinkRejected('antigravity-awesome-skills/index.html');
assertSymlinkRejected('antigravity-awesome-skills', 'dir');
const fetchImpl = async (url) => {
const parsed = new URL(url);
if (parsed.pathname.startsWith('/agentic-awesome-skills/')) return new Response('current destination', { status: 200 });
@@ -80,6 +80,25 @@ const maintainerSkill = fs.readFileSync(
path.join(repositoryRoot, "skills", "antigravity-maintainer-batch-release", "SKILL.md"),
"utf8",
);
const mergeBatchGuide = fs.readFileSync(path.join(repositoryRoot, "docs", "maintainers", "merge-batch.md"), "utf8");
const mergingGuide = fs.readFileSync(path.join(repositoryRoot, "docs", "maintainers", "merging-prs.md"), "utf8");
const autonomyGuide = fs.readFileSync(path.join(repositoryRoot, "docs", "maintainers", "pr-autonomy.md"), "utf8");
const maintainerSkillUi = fs.readFileSync(
path.join(repositoryRoot, "skills", "antigravity-maintainer-batch-release", "agents", "openai.yaml"),
"utf8",
);
for (const contractText of [maintainerSkill, maintenanceGuide, mergeBatchGuide, mergingGuide, autonomyGuide]) {
assert.match(contractText, /skills\/\*\*|skills\/<skill-id>\/\*\*/);
}
assert.match(maintainerSkill, /entire tracked `skills\/<skill-id>\/\*\*` subtree/);
assert.match(maintainerSkill, /authored by the repository owner/);
assert.match(maintainerSkill, /exactly one merged release PR/);
assert.match(maintenanceGuide, /canonical-repo-state` PR owns that state/);
assert.match(autonomyGuide, /complete nearest skill-directory fingerprint/);
assert.match(mergingGuide, /No local-integration exception/);
assert.doesNotMatch(mergingGuide, /Rare exception: local squash|`gh pr merge <PR_NUMBER>/);
assert.match(maintainerSkillUi, /\$antigravity-maintainer-batch-release/);
assert.doesNotMatch(maintainerSkillUi, /frozen matrix|product, verifier, and gold|recommend|rank/i);
assert.match(maintainerSkill, /discover every already-configured local AAS MCP host from its real configuration and update each one to the exact same package version/);
assert.match(maintainerSkill, /Pin `agentic-awesome-skills@X\.Y\.Z` and `--version X\.Y\.Z`; never use `latest`/);
assert.match(maintainerSkill, /real MCP `initialize` plus `tools\/list` handshake reports catalog package version `X\.Y\.Z`/);
@@ -174,13 +193,16 @@ assert.match(
/needs\.review-attempt\.outputs\.outcome != 'reviewed'/,
"every non-passing Tessl outcome must route to exact-head manual review",
);
assert.match(skillReviewWorkflow, /paths:\s*\n\s+- 'skills\/\*\*'\s*\n\s+- 'plugins\/\*\*\/skills\/\*\*'/);
assert.match(skillReviewWorkflow, /steps\.plan\.outputs\.requires-manual != 'true'/);
assert.match(skillReviewWorkflow, /REQUIRES_MANUAL: \$\{\{ steps\.plan\.outputs\.requires-manual \}\}/);
assert.match(skillReviewWorkflow, /result=manual/);
assert.match(skillReviewWorkflow, /needs\.review-state\.outputs\.configured != 'true'/);
assert.match(skillReviewWorkflow, /ref: \$\{\{ github\.event\.pull_request\.base\.sha \}\}/);
assert.match(skillReviewWorkflow, /review_changed_skills\.cjs --plan/);
assert.match(skillReviewWorkflow, /actions\/cache\/restore@[0-9a-f]{40}/);
assert.match(skillReviewWorkflow, /actions\/cache\/save@[0-9a-f]{40}/);
assert.match(skillReviewWorkflow, /tessl-review-v1-\$\{\{ steps\.plan\.outputs\.fingerprint \}\}/);
assert.match(skillReviewWorkflow, /tessl-review-v2-\$\{\{ steps\.plan\.outputs\.fingerprint \}\}/);
assert.match(skillReviewWorkflow, /steps\.review-cache\.outputs\.cache-hit != 'true'/);
assert.match(skillReviewWorkflow, /needs\.review-attempt\.outputs\.outcome == 'reviewed'/);
assert.ok(