diff --git a/README.md b/README.md
index 641d7d8..3dd6551 100644
--- a/README.md
+++ b/README.md
@@ -32,12 +32,16 @@ Code, Cursor, OpenCode, Copilot CLI, and other coding agents.
New chats do not require another `init`. Ordinary questions need no Noxroot task. Noxroot stays in
the background until code-changing work needs it.
-When Noxroot owns the lifecycle, the workflow is:
+Inspect the relevant files and checks before the agent starts editing:
-
+
+Output excerpt with illustrative project paths and checks, not a captured test run. The brief
+identifies likely source files, related tests, and commands to run. It does not claim those checks
+have passed.
+
## Project memory, not chat history
Project memory is the versioned repository knowledge future agents should reuse: architecture,
@@ -73,14 +77,14 @@ npx noxroot@latest init
Then keep talking to your coding agent normally:
```text
-Add a page where users can save favourite restaurants.
+Fix project filters resetting on back navigation.
```
For a code-changing task, compatible agents are instructed to use the pinned repository commands
behind the scenes:
```bash
-npx --yes noxroot@0.1.0 start "add a page where users can save favourite restaurants"
+npx --yes noxroot@0.1.0 start "fix project filters resetting on back navigation"
# your existing coding agent builds the change
npx --yes noxroot@0.1.0 finish
```
@@ -127,74 +131,9 @@ Skills do not prove that code works. The actual tests, type checks, builds, eval
results do. An incomplete result can be handed off locally, but it cannot become approved or qualify
for a future automatic merge. Noxroot does not push, merge, publish, or deploy.
-## See what the agent gets
-
-This tested example comes from Noxroot's own repository:
-
-```text
-$ noxroot context "improve reviewer decision safety"
-
-NOXROOT task brief
-
-Outcome
- improve reviewer decision safety
-
-Confidence High
-
-Task context
- 6 files · ~3,344 tokens
- src/adapters/agents.ts
- src/orchestration/review.ts
- .noxroot/skills/independent-review/SKILL.md
- .noxroot/knowledge/INDEX.md
- AGENTS.md
- .noxroot/config.yml
-
-Likely owner
- src/adapters/agents.ts
-
-Likely tests
- tests/agent-review.test.ts (+2 related)
-
-Checks
- npm run format:check
- npm run lint
- npm run typecheck
- npm run test
- npm run build
-
-Excluded
- 20 files left out
-
-Next
- Build the requested change.
-```
-
-Selection is advisory, not permission to edit. "Do not deploy" remains an exclusion; it never
-activates deployment work.
-
-Completion stays compact:
-
-```text
-Changed
- 3 navigation files
-
-Checked
- TypeScript passed
- Navigation tests passed
-
-Review
- Not required for this bounded change
-
-Learning
- No reusable project-knowledge candidate
-
-Next
- Review the resulting change.
-```
-
-This transcript illustrates the stable information hierarchy; repository-specific commands and
-counts come from the recorded run rather than fixed example data.
+`context ""` is read-only. It does not start a task or run checks. Selection is advisory, not
+permission to edit. "Do not deploy" remains an exclusion; it never activates deployment work. Use
+`start` to record the task baseline and `finish` to check the resulting change.
## Try the read-only diagnosis
diff --git a/docs/architecture.md b/docs/architecture.md
index e441bfb..32006a7 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -6,6 +6,9 @@ uses bounded filesystem APIs, groups repeated monorepo evidence, and never runs
LLM. Proposal generation produces complete file contents and unified creation patches.
Initialization is the only component that applies those proposals.
+Root `AGENTS.md` and `CLAUDE.md` remain instruction evidence when Git ignores them. Explicit
+sensitive-path exclusions and symlink protections still apply. Ordinary ignored files stay excluded.
+
Mature-repository adoption follows explicit repository-relative references from agent instructions.
It recognizes thin forwarding files, existing Agent Skills, documented verification wrappers, and
clear repository-development coordinator overlap. Behavioral ownership determines the boundary: a
@@ -16,7 +19,8 @@ name, filename, or implementation language. Proposal decisions are deliberately
proven gap, reuse explicit evidence, disable an overlapping capability, or preserve a capability
that could not be assessed. An existing coordinator keeps lifecycle, review, and learning authority
while Noxroot may add only non-overlapping context and verification support. Noxroot does not
-interpret arbitrary route schemas or integrate coordinators.
+interpret arbitrary route schemas or integrate coordinators. Task-route reuse requires a
+repository-work context in the reference, not merely API documentation containing the word "routes".
Generated knowledge indexes link at most twelve high-signal documents. Additional documentation
stays in its original location and remains available through repository instructions and task
@@ -62,8 +66,10 @@ semantic modules are deferred.
Controlled learning consumes deterministic verification evidence or already parsed structured
reviewer candidates. Deterministic signatures deduplicate Noxroot-owned knowledge; first creation
also updates the index. Every proposed entry names its confirmation date and source task. Per-file
-and total corpus bounds prevent accumulated Markdown from silently consuming future context; a full
-destination requires deliberate consolidation before another write. Canonical
+and total corpus bounds prevent accumulated Markdown from silently consuming future context.
+Learning writes are capped at 1,000,000 bytes across Markdown files, including nested files and
+index growth. The limit is rechecked when a proposal is applied. Symbolic-link destinations are
+refused. A full destination requires deliberate consolidation before another write. Canonical
`.noxroot/skills/*/SKILL.md` files are short, standards-compatible procedures selected through
ordinary routing, not a new skill runtime or vendor-specific tree.
diff --git a/docs/assets/noxroot-terminal.png b/docs/assets/noxroot-terminal.png
new file mode 100644
index 0000000..6891d44
Binary files /dev/null and b/docs/assets/noxroot-terminal.png differ
diff --git a/docs/assets/noxroot-workflow.svg b/docs/assets/noxroot-workflow.svg
deleted file mode 100644
index bd10a2b..0000000
--- a/docs/assets/noxroot-workflow.svg
+++ /dev/null
@@ -1,110 +0,0 @@
-
- Noxroot-owned workflow
- When Noxroot owns the lifecycle, it reuses repository knowledge, prepares focused task context, supports an existing coding agent, checks the actual change, and keeps useful knowledge in project documentation.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PROJECT MEMORY
-
-
-
-
- 1 / PROJECT MEMORY
- Reuses what your repository already knows
- Docs + decisions + conventions + skills
-
-
-
-
-
-
-
-
- 2 / TASK BRIEF
- Noxroot selects what matters for this task
- Relevant files + project rules + checks to run
-
-
-
-
-
-
-
-
- 3 / YOUR CODING AGENT
- Builds with the right context
- Your existing coding agent stays in control
-
-
-
-
-
-
-
-
- 4 / VERIFICATION
- Noxroot checks the actual change
- Approved tests + type checks + builds + evals
-
-
-
-
-
-
-
-
- 5 / LEARNING LOOP
- Noxroot keeps useful knowledge
- Validated lessons keep project documentation current
-
-
diff --git a/eslint.config.js b/eslint.config.js
index 3386b87..9f6841c 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -9,6 +9,7 @@ export default tseslint.config(
"eslint.config.js",
"tests/built-safety.mjs",
"tests/package-smoke.mjs",
+ "tests/acceptance/*.mjs",
"tests/fixtures/**",
],
},
diff --git a/src/detection/adoption.ts b/src/detection/adoption.ts
index 9613e2e..28fea82 100644
--- a/src/detection/adoption.ts
+++ b/src/detection/adoption.ts
@@ -401,7 +401,9 @@ export async function inspectRepositoryAdoption(
].map((file): RepositoryDocument => ({ path: file, kind: "ordinary", authoritative: true }));
const routeReferences = references.filter(
(item) =>
- /\broutes?\b/i.test(item.context) && !INSTRUCTION_NAME.test(path.posix.basename(item.path)),
+ /\broutes?\b/i.test(item.context) &&
+ /\b(?:tasks?|agents?|context|project|repository|knowledge|memory)\b/i.test(item.context) &&
+ !INSTRUCTION_NAME.test(path.posix.basename(item.path)),
);
const missingRouteReferences = missing.filter((item) => /\broutes?\b/i.test(item.context));
const knowledgeReferences = references.filter(
diff --git a/src/detection/scan.ts b/src/detection/scan.ts
index faae79e..96aab45 100644
--- a/src/detection/scan.ts
+++ b/src/detection/scan.ts
@@ -818,6 +818,9 @@ export async function scanRepository(
const absolute = path.join(current.absolute, entry.name);
if (
entry.name !== ".gitignore" &&
+ // Local root instructions remain authoritative even when not versioned.
+ // Sensitive-path exclusions and symlink checks below still take precedence.
+ !["AGENTS.md", "CLAUDE.md"].includes(relative) &&
ignoredByGit(relative, entry.isDirectory(), ignorePatterns)
) {
continue;
diff --git a/src/knowledge/learn.ts b/src/knowledge/learn.ts
index e181e83..4ff046b 100644
--- a/src/knowledge/learn.ts
+++ b/src/knowledge/learn.ts
@@ -1,5 +1,5 @@
import { createHash } from "node:crypto";
-import { mkdir, readFile, readdir, rename, stat, writeFile } from "node:fs/promises";
+import { lstat, mkdir, readFile, readdir, rename, stat, writeFile } from "node:fs/promises";
import path from "node:path";
import type { ReviewerResponse } from "../adapters/agents.js";
import { loadConfig } from "../config/load.js";
@@ -68,30 +68,76 @@ function signature(candidate: Candidate): string {
}
function ownedDestination(destination: string): string | undefined {
- const normalized = destination.replaceAll("\\", "/").replace(/^\.\//, "");
+ const normalized = path.posix.normalize(destination.replaceAll("\\", "/"));
if (!normalized.startsWith(KNOWLEDGE_ROOT) || !normalized.endsWith(".md")) return undefined;
- if (normalized.includes("../") || normalized === `${KNOWLEDGE_ROOT}INDEX.md`) return undefined;
+ if (normalized.toLowerCase() === `${KNOWLEDGE_ROOT}index.md`) return undefined;
return normalized;
}
-async function knowledgeCorpus(root: string, documentLimit: number): Promise {
+async function checkKnowledgePath(root: string, relative: string): Promise {
+ const target = resolveWithin(root, relative);
+ let current = path.resolve(root);
+ for (const segment of path.relative(current, target).split(path.sep)) {
+ current = path.join(current, segment);
+ try {
+ if ((await lstat(current)).isSymbolicLink()) {
+ throw new Error("Learning cannot follow a symbolic link in owned knowledge.");
+ }
+ } catch (error) {
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") break;
+ throw error;
+ }
+ }
+ return target;
+}
+
+async function knowledgeCorpus(
+ root: string,
+ documentLimit: number,
+): Promise<{
+ text: string;
+ bytes: number;
+ sizes: Map;
+}> {
const directory = path.join(root, ".noxroot", "knowledge");
- try {
- const files = (await readdir(directory)).filter((file) => file.endsWith(".md")).sort();
- const sections: string[] = [];
- let bytes = 0;
- for (const file of files) {
- const absolute = path.join(directory, file);
- const size = (await stat(absolute)).size;
- if (size > documentLimit || bytes + size > MAX_CORPUS_BYTES) continue;
- sections.push(`\n\n${await readFile(absolute, "utf8")}`);
- bytes += size;
+ await checkKnowledgePath(root, KNOWLEDGE_ROOT);
+ const sections: string[] = [];
+ const sizes = new Map();
+ let bytes = 0;
+ let loadedBytes = 0;
+ let visited = 0;
+ const visit = async (folder: string): Promise => {
+ const entries = (await readdir(folder, { withFileTypes: true })).sort((a, b) =>
+ a.name.localeCompare(b.name),
+ );
+ for (const entry of entries) {
+ if (++visited > 4096)
+ throw new Error(
+ "Knowledge corpus inspection limit reached; consolidate before adding learning.",
+ );
+ const absolute = path.join(folder, entry.name);
+ if (entry.isSymbolicLink())
+ throw new Error("Learning cannot follow a symbolic link in owned knowledge.");
+ if (entry.isDirectory()) {
+ await visit(absolute);
+ } else if (entry.isFile() && entry.name.endsWith(".md")) {
+ const size = (await stat(absolute)).size;
+ sizes.set(absolute, size);
+ bytes += size;
+ if (size > documentLimit || loadedBytes + size > MAX_CORPUS_BYTES) continue;
+ sections.push(
+ `\n\n${await readFile(absolute, "utf8")}`,
+ );
+ loadedBytes += size;
+ }
}
- return sections.join("");
+ };
+ try {
+ await visit(directory);
} catch (error) {
- if ((error as NodeJS.ErrnoException).code === "ENOENT") return "";
- throw error;
+ if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error;
}
+ return { text: sections.join(""), bytes, sizes };
}
function structuredCandidates(run: RunRecord): ReviewerResponse["learningCandidates"] {
@@ -147,6 +193,14 @@ export async function proposeLearnings(root: string, run: RunRecord): Promise candidate !== undefined);
+ if (candidates.length === 0) {
+ return {
+ taskId: run.id,
+ proposals: [],
+ rejected: [],
+ message: "No durable learning identified",
+ };
+ }
const config = await loadConfig(root);
const documentLimit = config?.context.documentWarningBytes ?? DEFAULT_DOCUMENT_LIMIT;
const corpus = await knowledgeCorpus(root, documentLimit);
@@ -176,13 +230,23 @@ export async function proposeLearnings(root: string, run: RunRecord): Promise`;
- if (corpus.includes(marker)) continue;
+ if (corpus.text.includes(marker)) continue;
const evidenceLine = candidate.evidence.join("; ");
- const conflictingMarker = corpus.includes(`- Evidence: ${evidenceLine}`);
+ const conflictingMarker = corpus.text.includes(`- Evidence: ${evidenceLine}`);
const content = proposalContent(normalized, digest, run.id, confirmedOn);
- const target = resolveWithin(root, destination);
+ const target = await checkKnowledgePath(root, destination);
const existing = await existingOr(target, "# Validated learnings\n\n");
const projected = `${existing.trimEnd()}\n\n${content.trim()}\n`;
+ if (
+ corpus.bytes - (corpus.sizes.get(target) ?? 0) + Buffer.byteLength(projected) >
+ MAX_CORPUS_BYTES
+ ) {
+ rejected.push({
+ destination,
+ reason: `The knowledge corpus would exceed ${MAX_CORPUS_BYTES} bytes. Consolidate existing knowledge before adding another entry.`,
+ });
+ continue;
+ }
if (Buffer.byteLength(projected) > documentLimit) {
rejected.push({
destination,
@@ -222,24 +286,44 @@ async function existingOr(target: string, fallback: string): Promise {
}
export async function applyLearning(root: string, proposal: LearningProposal): Promise {
+ const destination = ownedDestination(proposal.destination);
+ if (!destination) {
+ throw new Error("Learning may update only Noxroot-owned Markdown under .noxroot/knowledge/.");
+ }
if (proposal.conflict !== "none" || proposal.duplication !== "not-found") {
throw new Error(`Learning proposal ${proposal.id} is not safely applicable.`);
}
- const target = resolveWithin(root, proposal.destination);
- await mkdir(path.dirname(target), { recursive: true });
+ const target = await checkKnowledgePath(root, destination);
const existing = await existingOr(target, "# Validated learnings\n\n");
if (existing.includes(``)) {
return [proposal.destination];
}
- const indexPath = resolveWithin(root, ".noxroot/knowledge/INDEX.md");
+ const indexPath = await checkKnowledgePath(root, ".noxroot/knowledge/INDEX.md");
const index = await existingOr(indexPath, "# Noxroot knowledge index\n\n");
- const basename = path.posix.basename(proposal.destination);
+ const basename = destination.slice(KNOWLEDGE_ROOT.length);
const indexNext = index.includes(`](${basename})`)
? index
: `${index.trimEnd()}\n\n- [Validated learnings](${basename}) — confirmed, deduplicated durable lessons.\n`;
const targetNext = `${existing.trimEnd()}\n\n${proposal.content.trim()}\n`;
const config = await loadConfig(root);
const documentLimit = config?.context.documentWarningBytes ?? DEFAULT_DOCUMENT_LIMIT;
+ const corpus = await knowledgeCorpus(root, documentLimit);
+ const projectedBytes =
+ corpus.bytes -
+ (corpus.sizes.get(target) ?? 0) -
+ (corpus.sizes.get(indexPath) ?? 0) +
+ Buffer.byteLength(targetNext) +
+ Buffer.byteLength(indexNext);
+ if (projectedBytes > MAX_CORPUS_BYTES) {
+ throw new Error(
+ `Knowledge corpus would exceed ${MAX_CORPUS_BYTES} bytes; consolidate it before applying another entry.`,
+ );
+ }
+ if (Buffer.byteLength(indexNext) > documentLimit) {
+ throw new Error(
+ `Knowledge index would exceed ${documentLimit} bytes; consolidate it before applying another entry.`,
+ );
+ }
if (Buffer.byteLength(targetNext) > documentLimit) {
throw new Error(
`Learning destination ${proposal.destination} would exceed ${documentLimit} bytes; consolidate it before applying another entry.`,
@@ -247,6 +331,7 @@ export async function applyLearning(root: string, proposal: LearningProposal): P
}
const targetTemp = `${target}.tmp-${process.pid}`;
const indexTemp = `${indexPath}.tmp-${process.pid}`;
+ await mkdir(path.dirname(target), { recursive: true });
await writeFile(targetTemp, targetNext, { encoding: "utf8", flag: "wx", mode: 0o600 });
await writeFile(indexTemp, indexNext, { encoding: "utf8", flag: "wx", mode: 0o600 });
await rename(targetTemp, target);
diff --git a/tests/acceptance/REPORT-2026-09-03.md b/tests/acceptance/REPORT-2026-09-03.md
new file mode 100644
index 0000000..53361f8
--- /dev/null
+++ b/tests/acceptance/REPORT-2026-09-03.md
@@ -0,0 +1,261 @@
+# Pre-npm acceptance report, 3 September 2026
+
+## Result
+
+The bounded source slice is implemented. Thirty new public repositories were tested using the real
+packed CLI. This is safety and compatibility evidence, not thirty autonomous feature
+implementations. Publication remains pending real-client dogfooding and fresh review.
+
+Frozen source: `330d9848dcb4845ba9cb6ff2f958e368701c7d64`.
+
+- Package: **120,610 bytes packed / 385,248 bytes unpacked**.
+- SHA-256: `b7f74599743ba729e1c2ca6079ffa6c51d727fb16a8800f7e97335dde682e51f`.
+- Breadth and native-test lanes installed the same package hash.
+- Earlier measured main package: 89,891 packed / 353,134 unpacked bytes.
+- Change: +30,719 packed bytes / +32,114 unpacked bytes, mostly the terminal PNG.
+- Runtime source diff from `f4e906c`: three files, 115 lines added / 25 removed.
+- No runtime dependencies added. Reports and opt-in runners are under tests, not shipped.
+
+## What changed
+
+1. Enforce a real 1,000,000-byte aggregate owned-Markdown write limit, including nested documents,
+ oversized existing documents, and generated index growth. Previously the constant bounded reads.
+2. Recheck learning destinations at apply time, reject symlink paths and normalized index aliases,
+ bound index growth, and fix nested index links.
+3. Recognize ignored root AGENTS.md and CLAUDE.md as local instruction evidence. Explicit
+ sensitive-path exclusions still take precedence; ordinary ignored files remain excluded.
+4. Require repository-work context before reusing a task-route reference. HTTP route documentation
+ alone is not agent task routing.
+5. Replace the README flowchart with the supplied terminal excerpt and shorten duplicated prose.
+6. Add opt-in pinned-revision breadth, native-test and clean Linux runners.
+
+Ten regression tests bring the suite from 168 to 178 cases. Key failures were reproduced with
+failing tests before fixes. Source changes are split into focused local commits.
+
+## README and visual
+
+The opening, section structure, logo banner, and badges remain. Filter navigation replaces the
+restaurant example. The README distinguishes read-only context from start/finish, removes a long
+reviewer example and invented completion transcript, and labels the image as illustrative.
+
+- README: 1,514 to 1,436 whitespace-separated words including Markdown/code: **78 fewer words**.
+- Added `docs/assets/noxroot-terminal.png`: 594 x 867 pixels, 34,746 bytes, displayed at width 594.
+- Removed `docs/assets/noxroot-workflow.svg`, recoverable from Git.
+- Kept `docs/assets/noxroot-logo.svg` unchanged.
+- Native image inspection passed. Tests check PNG dimensions, README paths/caption and package
+ assets.
+- Browser responsive rendering remains unverified: local-file navigation was denied, with no bypass.
+ The illustration is not a captured or verified CLI run.
+
+## Thirty-repository method
+
+Each shallow checkout is pinned in the
+[final machine-readable report](results-2026-09-03-final.json). These are thirty new repositories
+relative to the earlier fifteen, not a count inflated by reruns.
+
+The runner hashes files before and after two previews plus context; checks determinism and the
+16,000-byte context budget; applies setup in disposable clones only; checks every changed path;
+repeats init; and inspects sync.
+
+The breadth lifecycle lane explicitly approves **zero commands**. Without committing, it starts one
+task, repeats start, finishes without a change, appends a harmless README newline, and finishes
+again. No-change completion must be blocked; an unverified diff must be incomplete with no
+documentation growth. This lane does not run project tests or measure feature quality.
+
+- 30/30 preview/context read-only and budget invariants passed; no incomplete-scan limit reported.
+- 29 initialized repeatably, changing only proposed paths.
+- Pluggy was refused without writes: distinct root instruction sources were not reconciled.
+- 27 exercised continuation, inferred finish, blocked no-change completion, and incomplete
+ unverified completion with unchanged documentation.
+- TanStack Query and nvim-lspconfig skipped lifecycle execution because their tracked setup edits
+ would require a commit. Setup checks still ran.
+- No model calls or commits in tested repositories. All clones and package scratch were removed.
+
+### Results
+
+New/patch excludes references. Doc lines are proposed Markdown growth. Context is selected bytes,
+not measured model tokens. Candidate checks are discovered commands, not successful test runs.
+
+| Repository | Files | New/patch | Doc lines | Context bytes | Check candidates | Lifecycle |
+| --------------------- | ----: | --------: | --------: | ------------: | ---------------: | ---------------------------- |
+| sindresorhus/p-limit | 16 | 7/0 | 48 | 13154 | 1 | continued; finish incomplete |
+| sindresorhus/p-queue | 24 | 7/0 | 48 | 11015 | 2 | continued; finish incomplete |
+| sindresorhus/execa | 644 | 7/0 | 48 | 15061 | 2 | continued; finish incomplete |
+| tj/commander.js | 216 | 7/0 | 49 | 13779 | 1 | continued; finish incomplete |
+| lukeed/kleur | 20 | 7/0 | 47 | 13119 | 2 | continued; finish incomplete |
+| fastify/fastify | 389 | 4/0 | 37 | 15820 | 0 | continued; finish incomplete |
+| koajs/koa | 111 | 7/0 | 47 | 15809 | 3 | continued; finish incomplete |
+| reduxjs/redux | 477 | 8/0 | 60 | 13637 | 5 | continued; finish incomplete |
+| pmndrs/zustand | 144 | 6/0 | 47 | 13375 | 0 | continued; finish incomplete |
+| TanStack/query | 2427 | 7/1 | 63 | 14697 | 38 | setup only |
+| pallets/click | 166 | 7/0 | 49 | 13561 | 3 | continued; finish incomplete |
+| pallets/itsdangerous | 50 | 7/0 | 47 | 13580 | 3 | continued; finish incomplete |
+| pallets/jinja | 107 | 7/0 | 47 | 13410 | 3 | continued; finish incomplete |
+| pydantic/pydantic | 589 | 7/0 | 49 | 15872 | 11 | continued; finish incomplete |
+| python-attrs/attrs | 140 | 7/0 | 49 | 13468 | 3 | continued; finish incomplete |
+| pytest-dev/pluggy | 79 | 0/0 | 0 | 8537 | 2 | refused |
+| BurntSushi/toml | 42 | 7/0 | 48 | 13241 | 4 | continued; finish incomplete |
+| go-chi/chi | 105 | 7/0 | 49 | 14598 | 3 | continued; finish incomplete |
+| rs/zerolog | 99 | 6/0 | 48 | 15083 | 4 | continued; finish incomplete |
+| stretchr/testify | 91 | 7/0 | 48 | 13541 | 3 | continued; finish incomplete |
+| junegunn/fzf | 161 | 7/0 | 48 | 13564 | 1 | continued; finish incomplete |
+| serde-rs/json | 92 | 7/0 | 48 | 13414 | 25 | continued; finish incomplete |
+| clap-rs/clap | 620 | 7/0 | 53 | 12622 | 5 | continued; finish incomplete |
+| sharkdp/bat | 909 | 7/0 | 49 | 13596 | 8 | continued; finish incomplete |
+| tokio-rs/axum | 498 | 7/0 | 48 | 14649 | 5 | continued; finish incomplete |
+| ruby/rake | 127 | 5/0 | 33 | 14833 | 0 | continued; finish incomplete |
+| sinatra/sinatra | 292 | 5/0 | 35 | 13353 | 0 | continued; finish incomplete |
+| slimphp/Slim | 145 | 5/0 | 35 | 14739 | 0 | continued; finish incomplete |
+| dorny/paths-filter | 32 | 7/0 | 47 | 14285 | 3 | continued; finish incomplete |
+| neovim/nvim-lspconfig | 892 | 4/1 | 33 | 12946 | 0 | setup only |
+
+### Exact capability decisions
+
+These are detector decisions, not a manual accuracy score. JSON includes evidence, missing evidence,
+exact proposed paths/actions, and command arguments/working directories.
+
+| Repository | Knowledge | Task routes | Verification policy | Verification skill | Orchestration | Product/UX |
+| --------------------- | --------- | ------------ | ------------------- | ------------------ | ------------- | ------------ |
+| sindresorhus/p-limit | reuse | create | create | create | create | not-assessed |
+| sindresorhus/p-queue | reuse | create | create | create | create | not-assessed |
+| sindresorhus/execa | reuse | create | create | create | create | not-assessed |
+| tj/commander.js | reuse | create | create | create | create | not-assessed |
+| lukeed/kleur | create | create | create | create | create | not-assessed |
+| fastify/fastify | reuse | not-assessed | not-assessed | not-assessed | create | not-assessed |
+| koajs/koa | create | create | create | create | create | not-assessed |
+| reduxjs/redux | reuse | create | create | create | create | create |
+| pmndrs/zustand | reuse | create | not-assessed | not-assessed | create | create |
+| TanStack/query | reuse | create | create | create | create | create |
+| pallets/click | reuse | create | create | create | create | not-assessed |
+| pallets/itsdangerous | create | create | create | create | create | not-assessed |
+| pallets/jinja | create | create | create | create | create | not-assessed |
+| pydantic/pydantic | reuse | create | create | create | create | not-assessed |
+| python-attrs/attrs | reuse | create | create | create | create | not-assessed |
+| pytest-dev/pluggy | reuse | create | create | create | create | not-assessed |
+| BurntSushi/toml | reuse | create | create | create | create | not-assessed |
+| go-chi/chi | reuse | create | create | create | create | not-assessed |
+| rs/zerolog | reuse | not-assessed | create | create | create | not-assessed |
+| stretchr/testify | reuse | create | create | create | create | not-assessed |
+| junegunn/fzf | reuse | create | create | create | create | not-assessed |
+| serde-rs/json | reuse | create | create | create | create | not-assessed |
+| clap-rs/clap | reuse | create | create | create | create | not-assessed |
+| sharkdp/bat | reuse | create | create | create | create | not-assessed |
+| tokio-rs/axum | reuse | create | create | create | create | not-assessed |
+| ruby/rake | create | create | not-assessed | not-assessed | create | not-assessed |
+| sinatra/sinatra | reuse | create | not-assessed | not-assessed | create | not-assessed |
+| slimphp/Slim | reuse | create | not-assessed | not-assessed | create | not-assessed |
+| dorny/paths-filter | create | create | create | create | create | not-assessed |
+| neovim/nvim-lspconfig | reuse | create | not-assessed | not-assessed | create | not-assessed |
+
+## Real findings
+
+**Fastify repeat setup:** its .gitignore excludes AGENTS.md. The first candidate created that file,
+then omitted it from the next scan and proposed creating it again. The write guard refused the
+second init; no overwrite occurred. A generic regression now covers ignored instructions, repeat
+setup and sensitive-path precedence. Original failing candidate:
+`ede83d936bfbbdf5334ab4cb55c9d8f5e210752a`, 120,464 packed bytes.
+
+**HTTP routes:** API documentation was being marked as reused task routing. After the fix, Fastify
+is conservatively not-assessed. Missing-reference diagnostics can still contain API/package
+snippets. No new routes are created for this unresolved capability; the reference classifier needs
+further precision, not a general parser.
+
+**Verification discovery:** some Fastify, Zustand, Ruby, PHP and Lua cases have zero candidates.
+This does not mean they have no tests. Package-manager ambiguity and unsupported tooling can prevent
+a usable plan. Explicit approved commands remain necessary where detection cannot establish one.
+
+**Coexistence:** differing root instruction files can cause refusal even if a human could reconcile
+them. Pluggy needs manual review; this test does not establish a genuine semantic contradiction. No
+coordinator integration was added.
+
+## Native tests: actual execution
+
+[Native report](native-results-2026-09-03-final.json) records dependency versions, commands, working
+directories, stdout/stderr and task results. Dependencies were temporary; Node installation skipped
+lifecycle scripts. These two cases are drawn from the thirty, not extra repositories.
+
+### ItsDangerous
+
+- Revision: `672971d66a2ef9f85151e53283113f33d642dabd`.
+- Baseline: **297 pytest tests passed**.
+- Request: test signer Unicode round trips.
+- Start selected signer.py, its matching test, verification skill, index, AGENTS.md and config:
+ 15,809 bytes, approximately 3,953 tokens by byte estimation.
+- Added one real regression test in `tests/test_itsdangerous/test_signer.py`.
+- Repeated start reused the task; finish inferred its ID.
+- Explicitly approved the isolated Python's `-m pytest -q`, cwd root. This differs from automatic uv
+ discovery and was an explicit test policy, not a silent substitution.
+- Finish ran **298 passing tests** and returned **completed**, not independently approved.
+- No learning candidate or knowledge document was added.
+- Subsequent context selected source and tests again, not raw task history.
+
+### Kleur
+
+- Revision: `fa3454483899ddab550d08c18c028e6db1aab0e5`.
+- Approved `npm run test`, cwd root.
+- Existing uvu/esm loading fails under Node 24 before tests run:
+ `SyntaxError: Cannot use import statement outside a module`.
+- The same failure occurred before and after the added Unicode styling test.
+- Noxroot continued/inferred the task, recorded exit 1, returned **failed**, and proposed no
+ learning. Upstream dependencies and tests were not rewritten to force a pass.
+
+## Six hundred sessions and growth
+
+The existing deterministic test creates 600 synthetic records, retains 100 while protecting running
+and incomplete records, and removes 500 eligible completed records. It ran in under one second on
+Linux. It does not launch six hundred model conversations.
+
+Task records stay separate from durable knowledge. New tests cover actual knowledge write bounds,
+including nested files and index overhead. Task context remains bounded separately.
+
+Important limits:
+
+- Protected unfinished/malformed records can exceed the nominal retention count.
+- The byte cap does not semantically curate or merge docs; signature deduplication is not semantic
+ duplicate detection.
+- The knowledge cap covers owned Markdown, not every document in the repository.
+- Concurrent writers and hostile filesystem races are not claimed to be transaction-safe.
+- This does not prove long-term usefulness or lower total agent cost.
+
+## Validation and release gates
+
+- Complete `npm run check`: formatting, lint, typecheck, tests, build, permission-restricted built
+ preview, and real tarball installation smoke on Windows and Linux.
+- Linux: 176 passed, two Windows-specific tests skipped (178 total).
+- Windows: 178 passed; complete check and real package smoke passed.
+- Local task `20260903-03f32457`: all five approved checks passed; status `review-pending`. Noxroot
+ requested a fresh code review and proposed no reusable learning.
+- Thirty pinned breadth cases and two native cases used the identical final tarball.
+- This agent reviewed the source diff, but **not independently**.
+- Standalone Claude/Codex CLI authentication was unavailable. Real automatic client invocation,
+ paired agent A/B runs, and a fresh model review remain unverified.
+- No universal automatic-agent-invocation claim or feature-quality score follows from these tests.
+
+Before npm publication: one real compatible-client task, then fresh review and fixes for concrete
+failures. Do not expand into hooks, coordinator bridges or semantic-memory machinery yet.
+
+## Reproduce and cleanup
+
+Build the source, then run in Linux/WSL:
+
+```bash
+node tests/acceptance/corpus.mjs /tmp/noxroot-results.json tests/acceptance/results-2026-09-03-final.json
+node tests/acceptance/native.mjs /tmp/noxroot-native-results.json
+node tests/acceptance/linux.mjs
+```
+
+The first two output reports are caller-owned; remove them after inspection. Runners clean their
+private clones, installations, environments and caches. One empty scratch directory left by an early
+shell-launch failure was inspected and removed explicitly. Obsolete intermediate reports are
+removed; final evidence is retained here. No workspace-parent artifacts or extra worktrees were
+created.
+
+Repository: `C:/Users/lione/Documents/ChatGPT/noxroot`. Branch: `agent/pre-npm-acceptance`. No
+tested external repository was committed or modified in place. No push, merge, publication or
+deployment occurred.
+
+Seven older Windows temporary package-smoke directories predated this slice and were left untouched:
+`C:/Users/lione/AppData/Local/Temp/noxroot-package-smoke-14jLkl`, `noxroot-package-smoke-DGDI0r`,
+`noxroot-package-smoke-DIJFCA`, `noxroot-package-smoke-hdr3MN`, `noxroot-package-smoke-KYGPKa`,
+`noxroot-package-smoke-qdWuD1`, and `noxroot-package-smoke-Zi9SsM` (all under that same Temp
+directory).
diff --git a/tests/acceptance/corpus.json b/tests/acceptance/corpus.json
new file mode 100644
index 0000000..d8975ec
--- /dev/null
+++ b/tests/acceptance/corpus.json
@@ -0,0 +1,148 @@
+[
+ {
+ "repo": "sindresorhus/p-limit",
+ "task": "preserve concurrency limits when clearing pending tasks",
+ "stack": "JavaScript"
+ },
+ {
+ "repo": "sindresorhus/p-queue",
+ "task": "preserve queue concurrency when a task is aborted",
+ "stack": "TypeScript"
+ },
+ {
+ "repo": "sindresorhus/execa",
+ "task": "handle subprocess cancellation without losing stderr",
+ "stack": "JavaScript"
+ },
+ {
+ "repo": "tj/commander.js",
+ "task": "validate required options and display helpful errors",
+ "stack": "JavaScript"
+ },
+ {
+ "repo": "lukeed/kleur",
+ "task": "preserve nested colors when formatting terminal text",
+ "stack": "JavaScript"
+ },
+ {
+ "repo": "fastify/fastify",
+ "task": "validate request schema before invoking a route handler",
+ "stack": "JavaScript"
+ },
+ {
+ "repo": "koajs/koa",
+ "task": "preserve middleware error handling when a response fails",
+ "stack": "JavaScript"
+ },
+ {
+ "repo": "reduxjs/redux",
+ "task": "preserve subscription ordering during dispatch",
+ "stack": "TypeScript"
+ },
+ {
+ "repo": "pmndrs/zustand",
+ "task": "preserve persisted state during hydration",
+ "stack": "React/TypeScript"
+ },
+ {
+ "repo": "TanStack/query",
+ "task": "invalidate query cache after a successful mutation",
+ "stack": "TypeScript monorepo"
+ },
+ {
+ "repo": "pallets/click",
+ "task": "validate command line options and show usage errors",
+ "stack": "Python"
+ },
+ {
+ "repo": "pallets/itsdangerous",
+ "task": "reject expired timestamp signatures",
+ "stack": "Python"
+ },
+ {
+ "repo": "pallets/jinja",
+ "task": "preserve template escaping for undefined values",
+ "stack": "Python"
+ },
+ {
+ "repo": "pydantic/pydantic",
+ "task": "preserve validator errors when parsing nested models",
+ "stack": "Python/Rust"
+ },
+ {
+ "repo": "python-attrs/attrs",
+ "task": "validate default attribute values in generated classes",
+ "stack": "Python"
+ },
+ {
+ "repo": "pytest-dev/pluggy",
+ "task": "preserve hook ordering when a plugin is unregistered",
+ "stack": "Python"
+ },
+ {
+ "repo": "BurntSushi/toml",
+ "task": "decode quoted TOML keys without losing type information",
+ "stack": "Go"
+ },
+ {
+ "repo": "go-chi/chi",
+ "task": "preserve route parameters through nested middleware",
+ "stack": "Go"
+ },
+ {
+ "repo": "rs/zerolog",
+ "task": "preserve structured fields when formatting log events",
+ "stack": "Go"
+ },
+ {
+ "repo": "stretchr/testify",
+ "task": "compare nested values in assertion failure messages",
+ "stack": "Go"
+ },
+ {
+ "repo": "junegunn/fzf",
+ "task": "preserve query selection when reloading results",
+ "stack": "Go/terminal"
+ },
+ {
+ "repo": "serde-rs/json",
+ "task": "report invalid JSON numbers with useful errors",
+ "stack": "Rust"
+ },
+ {
+ "repo": "clap-rs/clap",
+ "task": "validate conflicting command line arguments",
+ "stack": "Rust workspace"
+ },
+ {
+ "repo": "sharkdp/bat",
+ "task": "preserve syntax highlighting when paging a file",
+ "stack": "Rust"
+ },
+ {
+ "repo": "tokio-rs/axum",
+ "task": "preserve request extraction errors in routing",
+ "stack": "Rust workspace"
+ },
+ { "repo": "ruby/rake", "task": "invoke prerequisite tasks in dependency order", "stack": "Ruby" },
+ {
+ "repo": "sinatra/sinatra",
+ "task": "handle route errors without losing response headers",
+ "stack": "Ruby"
+ },
+ {
+ "repo": "slimphp/Slim",
+ "task": "preserve request routing and error middleware behavior",
+ "stack": "PHP"
+ },
+ {
+ "repo": "dorny/paths-filter",
+ "task": "match changed paths against exclusion rules",
+ "stack": "GitHub Action/TypeScript"
+ },
+ {
+ "repo": "neovim/nvim-lspconfig",
+ "task": "find language server root directories correctly",
+ "stack": "Lua"
+ }
+]
diff --git a/tests/acceptance/corpus.mjs b/tests/acceptance/corpus.mjs
new file mode 100644
index 0000000..c3f5c57
--- /dev/null
+++ b/tests/acceptance/corpus.mjs
@@ -0,0 +1,301 @@
+// Explicit, opt-in network acceptance run. Never part of npm test or the shipped CLI.
+import { spawnSync } from "node:child_process";
+import { createHash } from "node:crypto";
+import {
+ appendFile,
+ mkdir,
+ mkdtemp,
+ readFile,
+ readdir,
+ readlink,
+ rm,
+ writeFile,
+} from "node:fs/promises";
+import { tmpdir } from "node:os";
+import path from "node:path";
+
+const source = path.resolve(import.meta.dirname, "../..");
+const manifest = JSON.parse(await readFile(path.join(import.meta.dirname, "corpus.json"), "utf8"));
+const destination = process.argv[2];
+const previous = process.argv[3] ? JSON.parse(await readFile(process.argv[3], "utf8")) : undefined;
+if (!destination || process.platform === "win32")
+ throw new Error("Run in WSL/Linux and supply an output JSON path.");
+const scratch = await mkdtemp(path.join(tmpdir(), "noxroot-thirty-"));
+const env = {
+ ...process.env,
+ NO_COLOR: "1",
+ GIT_TERMINAL_PROMPT: "0",
+ npm_config_cache: path.join(scratch, "npm-cache"),
+};
+function run(executable, args, cwd = source, timeout = 120_000) {
+ const started = performance.now();
+ const result = spawnSync(executable, args, {
+ cwd,
+ env,
+ encoding: "utf8",
+ timeout,
+ maxBuffer: 16_000_000,
+ shell: false,
+ });
+ return {
+ code: result.status,
+ stdout: result.stdout ?? "",
+ stderr: result.stderr ?? result.error?.message ?? "",
+ ms: Math.round(performance.now() - started),
+ };
+}
+function required(executable, args, cwd, timeout) {
+ const result = run(executable, args, cwd, timeout);
+ if (result.code !== 0)
+ throw new Error(`${executable} failed (${result.code}): ${result.stderr.slice(0, 1500)}`);
+ return result.stdout;
+}
+function git(args, cwd) {
+ return required(
+ "git",
+ ["-c", "credential.helper=", "-c", "core.hooksPath=/dev/null", ...args],
+ cwd,
+ );
+}
+async function tree(root) {
+ const entries = {};
+ async function visit(relative) {
+ for (const entry of await readdir(path.join(root, relative), { withFileTypes: true })) {
+ if (entry.name === ".git") continue;
+ const name = path.posix.join(relative, entry.name);
+ if (entry.isSymbolicLink()) entries[name] = `link:${await readlink(path.join(root, name))}`;
+ else if (entry.isDirectory()) await visit(name);
+ else if (entry.isFile())
+ entries[name] = createHash("sha256")
+ .update(await readFile(path.join(root, name)))
+ .digest("hex");
+ }
+ }
+ await visit("");
+ return entries;
+}
+const same = (a, b) =>
+ JSON.stringify(Object.entries(a).sort()) === JSON.stringify(Object.entries(b).sort());
+const report = {
+ candidate: git(["rev-parse", "HEAD"]).trim(),
+ startedAt: new Date().toISOString(),
+ method:
+ "Sequential read-only preview/context, disposable init/sync, and no-authorized-checks lifecycle smoke. No application dependencies installed, native project commands executed, agent calls, or commits to tested repositories.",
+ results: [],
+ cleanup: false,
+};
+let cli;
+function invoke(root, args) {
+ const result = run(process.execPath, [cli, ...args, "--root", root, "--json"]);
+ try {
+ return { ...result, value: JSON.parse(result.stdout) };
+ } catch {
+ return { ...result, value: null };
+ }
+}
+function demand(value, message) {
+ if (!value) throw new Error(message);
+}
+
+try {
+ const packed = JSON.parse(
+ required("npm", ["pack", "--pack-destination", scratch, "--json", "--ignore-scripts"]),
+ )[0];
+ report.package = {
+ size: packed.size,
+ unpackedSize: packed.unpackedSize,
+ sha256: createHash("sha256")
+ .update(await readFile(path.join(scratch, packed.filename)))
+ .digest("hex"),
+ };
+ const tarballs = [path.join(scratch, packed.filename)];
+ for (const dependency of ["commander", "yaml", "zod"]) {
+ const info = JSON.parse(
+ required("npm", [
+ "pack",
+ path.join(source, "node_modules", dependency),
+ "--pack-destination",
+ scratch,
+ "--json",
+ "--ignore-scripts",
+ ]),
+ )[0];
+ tarballs.push(path.join(scratch, info.filename));
+ }
+ const install = path.join(scratch, "installed");
+ await mkdir(install);
+ await writeFile(path.join(install, "package.json"), '{"name":"acceptance-only","private":true}');
+ required(
+ "npm",
+ ["install", ...tarballs, "--offline", "--ignore-scripts", "--no-audit", "--no-fund"],
+ install,
+ );
+ cli = path.join(install, "node_modules/noxroot/dist/cli.js");
+ for (const [index, spec] of manifest.entries()) {
+ const root = path.join(scratch, `repo-${index}`);
+ const row = { ...spec, failures: [] };
+ try {
+ git([
+ "clone",
+ "--depth",
+ "1",
+ "--single-branch",
+ `https://github.com/${spec.repo}.git`,
+ root,
+ ]);
+ const pinned = previous?.results.find((item) => item.repo === spec.repo)?.revision;
+ if (pinned) {
+ git(["fetch", "--depth", "1", "origin", pinned], root);
+ git(["checkout", "--detach", pinned], root);
+ }
+ row.revision = git(["rev-parse", "HEAD"], root).trim();
+ const before = await tree(root);
+ const first = invoke(root, ["preview"]);
+ demand(
+ first.code === 0 && first.value?.kind === "preview",
+ "preview did not return valid JSON",
+ );
+ const preview = first.value;
+ const again = invoke(root, ["preview"]);
+ const context = invoke(root, ["context", spec.task]);
+ row.readOnly = same(before, await tree(root));
+ demand(row.readOnly, "read-only commands changed repository files");
+ row.previewMs = first.ms;
+ row.files = preview.profile.files.length;
+ row.limits = preview.profile.stats.incompleteReasons;
+ row.initializationAllowed = preview.initializationAllowed;
+ row.conflicts = preview.conflicts;
+ row.capabilities = preview.capabilities;
+ row.proposals = preview.proposedFiles.map(({ path, action }) => ({ path, action }));
+ row.growth = preview.setupImpact;
+ row.commands = preview.profile.candidateCommands;
+ row.deterministic =
+ JSON.stringify(preview.proposedFiles) === JSON.stringify(again.value?.proposedFiles) &&
+ JSON.stringify(preview.capabilities) === JSON.stringify(again.value?.capabilities);
+ if (!row.limits.length) demand(row.deterministic, "complete repeated previews differ");
+ demand(context.value?.budget, "context did not return a task package");
+ row.context = {
+ ms: context.ms,
+ confidence: context.value.confidence,
+ budget: context.value.budget,
+ selected: context.value.selected.map((item) => item.path),
+ owners: context.value.likelyOwningSource,
+ tests: context.value.likelyTests,
+ unknowns: context.value.unknowns,
+ };
+ demand(
+ row.context.budget.selectedBytes <= row.context.budget.maximumBytes,
+ "context exceeded its byte budget",
+ );
+ const initialized = invoke(root, ["init", "--yes"]);
+ if (!preview.initializationAllowed) {
+ row.init = "refused";
+ demand(
+ initialized.code !== 0 && same(before, await tree(root)),
+ "refused init wrote files or succeeded",
+ );
+ } else {
+ demand(initialized.code === 0, `init failed: ${initialized.stderr}`);
+ const after = await tree(root);
+ const permitted = new Set(row.proposals.map((item) => item.path));
+ row.changedPaths = Object.keys({ ...before, ...after }).filter(
+ (file) => before[file] !== after[file],
+ );
+ demand(
+ row.changedPaths.every((file) => permitted.has(file)),
+ "init changed a non-proposed path",
+ );
+ const secondInit = invoke(root, ["init", "--yes"]);
+ row.idempotent = secondInit.code === 0 && same(after, await tree(root));
+ demand(
+ row.idempotent,
+ secondInit.code !== 0
+ ? `second init failed: ${secondInit.stderr.slice(0, 500)}`
+ : "second init changed setup",
+ );
+ const sync = invoke(root, ["sync", "--dry-run"]);
+ row.syncProposals = sync.value?.preview?.proposedFiles?.length ?? null;
+ row.init = "applied-only-proposed-files";
+ // Explicit zero-execution policy for the breadth lane, NOT an app verification pass.
+ await mkdir(path.join(root, ".noxroot"), { recursive: true });
+ await writeFile(path.join(root, ".noxroot/verification.yml"), "version: 1\ncommands: []\n");
+ await appendFile(path.join(root, ".git/info/exclude"), "\n/.noxroot/\n/AGENTS.md\n");
+ const dirty = git(["status", "--porcelain"], root).trim();
+ if (dirty)
+ row.lifecycle = {
+ skipped:
+ "Tracked setup edits require a commit; this test does not commit to external repositories.",
+ };
+ else {
+ const started = invoke(root, ["start", spec.task]);
+ if (!started.value?.record) row.lifecycle = { skipped: started.value ?? started.stderr };
+ else {
+ const continued = invoke(root, ["start", spec.task]);
+ demand(
+ continued.value?.continued === true &&
+ continued.value.record.id === started.value.record.id,
+ "duplicate task on continuation",
+ );
+ const noChange = invoke(root, ["finish"]);
+ demand(
+ noChange.value?.record?.status === "blocked",
+ "no-change finish should be blocked",
+ );
+ const editable = Object.keys(before).find(
+ (file) => /^readme(?:\.md|\.rst)?$/i.test(file) && !before[file].startsWith("link:"),
+ );
+ if (!editable)
+ row.lifecycle = {
+ continued: true,
+ noChange: "blocked",
+ skipped: "No root README for the harmless changed-diff probe.",
+ };
+ else {
+ await appendFile(path.join(root, editable), "\n");
+ const memoryBefore = await tree(path.join(root, ".noxroot"));
+ const finished = invoke(root, ["finish"]);
+ demand(
+ finished.value?.record?.status === "incomplete",
+ "no-authorized-checks finish should be incomplete, never approved",
+ );
+ demand(
+ finished.value.record.id === started.value.record.id,
+ "finish did not infer the active task",
+ );
+ demand(
+ same(memoryBefore, await tree(path.join(root, ".noxroot"))),
+ "incomplete finish grew project documentation",
+ );
+ row.lifecycle = {
+ continued: true,
+ noChange: "blocked",
+ changedDiff: "incomplete",
+ finishInferred: true,
+ documentationUnchanged: true,
+ agentCalls: finished.value.record.calls.length,
+ };
+ }
+ }
+ }
+ }
+ } catch (error) {
+ row.failures.push(error.message);
+ } finally {
+ // Each target is constructed beneath this process's private mkdtemp root.
+ demand(path.dirname(root) === scratch, "unsafe cleanup target");
+ await rm(root, { recursive: true, force: true });
+ }
+ report.results.push(row);
+ console.log(
+ `${index + 1}/30 ${spec.repo}: ${row.failures.length ? row.failures.join("; ") : "checks complete"}`,
+ );
+ }
+} finally {
+ await rm(scratch, { recursive: true, force: true });
+ report.cleanup = true;
+ report.finishedAt = new Date().toISOString();
+ await mkdir(path.dirname(path.resolve(destination)), { recursive: true });
+ await writeFile(destination, `${JSON.stringify(report, null, 2)}\n`);
+}
+if (report.results.length !== 30 || report.results.some((row) => row.failures.length))
+ process.exitCode = 1;
diff --git a/tests/acceptance/linux.mjs b/tests/acceptance/linux.mjs
new file mode 100644
index 0000000..950cf3e
--- /dev/null
+++ b/tests/acceptance/linux.mjs
@@ -0,0 +1,25 @@
+// Run the complete suite from a clean committed tree in a disposable Linux directory.
+import { spawnSync } from "node:child_process";
+import { mkdir, mkdtemp, rm } from "node:fs/promises";
+import path from "node:path";
+if (process.platform === "win32") throw Error("Run in WSL/Linux.");
+const source = path.resolve(import.meta.dirname, "../..");
+const scratch = await mkdtemp("/tmp/noxroot-linux-check-");
+const workspace = path.join(scratch, "workspace");
+try {
+ await mkdir(workspace);
+ const archive = spawnSync("git", ["archive", "HEAD"], { cwd: source, maxBuffer: 16_000_000 });
+ if (archive.status !== 0) throw Error("Cannot archive the committed tree");
+ const unpack = spawnSync("tar", ["-x", "-C", workspace], { input: archive.stdout });
+ if (unpack.status !== 0) throw Error("Cannot unpack the committed tree");
+ for (const args of [
+ ["ci", "--ignore-scripts", "--no-audit", "--no-fund", "--cache", path.join(scratch, "cache")],
+ ["run", "check"],
+ ]) {
+ const result = spawnSync("npm", args, { cwd: workspace, stdio: "inherit", timeout: 300_000 });
+ if (result.status !== 0) throw Error(`npm ${args.join(" ")} failed (${result.status})`);
+ }
+} finally {
+ await rm(scratch, { recursive: true, force: true });
+ console.log("Removed the isolated Linux validation tree and package cache.");
+}
diff --git a/tests/acceptance/native-results-2026-09-03-final.json b/tests/acceptance/native-results-2026-09-03-final.json
new file mode 100644
index 0000000..466cfb4
--- /dev/null
+++ b/tests/acceptance/native-results-2026-09-03-final.json
@@ -0,0 +1,299 @@
+{
+ "candidate": "330d9848dcb4845ba9cb6ff2f958e368701c7d64",
+ "method": "Native upstream tests plus one added regression test, not an autonomous feature implementation or independent review.",
+ "results": [
+ {
+ "repo": "lukeed/kleur",
+ "revision": "fa3454483899ddab550d08c18c028e6db1aab0e5",
+ "discoveredCommands": [
+ {
+ "id": "build",
+ "executable": "npm",
+ "args": ["run", "build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["bench/**", "test/**", "*.mjs", "*.ts", "package.json"]
+ }
+ ],
+ "dependencies": {
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "overridden": false
+ },
+ "uvu": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.3.3.tgz",
+ "overridden": false
+ }
+ },
+ "approvedCommand": {
+ "id": "native-tests",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "timeoutMs": 120000,
+ "appliesTo": ["**/*"]
+ },
+ "baseline": {
+ "code": 1,
+ "stdout": "\n> kleur@4.1.5 test\n> uvu -r esm -i utils -i xyz\n\n",
+ "stderr": "/tmp/noxroot-native-lFo5RP/kleur/test/colors.js:1\n(function (exports, require, module, __filename, __dirname) { import { test } from 'uvu';\n ^^^^^^\n\nSyntaxError: Cannot use import statement outside a module\n\u001b[90m at makeContextifyScript (node:internal/vm:194:14)\u001b[39m\n\u001b[90m at wrapSafe (node:internal/modules/cjs/loader:1768:20)\u001b[39m\n\u001b[90m at Module._compile (node:internal/modules/cjs/loader:1846:20)\u001b[39m\n\u001b[90m at Object..js (node:internal/modules/cjs/loader:2003:10)\u001b[39m\n\u001b[90m at Module.load (node:internal/modules/cjs/loader:1594:32)\u001b[39m\n\u001b[90m at Module._load (node:internal/modules/cjs/loader:1396:12)\u001b[39m\n\u001b[90m at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\u001b[39m\n\u001b[90m at Module.require (node:internal/modules/cjs/loader:1617:12)\u001b[39m\n\u001b[90m at require (node:internal/modules/helpers:153:16)\u001b[39m\n at \u001b[90m/tmp/noxroot-native-lFo5RP/kleur/\u001b[39mnode_modules/\u001b[4muvu\u001b[24m/bin.js:23:4\n\nNode.js v24.19.0\n"
+ },
+ "context": {
+ "selected": [
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/knowledge/INDEX.md",
+ "AGENTS.md",
+ ".noxroot/config.yml",
+ "test/env.sh",
+ "test/utils.js",
+ "test/xyz.js",
+ "bench/package.json",
+ "package.json"
+ ],
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 7203,
+ "estimatedTokens": 1801
+ }
+ },
+ "continued": true,
+ "status": "failed",
+ "finishInferred": true,
+ "completion": {
+ "documentation": {
+ "status": "not-assessed",
+ "reason": "No deterministic documentation signal was produced."
+ },
+ "learning": {
+ "status": "no-candidate",
+ "proposals": 0
+ }
+ },
+ "learning": {
+ "taskId": "20260903-4fa66310",
+ "proposals": [],
+ "rejected": [],
+ "message": "No durable learning identified"
+ },
+ "verification": [
+ [
+ {
+ "command": {
+ "id": "native-tests",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "timeoutMs": 120000,
+ "appliesTo": ["**/*"]
+ },
+ "evidence": {
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": "/tmp/noxroot-native-lFo5RP/kleur",
+ "startedAt": "2026-09-03T20:04:12.339Z",
+ "endedAt": "2026-09-03T20:04:12.498Z",
+ "durationMs": 159,
+ "exitCode": 1,
+ "signal": null,
+ "timedOut": false,
+ "stdout": "\n> kleur@4.1.5 test\n> uvu -r esm -i utils -i xyz\n\n",
+ "stderr": "/tmp/noxroot-native-lFo5RP/kleur/test/colors.js:1\n(function (exports, require, module, __filename, __dirname) { import { test } from 'uvu';\n ^^^^^^\n\nSyntaxError: Cannot use import statement outside a module\n\u001b[90m at makeContextifyScript (node:internal/vm:194:14)\u001b[39m\n\u001b[90m at wrapSafe (node:internal/modules/cjs/loader:1768:20)\u001b[39m\n\u001b[90m at Module._compile (node:internal/modules/cjs/loader:1846:20)\u001b[39m\n\u001b[90m at Object..js (node:internal/modules/cjs/loader:2003:10)\u001b[39m\n\u001b[90m at Module.load (node:internal/modules/cjs/loader:1594:32)\u001b[39m\n\u001b[90m at Module._load (node:internal/modules/cjs/loader:1396:12)\u001b[39m\n\u001b[90m at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\u001b[39m\n\u001b[90m at Module.require (node:internal/modules/cjs/loader:1617:12)\u001b[39m\n\u001b[90m at require (node:internal/modules/helpers:153:16)\u001b[39m\n at \u001b[90m/tmp/noxroot-native-lFo5RP/kleur/\u001b[39mnode_modules/\u001b[4muvu\u001b[24m/bin.js:23:4\n\nNode.js v24.19.0\n",
+ "outputTruncated": false
+ },
+ "status": "failed"
+ }
+ ]
+ ],
+ "changedFiles": ["test/index.js"],
+ "nextContext": [
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/knowledge/INDEX.md",
+ "AGENTS.md",
+ ".noxroot/config.yml",
+ "test/env.sh",
+ "test/utils.js",
+ "test/xyz.js",
+ "bench/package.json",
+ "package.json"
+ ]
+ },
+ {
+ "repo": "pallets/itsdangerous",
+ "revision": "672971d66a2ef9f85151e53283113f33d642dabd",
+ "discoveredCommands": [
+ {
+ "id": "mypy",
+ "executable": "uv",
+ "args": ["run", "mypy", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.mypy]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "pytest",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.pytest]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "dependencies": [
+ {
+ "name": "flit_core",
+ "version": "3.12.0"
+ },
+ {
+ "name": "freezegun",
+ "version": "1.5.5"
+ },
+ {
+ "name": "iniconfig",
+ "version": "2.3.0"
+ },
+ {
+ "name": "itsdangerous",
+ "version": "2.3.0.dev0",
+ "editable_project_location": "/tmp/noxroot-native-lFo5RP/itsdangerous"
+ },
+ {
+ "name": "packaging",
+ "version": "26.3"
+ },
+ {
+ "name": "pip",
+ "version": "24.0"
+ },
+ {
+ "name": "pluggy",
+ "version": "1.6.0"
+ },
+ {
+ "name": "Pygments",
+ "version": "2.21.0"
+ },
+ {
+ "name": "pytest",
+ "version": "9.1.1"
+ },
+ {
+ "name": "python-dateutil",
+ "version": "2.9.0.post0"
+ },
+ {
+ "name": "six",
+ "version": "1.17.0"
+ }
+ ],
+ "approvedCommand": {
+ "id": "native-tests",
+ "executable": "/tmp/noxroot-native-lFo5RP/itsdangerous/.venv/bin/python",
+ "args": ["-m", "pytest", "-q"],
+ "cwd": ".",
+ "timeoutMs": 120000,
+ "appliesTo": ["**/*"]
+ },
+ "baseline": {
+ "code": 0,
+ "stdout": "........................................................................ [ 24%]\n........................................................................ [ 48%]\n........................................................................ [ 72%]\n........................................................................ [ 96%]\n......... [100%]\n297 passed in 0.52s\n",
+ "stderr": ""
+ },
+ "context": {
+ "selected": [
+ "src/itsdangerous/signer.py",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/knowledge/INDEX.md",
+ "AGENTS.md",
+ ".noxroot/config.yml",
+ "tests/test_itsdangerous/test_signer.py"
+ ],
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 15809,
+ "estimatedTokens": 3953
+ }
+ },
+ "continued": true,
+ "status": "completed",
+ "finishInferred": true,
+ "completion": {
+ "documentation": {
+ "status": "not-assessed",
+ "reason": "No deterministic documentation signal was produced."
+ },
+ "learning": {
+ "status": "no-candidate",
+ "proposals": 0
+ }
+ },
+ "learning": {
+ "taskId": "20260903-6e301cda",
+ "proposals": [],
+ "rejected": [],
+ "message": "No durable learning identified"
+ },
+ "verification": [
+ [
+ {
+ "command": {
+ "id": "native-tests",
+ "executable": "/tmp/noxroot-native-lFo5RP/itsdangerous/.venv/bin/python",
+ "args": ["-m", "pytest", "-q"],
+ "cwd": ".",
+ "timeoutMs": 120000,
+ "appliesTo": ["**/*"]
+ },
+ "evidence": {
+ "executable": "/tmp/noxroot-native-lFo5RP/itsdangerous/.venv/bin/python",
+ "args": ["-m", "pytest", "-q"],
+ "cwd": "/tmp/noxroot-native-lFo5RP/itsdangerous",
+ "startedAt": "2026-09-03T20:04:19.564Z",
+ "endedAt": "2026-09-03T20:04:20.182Z",
+ "durationMs": 618,
+ "exitCode": 0,
+ "signal": null,
+ "timedOut": false,
+ "stdout": "........................................................................ [ 24%]\n........................................................................ [ 48%]\n........................................................................ [ 72%]\n........................................................................ [ 96%]\n.......... [100%]\n298 passed in 0.47s\n",
+ "stderr": "",
+ "outputTruncated": false
+ },
+ "status": "passed"
+ }
+ ]
+ ],
+ "changedFiles": ["tests/test_itsdangerous/test_signer.py"],
+ "nextContext": [
+ "src/itsdangerous/signer.py",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/knowledge/INDEX.md",
+ "AGENTS.md",
+ ".noxroot/config.yml",
+ "tests/test_itsdangerous/test_signer.py"
+ ]
+ }
+ ],
+ "cleanup": true,
+ "package": {
+ "size": 120610,
+ "unpackedSize": 385248,
+ "sha256": "b7f74599743ba729e1c2ca6079ffa6c51d727fb16a8800f7e97335dde682e51f"
+ }
+}
diff --git a/tests/acceptance/native.mjs b/tests/acceptance/native.mjs
new file mode 100644
index 0000000..395c5cb
--- /dev/null
+++ b/tests/acceptance/native.mjs
@@ -0,0 +1,198 @@
+// Opt-in native test lane, using inspected upstream tests and disposable checkouts.
+import { spawnSync } from "node:child_process";
+import { createHash } from "node:crypto";
+import { appendFile, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
+import path from "node:path";
+const source = path.resolve(import.meta.dirname, "../..");
+const destination = process.argv[2];
+if (!destination || process.platform === "win32") throw Error("Use WSL/Linux and an output path.");
+const scratch = await mkdtemp("/tmp/noxroot-native-");
+const previous = JSON.parse(
+ await readFile(path.join(import.meta.dirname, "results-2026-09-03-final.json"), "utf8"),
+);
+const env = Object.fromEntries(
+ ["PATH", "HOME", "LANG", "TMPDIR"].filter((k) => process.env[k]).map((k) => [k, process.env[k]]),
+);
+env.npm_config_cache = path.join(scratch, "npm-cache");
+env.GIT_TERMINAL_PROMPT = "0";
+function run(executable, args, cwd = source) {
+ const result = spawnSync(executable, args, {
+ cwd,
+ env,
+ encoding: "utf8",
+ timeout: 180000,
+ maxBuffer: 8_000_000,
+ });
+ return {
+ code: result.status,
+ stdout: result.stdout ?? "",
+ stderr: result.stderr ?? result.error?.message ?? "",
+ };
+}
+function required(executable, args, cwd) {
+ const r = run(executable, args, cwd);
+ if (r.code !== 0) throw Error(`${executable}: ${(r.stderr || r.stdout).slice(-2000)}`);
+ return r.stdout;
+}
+function git(args, cwd) {
+ return required(
+ "git",
+ ["-c", "credential.helper=", "-c", "core.hooksPath=/dev/null", ...args],
+ cwd,
+ );
+}
+let cli;
+function invoke(root, args) {
+ const r = run(process.execPath, [cli, ...args, "--root", root, "--json"]);
+ try {
+ return { ...r, value: JSON.parse(r.stdout) };
+ } catch {
+ throw Error(r.stderr || r.stdout);
+ }
+}
+const report = {
+ candidate: git(["rev-parse", "HEAD"]).trim(),
+ method:
+ "Native upstream tests plus one added regression test, not an autonomous feature implementation or independent review.",
+ results: [],
+ cleanup: false,
+};
+try {
+ const packed = JSON.parse(
+ required("npm", ["pack", "--pack-destination", scratch, "--json", "--ignore-scripts"]),
+ )[0];
+ report.package = {
+ size: packed.size,
+ unpackedSize: packed.unpackedSize,
+ sha256: createHash("sha256")
+ .update(await readFile(path.join(scratch, packed.filename)))
+ .digest("hex"),
+ };
+ const tarballs = [path.join(scratch, packed.filename)];
+ for (const dependency of ["commander", "yaml", "zod"]) {
+ const p = JSON.parse(
+ required("npm", [
+ "pack",
+ path.join(source, "node_modules", dependency),
+ "--pack-destination",
+ scratch,
+ "--json",
+ "--ignore-scripts",
+ ]),
+ )[0];
+ tarballs.push(path.join(scratch, p.filename));
+ }
+ const installed = path.join(scratch, "installed");
+ await mkdir(installed);
+ await writeFile(path.join(installed, "package.json"), '{"name":"native-only","private":true}');
+ required(
+ "npm",
+ ["install", ...tarballs, "--offline", "--ignore-scripts", "--no-audit", "--no-fund"],
+ installed,
+ );
+ cli = path.join(installed, "node_modules/noxroot/dist/cli.js");
+ for (const repo of ["lukeed/kleur", "pallets/itsdangerous"]) {
+ const revision = previous.results.find((r) => r.repo === repo).revision;
+ const root = path.join(scratch, repo.split("/")[1]);
+ const row = { repo, revision };
+ try {
+ git(["clone", "--depth", "1", `https://github.com/${repo}.git`, root], scratch);
+ git(["fetch", "--depth", "1", "origin", revision], root);
+ git(["checkout", "--detach", revision], root);
+ const preview = invoke(root, ["preview"]).value;
+ row.discoveredCommands = preview.profile.candidateCommands;
+ if (!preview.initializationAllowed) throw Error("Initialization refused");
+ if (invoke(root, ["init", "--yes"]).code !== 0) throw Error("Initialization failed");
+ await appendFile(path.join(root, ".git/info/exclude"), "\n/.noxroot/\n/AGENTS.md\n/.venv/\n");
+ let executable, args, target, addition;
+ if (repo.endsWith("kleur")) {
+ required(
+ "npm",
+ ["install", "--ignore-scripts", "--no-package-lock", "--no-audit", "--no-fund"],
+ root,
+ );
+ row.dependencies = JSON.parse(required("npm", ["ls", "--json"], root)).dependencies;
+ executable = "npm";
+ args = ["run", "test"];
+ target = "test/index.js";
+ addition =
+ "\ntest('acceptance: disabled styling preserves Unicode', () => {\n kleur.enabled = false;\n assert.is(kleur.red('café'), 'café');\n});\n";
+ } else {
+ required("python3", ["-m", "venv", path.join(root, ".venv")], root);
+ executable = path.join(root, ".venv/bin/python");
+ required(
+ executable,
+ ["-m", "pip", "install", "--no-cache-dir", "pytest", "freezegun", "flit_core<4"],
+ root,
+ );
+ required(
+ executable,
+ ["-m", "pip", "install", "--no-cache-dir", "--no-build-isolation", "-e", "."],
+ root,
+ );
+ row.dependencies = JSON.parse(
+ required(executable, ["-m", "pip", "list", "--format=json"], root),
+ );
+ args = ["-m", "pytest", "-q"];
+ target = "tests/test_itsdangerous/test_signer.py";
+ addition =
+ "\n\ndef test_unicode_round_trip_acceptance():\n signer = Signer('acceptance-fixture-only')\n value = 'café'.encode('utf-8')\n assert signer.unsign(signer.sign(value)) == value\n";
+ }
+ row.approvedCommand = {
+ id: "native-tests",
+ executable,
+ args,
+ cwd: ".",
+ timeoutMs: 120000,
+ appliesTo: ["**/*"],
+ };
+ await writeFile(
+ path.join(root, ".noxroot/verification.yml"),
+ JSON.stringify({ version: 1, commands: [row.approvedCommand] }),
+ );
+ if (git(["status", "--porcelain"], root).trim())
+ throw Error("Setup left tracked changes; no external repository commits allowed");
+ row.baseline = run(executable, args, root);
+ row.baseline.stdout = row.baseline.stdout.slice(-2000);
+ row.baseline.stderr = row.baseline.stderr.slice(-2000);
+ const task = repo.endsWith("kleur")
+ ? "test disabled styling preserves Unicode"
+ : "test signer Unicode round trip";
+ const started = invoke(root, ["start", task]);
+ if (!started.value.record) throw Error("Start refused");
+ row.context = {
+ selected: started.value.context.selected.map((f) => f.path),
+ budget: started.value.context.budget,
+ };
+ const original = await readFile(path.join(root, target), "utf8");
+ await writeFile(
+ path.join(root, target),
+ repo.endsWith("kleur")
+ ? original.replace("test.run();", addition + "\ntest.run();")
+ : original + addition,
+ );
+ const continued = invoke(root, ["start", task]);
+ row.continued =
+ continued.value.continued === true && continued.value.record.id === started.value.record.id;
+ const finished = invoke(root, ["finish"]);
+ row.status = finished.value.record?.status;
+ row.finishInferred = finished.value.record?.id === started.value.record.id;
+ row.completion = finished.value.completion;
+ row.learning = finished.value.learning;
+ row.verification = finished.value.record?.verification;
+ row.changedFiles = git(["diff", "--name-only"], root).trim().split("\n");
+ row.nextContext = invoke(root, ["context", task]).value.selected.map((f) => f.path);
+ console.log(`${repo}: baseline ${row.baseline.code}, finish ${row.status}`);
+ } catch (error) {
+ row.error = error.message;
+ console.log(`${repo}: ${row.error}`);
+ } finally {
+ await rm(root, { recursive: true, force: true });
+ }
+ report.results.push(row);
+ }
+} finally {
+ await rm(scratch, { recursive: true, force: true });
+ report.cleanup = true;
+ await writeFile(destination, JSON.stringify(report, null, 2) + "\n");
+}
diff --git a/tests/acceptance/results-2026-09-03-final.json b/tests/acceptance/results-2026-09-03-final.json
new file mode 100644
index 0000000..10dc5d7
--- /dev/null
+++ b/tests/acceptance/results-2026-09-03-final.json
@@ -0,0 +1,5623 @@
+{
+ "candidate": "330d9848dcb4845ba9cb6ff2f958e368701c7d64",
+ "startedAt": "2026-09-03T20:03:50.756Z",
+ "method": "Sequential read-only preview/context, disposable init/sync, and no-authorized-checks lifecycle smoke. No application dependencies installed, native project commands executed, agent calls, or commits to tested repositories.",
+ "results": [
+ {
+ "repo": "sindresorhus/p-limit",
+ "task": "preserve concurrency limits when clearing pending tasks",
+ "stack": "JavaScript",
+ "failures": [],
+ "revision": "783068bb9e967fd7bea8642e1bf5a3627fe38bdf",
+ "readOnly": true,
+ "previewMs": 149,
+ "files": 16,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [".github/security.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".github/security.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 112,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["scripts/**", "*.js", "*.ts", "package.json"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 158,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13154,
+ "estimatedTokens": 3289
+ },
+ "selected": ["index.d.ts", "readme.md", "index.js"],
+ "owners": ["index.d.ts", "index.js"],
+ "tests": [],
+ "unknowns": ["Directly related test path", "Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "sindresorhus/p-queue",
+ "task": "preserve queue concurrency when a task is aborted",
+ "stack": "TypeScript",
+ "failures": [],
+ "revision": "180ab9e25cd10b6f548767d7176076b50d25e188",
+ "readOnly": true,
+ "previewMs": 150,
+ "files": 24,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [".github/security.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".github/security.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 125,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "build",
+ "executable": "npm",
+ "args": ["run", "build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["source/**", "test-d/**", "test/**", "*.ts", "package.json"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 171,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 11015,
+ "estimatedTokens": 2754
+ },
+ "selected": [
+ "source/priority-queue.ts",
+ "test/priority-queue.ts",
+ "source/queue.ts",
+ "package.json"
+ ],
+ "owners": ["source/priority-queue.ts", "source/queue.ts"],
+ "tests": ["test/priority-queue.ts"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "sindresorhus/execa",
+ "task": "handle subprocess cancellation without losing stderr",
+ "stack": "JavaScript",
+ "failures": [],
+ "revision": "8017b279e19347efaf2587711c2d57dbd4330740",
+ "readOnly": true,
+ "previewMs": 232,
+ "files": 644,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [".github/security.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".github/security.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 128,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "lint",
+ "executable": "npm",
+ "args": ["run", "lint"],
+ "cwd": ".",
+ "source": "package.json scripts.lint",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": [
+ "lib/**",
+ "test-d/**",
+ "test/**",
+ "types/**",
+ "*.js",
+ "*.ts",
+ "package.json"
+ ]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 391,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 15061,
+ "estimatedTokens": 3766
+ },
+ "selected": [
+ "lib/stdio/handle.js",
+ "lib/resolve/wait-subprocess.js",
+ "test/stdio/handle-normal.js"
+ ],
+ "owners": [
+ "lib/stdio/handle.js",
+ "lib/resolve/wait-subprocess.js",
+ "lib/stdio/handle-async.js",
+ "lib/stdio/handle-sync.js",
+ "test-d/subprocess/subprocess.test-d.ts"
+ ],
+ "tests": [
+ "test/stdio/handle-normal.js",
+ "test/stdio/handle-options.js",
+ "test/resolve/wait-subprocess.js",
+ "test/stdio/handle-invalid.js"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "tj/commander.js",
+ "task": "validate required options and display helpful errors",
+ "stack": "JavaScript",
+ "failures": [],
+ "revision": "ba6d13ddb4243e5913367734f8c159089ffe7834",
+ "readOnly": true,
+ "previewMs": 191,
+ "files": 216,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [
+ "3 symbolic link(s) were not followed: tests/fixtures/another-dir/pm, tests/fixtures/other-dir/pm, tests/fixtures/pmlink"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md", "SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 119,
+ "documentationNetLines": 49
+ },
+ "commands": [
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["examples/**", "lib/**", "tests/**", "typings/**", "*.js", "package.json"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 266,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13779,
+ "estimatedTokens": 3445
+ },
+ "selected": ["lib/option.js", "lib/error.js", "tests/options.required.test.js"],
+ "owners": ["lib/option.js", "lib/error.js"],
+ "tests": [
+ "tests/options.required.test.js",
+ "tests/options.mandatory.test.js",
+ "tests/command.showHelpAfterError.test.js",
+ "tests/options.variadic.test.js",
+ "tests/command.parseOptions.test.js"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "lukeed/kleur",
+ "task": "preserve nested colors when formatting terminal text",
+ "stack": "JavaScript",
+ "failures": [],
+ "revision": "fa3454483899ddab550d08c18c028e6db1aab0e5",
+ "readOnly": true,
+ "previewMs": 151,
+ "files": 20,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 122,
+ "documentationNetLines": 47
+ },
+ "commands": [
+ {
+ "id": "build",
+ "executable": "npm",
+ "args": ["run", "build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["bench/**", "test/**", "*.mjs", "*.ts", "package.json"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 156,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13119,
+ "estimatedTokens": 3280
+ },
+ "selected": ["colors.mjs", "test/env.sh", "readme.md", "colors.d.ts", "bench/package.json"],
+ "owners": ["colors.mjs", "colors.d.ts"],
+ "tests": ["test/env.sh"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "fastify/fastify",
+ "task": "validate request schema before invoking a route handler",
+ "stack": "JavaScript",
+ "failures": [],
+ "revision": "3aa8dfd7298c6e02399a7b3c29c637eb092dc9ef",
+ "readOnly": true,
+ "previewMs": 364,
+ "files": 389,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [
+ "JavaScript package manager: .github/workflows/backport.yml, .github/workflows/ci-alternative-runtime.yml, .github/workflows/ci.yml, .github/workflows/citgm-package.yml, .github/workflows/citgm.yml, .github/workflows/coverage-nix.yml, .github/workflows/coverage-win.yml, .github/workflows/integration-alternative-runtimes.yml, .github/workflows/integration.yml, .github/workflows/labeler.yml, .github/workflows/links-check.yml, .github/workflows/lint-ecosystem-order.yml"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [
+ "CONTRIBUTING.md",
+ "SECURITY.md",
+ "docs/Guides/Contributing.md",
+ "docs/Guides/Testing.md"
+ ],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "Referenced path was not available: docs/Reference/app.get('/', () => { throw new Error('kaboom') })",
+ "Referenced path was not available: docs/Reference/.get/.post/.etc",
+ "Referenced path was not available: docs/Guides/@fastify/routes",
+ "Referenced path was not available: docs/Guides/@fastify/routes-stats",
+ "Referenced path was not available: docs/Guides/@jerome1337/fastify-enforce-routes-pattern"
+ ]
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "No authoritative verification wrapper or candidate checks were found."
+ ]
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Verification behavior was not assessed."]
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "docs/Guides/Testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": "docs/Guides/Contributing.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 4,
+ "patchedFiles": 0,
+ "referencedFiles": 4,
+ "netLines": 71,
+ "documentationNetLines": 37
+ },
+ "commands": [],
+ "deterministic": true,
+ "context": {
+ "ms": 454,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 15820,
+ "estimatedTokens": 3955
+ },
+ "selected": ["types/request.d.ts", "scripts/validate-ecosystem-links.js", "lib/schemas.js"],
+ "owners": [
+ "types/request.d.ts",
+ "lib/route.js",
+ "lib/handle-request.js",
+ "lib/request.js",
+ "types/route.d.ts"
+ ],
+ "tests": [
+ "test/schema-validation.test.js",
+ "test/internals/request-validate.test.js",
+ "test/schema-serialization.test.js",
+ "test/types/request.tst.ts",
+ "test/types/route.tst.ts"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/skills/independent-review/SKILL.md",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "koajs/koa",
+ "task": "preserve middleware error handling when a response fails",
+ "stack": "JavaScript",
+ "failures": [],
+ "revision": "571938d1b42d5bbfbc4f203202e1095a63003f7e",
+ "readOnly": true,
+ "previewMs": 173,
+ "files": 111,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 131,
+ "documentationNetLines": 47
+ },
+ "commands": [
+ {
+ "id": "build",
+ "executable": "npm",
+ "args": ["run", "build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "lint",
+ "executable": "npm",
+ "args": ["run", "lint"],
+ "cwd": ".",
+ "source": "package.json scripts.lint",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["__tests__/**", "lib/**", "test-helpers/**", "package.json"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 215,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 15809,
+ "estimatedTokens": 3953
+ },
+ "selected": ["lib/response.js", "docs/error-handling.md"],
+ "owners": ["lib/response.js"],
+ "tests": [
+ "__tests__/response/body.test.js",
+ "__tests__/application/response.test.js",
+ "__tests__/response/flushHeaders.test.js",
+ "__tests__/response/attachment.test.js",
+ "__tests__/response/writable.test.js"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "reduxjs/redux",
+ "task": "preserve subscription ordering during dispatch",
+ "stack": "TypeScript",
+ "failures": [],
+ "revision": "71606661ac515bdd64c199a6bb508401c7cf736f",
+ "readOnly": true,
+ "previewMs": 306,
+ "files": 477,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/product-ux-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 8,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 168,
+ "documentationNetLines": 60
+ },
+ "commands": [
+ {
+ "id": "build",
+ "executable": "yarn",
+ "args": ["build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "format-check",
+ "executable": "yarn",
+ "args": ["format:check"],
+ "cwd": ".",
+ "source": "package.json scripts.format:check",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "lint",
+ "executable": "yarn",
+ "args": ["lint"],
+ "cwd": ".",
+ "source": "package.json scripts.lint",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "yarn",
+ "args": ["test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": [
+ ".yarn/**",
+ "docs/**",
+ "examples/**",
+ "scripts/**",
+ "src/**",
+ "test/**",
+ "website/**",
+ "*.cjs",
+ "*.mts",
+ "*.ts",
+ "package.json"
+ ]
+ },
+ {
+ "id": "website-build",
+ "executable": "yarn",
+ "args": ["build"],
+ "cwd": "website",
+ "source": "website/package.json scripts.build",
+ "appliesTo": ["website/**"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 432,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13637,
+ "estimatedTokens": 3410
+ },
+ "selected": [
+ "src/applyMiddleware.ts",
+ "test/applyMiddleware.spec.ts",
+ "docs/faq/StoreSetup.md"
+ ],
+ "owners": ["src/applyMiddleware.ts"],
+ "tests": [
+ "test/applyMiddleware.spec.ts",
+ "test/typescript/dispatch.test-d.ts",
+ "test/typescript/injectedDispatch.test-d.ts"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/product-ux-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "pmndrs/zustand",
+ "task": "preserve persisted state during hydration",
+ "stack": "React/TypeScript",
+ "failures": [],
+ "revision": "b57db4f86ef179285da216eeb291266da82c361c",
+ "readOnly": true,
+ "previewMs": 224,
+ "files": 144,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [
+ "JavaScript package manager: package-lock.json, package.json packageManager, pnpm-lock.yaml"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [
+ "CONTRIBUTING.md",
+ "docs/learn/guides/flux-inspired-practice.md",
+ "docs/learn/guides/testing.md"
+ ],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "No authoritative verification wrapper or candidate checks were found."
+ ]
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Verification behavior was not assessed."]
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "docs/learn/guides/testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/product-ux-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 6,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 100,
+ "documentationNetLines": 47
+ },
+ "commands": [],
+ "deterministic": true,
+ "context": {
+ "ms": 269,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13375,
+ "estimatedTokens": 3344
+ },
+ "selected": [
+ "src/middleware/immer.ts",
+ "tests/ssr.test.tsx",
+ "docs/learn/guides/connect-to-state-with-url-hash.md",
+ "docs/learn/guides/how-to-reset-state.md",
+ "docs/learn/guides/immutable-state-and-merging.md",
+ "src/middleware/ssrSafe.ts"
+ ],
+ "owners": ["src/middleware/immer.ts", "src/middleware/ssrSafe.ts"],
+ "tests": ["tests/ssr.test.tsx"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/product-ux-review/SKILL.md",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "TanStack/query",
+ "task": "invalidate query cache after a successful mutation",
+ "stack": "TypeScript monorepo",
+ "failures": [],
+ "revision": "b4f5736437f8ada26f7d4454606ea0c2bee0e769",
+ "readOnly": true,
+ "previewMs": 1407,
+ "files": 2427,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [
+ "38 symbolic link(s) were not followed: packages/angular-query-experimental/root.eslint.config.js, packages/angular-query-persist-client/root.eslint.config.js, packages/eslint-plugin-query/root.eslint.config.js, packages/lit-query/root.tsdown.config.js, packages/preact-query-persist-client/root.eslint.config.js, packages/preact-query-persist-client/root.tsdown.config.js, packages/preact-query/root.eslint.config.js, packages/preact-query/root.tsdown.config.js, packages/query-async-storage-persister/root.eslint.config.js, packages/query-async-storage-persister/root.tsdown.config.js, packages/query-broadcast-client-experimental/root.eslint.config.js, packages/query-broadcast-client-experimental/root.tsdown.config.js, packages/query-codemods/root.eslint.config.js, packages/query-core/root.eslint.config.js, packages/query-core/root.tsdown.config.js, packages/query-devtools/root.eslint.config.js, packages/query-persist-client-core/root.eslint.config.js, packages/query-persist-client-core/root.tsdown.config.js, packages/query-sync-storage-persister/root.eslint.config.js, packages/query-sync-storage-persister/root.tsdown.config.js, packages/query-test-utils/root.eslint.config.js, packages/react-query-devtools/root.eslint.config.js, packages/react-query-devtools/root.tsdown.config.js, packages/react-query-next-experimental/root.eslint.config.js, packages/react-query-next-experimental/root.tsdown.config.js, packages/react-query-persist-client/root.eslint.config.js, packages/react-query-persist-client/root.tsdown.config.js, packages/react-query/root.eslint.config.js, packages/react-query/root.tsdown.config.js, packages/solid-query-devtools/root.eslint.config.js, packages/solid-query-persist-client/root.eslint.config.js, packages/solid-query/root.eslint.config.js, packages/svelte-query-devtools/root.eslint.config.js, packages/svelte-query-persist-client/root.eslint.config.js, packages/svelte-query/root.eslint.config.js, packages/vue-query-devtools/root.eslint.config.js, packages/vue-query/root.eslint.config.js, packages/vue-query/root.tsdown.config.js"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [
+ "CONTRIBUTING.md",
+ "docs/framework/angular/guides/testing.md",
+ "docs/framework/react/guides/testing.md",
+ "docs/framework/solid/guides/testing.md",
+ "docs/framework/vue/guides/testing.md"
+ ],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "patch"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "docs/framework/angular/guides/testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "docs/framework/react/guides/testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "docs/framework/solid/guides/testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "docs/framework/vue/guides/testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/product-ux-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 1,
+ "referencedFiles": 5,
+ "netLines": 510,
+ "documentationNetLines": 63
+ },
+ "commands": [
+ {
+ "id": "build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "integrations-angular-cli-20-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/angular-cli-20",
+ "source": "integrations/angular-cli-20/package.json scripts.build",
+ "appliesTo": ["integrations/angular-cli-20/**"]
+ },
+ {
+ "id": "integrations-lit-vite-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/lit-vite",
+ "source": "integrations/lit-vite/package.json scripts.build",
+ "appliesTo": ["integrations/lit-vite/**"]
+ },
+ {
+ "id": "integrations-react-next-14-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/react-next-14",
+ "source": "integrations/react-next-14/package.json scripts.build",
+ "appliesTo": ["integrations/react-next-14/**"]
+ },
+ {
+ "id": "integrations-react-next-15-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/react-next-15",
+ "source": "integrations/react-next-15/package.json scripts.build",
+ "appliesTo": ["integrations/react-next-15/**"]
+ },
+ {
+ "id": "integrations-react-next-16-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/react-next-16",
+ "source": "integrations/react-next-16/package.json scripts.build",
+ "appliesTo": ["integrations/react-next-16/**"]
+ },
+ {
+ "id": "integrations-react-vite-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/react-vite",
+ "source": "integrations/react-vite/package.json scripts.build",
+ "appliesTo": ["integrations/react-vite/**"]
+ },
+ {
+ "id": "integrations-react-webpack-4-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/react-webpack-4",
+ "source": "integrations/react-webpack-4/package.json scripts.build",
+ "appliesTo": ["integrations/react-webpack-4/**"]
+ },
+ {
+ "id": "integrations-react-webpack-5-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/react-webpack-5",
+ "source": "integrations/react-webpack-5/package.json scripts.build",
+ "appliesTo": ["integrations/react-webpack-5/**"]
+ },
+ {
+ "id": "integrations-solid-vite-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/solid-vite",
+ "source": "integrations/solid-vite/package.json scripts.build",
+ "appliesTo": ["integrations/solid-vite/**"]
+ },
+ {
+ "id": "integrations-svelte-vite-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/svelte-vite",
+ "source": "integrations/svelte-vite/package.json scripts.build",
+ "appliesTo": ["integrations/svelte-vite/**"]
+ },
+ {
+ "id": "integrations-vue-vite-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "integrations/vue-vite",
+ "source": "integrations/vue-vite/package.json scripts.build",
+ "appliesTo": ["integrations/vue-vite/**"]
+ },
+ {
+ "id": "packages-angular-query-experimental-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/angular-query-experimental",
+ "source": "packages/angular-query-experimental/package.json scripts.build",
+ "appliesTo": ["packages/angular-query-experimental/**"]
+ },
+ {
+ "id": "packages-angular-query-persist-client-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/angular-query-persist-client",
+ "source": "packages/angular-query-persist-client/package.json scripts.build",
+ "appliesTo": ["packages/angular-query-persist-client/**"]
+ },
+ {
+ "id": "packages-eslint-plugin-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/eslint-plugin-query",
+ "source": "packages/eslint-plugin-query/package.json scripts.build",
+ "appliesTo": ["packages/eslint-plugin-query/**"]
+ },
+ {
+ "id": "packages-lit-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/lit-query",
+ "source": "packages/lit-query/package.json scripts.build",
+ "appliesTo": ["packages/lit-query/**"]
+ },
+ {
+ "id": "packages-preact-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/preact-query",
+ "source": "packages/preact-query/package.json scripts.build",
+ "appliesTo": ["packages/preact-query/**"]
+ },
+ {
+ "id": "packages-preact-query-devtools-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/preact-query-devtools",
+ "source": "packages/preact-query-devtools/package.json scripts.build",
+ "appliesTo": ["packages/preact-query-devtools/**"]
+ },
+ {
+ "id": "packages-preact-query-persist-client-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/preact-query-persist-client",
+ "source": "packages/preact-query-persist-client/package.json scripts.build",
+ "appliesTo": ["packages/preact-query-persist-client/**"]
+ },
+ {
+ "id": "packages-query-async-storage-persister-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/query-async-storage-persister",
+ "source": "packages/query-async-storage-persister/package.json scripts.build",
+ "appliesTo": ["packages/query-async-storage-persister/**"]
+ },
+ {
+ "id": "packages-query-broadcast-client-experimental-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/query-broadcast-client-experimental",
+ "source": "packages/query-broadcast-client-experimental/package.json scripts.build",
+ "appliesTo": ["packages/query-broadcast-client-experimental/**"]
+ },
+ {
+ "id": "packages-query-core-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/query-core",
+ "source": "packages/query-core/package.json scripts.build",
+ "appliesTo": ["packages/query-core/**"]
+ },
+ {
+ "id": "packages-query-devtools-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/query-devtools",
+ "source": "packages/query-devtools/package.json scripts.build",
+ "appliesTo": ["packages/query-devtools/**"]
+ },
+ {
+ "id": "packages-query-persist-client-core-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/query-persist-client-core",
+ "source": "packages/query-persist-client-core/package.json scripts.build",
+ "appliesTo": ["packages/query-persist-client-core/**"]
+ },
+ {
+ "id": "packages-query-sync-storage-persister-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/query-sync-storage-persister",
+ "source": "packages/query-sync-storage-persister/package.json scripts.build",
+ "appliesTo": ["packages/query-sync-storage-persister/**"]
+ },
+ {
+ "id": "packages-react-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/react-query",
+ "source": "packages/react-query/package.json scripts.build",
+ "appliesTo": ["packages/react-query/**"]
+ },
+ {
+ "id": "packages-react-query-devtools-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/react-query-devtools",
+ "source": "packages/react-query-devtools/package.json scripts.build",
+ "appliesTo": ["packages/react-query-devtools/**"]
+ },
+ {
+ "id": "packages-react-query-next-experimental-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/react-query-next-experimental",
+ "source": "packages/react-query-next-experimental/package.json scripts.build",
+ "appliesTo": ["packages/react-query-next-experimental/**"]
+ },
+ {
+ "id": "packages-react-query-persist-client-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/react-query-persist-client",
+ "source": "packages/react-query-persist-client/package.json scripts.build",
+ "appliesTo": ["packages/react-query-persist-client/**"]
+ },
+ {
+ "id": "packages-solid-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/solid-query",
+ "source": "packages/solid-query/package.json scripts.build",
+ "appliesTo": ["packages/solid-query/**"]
+ },
+ {
+ "id": "packages-solid-query-devtools-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/solid-query-devtools",
+ "source": "packages/solid-query-devtools/package.json scripts.build",
+ "appliesTo": ["packages/solid-query-devtools/**"]
+ },
+ {
+ "id": "packages-solid-query-persist-client-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/solid-query-persist-client",
+ "source": "packages/solid-query-persist-client/package.json scripts.build",
+ "appliesTo": ["packages/solid-query-persist-client/**"]
+ },
+ {
+ "id": "packages-svelte-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/svelte-query",
+ "source": "packages/svelte-query/package.json scripts.build",
+ "appliesTo": ["packages/svelte-query/**"]
+ },
+ {
+ "id": "packages-svelte-query-devtools-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/svelte-query-devtools",
+ "source": "packages/svelte-query-devtools/package.json scripts.build",
+ "appliesTo": ["packages/svelte-query-devtools/**"]
+ },
+ {
+ "id": "packages-svelte-query-persist-client-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/svelte-query-persist-client",
+ "source": "packages/svelte-query-persist-client/package.json scripts.build",
+ "appliesTo": ["packages/svelte-query-persist-client/**"]
+ },
+ {
+ "id": "packages-vue-query-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/vue-query",
+ "source": "packages/vue-query/package.json scripts.build",
+ "appliesTo": ["packages/vue-query/**"]
+ },
+ {
+ "id": "packages-vue-query-devtools-build",
+ "executable": "pnpm",
+ "args": ["run", "build"],
+ "cwd": "packages/vue-query-devtools",
+ "source": "packages/vue-query-devtools/package.json scripts.build",
+ "appliesTo": ["packages/vue-query-devtools/**"]
+ },
+ {
+ "id": "test",
+ "executable": "pnpm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": [
+ "examples/**",
+ "integrations/**",
+ "packages/**",
+ "scripts/**",
+ "*.js",
+ "package.json"
+ ]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 1937,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 14697,
+ "estimatedTokens": 3675
+ },
+ "selected": [
+ "packages/preact-query/src/useMutationState.ts",
+ "packages/query-core/src/mutationCache.ts",
+ "AGENTS.md",
+ "packages/vue-query/src/__tests__/mutationCache.test.ts"
+ ],
+ "owners": [
+ "packages/preact-query/src/useMutationState.ts",
+ "packages/react-query/src/useMutationState.ts",
+ "packages/solid-query/src/useMutationState.ts",
+ "packages/query-core/src/queryClient.ts",
+ "packages/query-core/src/mutationCache.ts"
+ ],
+ "tests": [
+ "packages/preact-query/src/__tests__/useMutation.test.tsx",
+ "packages/react-query/src/__tests__/useMutation.test.tsx",
+ "packages/query-core/src/__tests__/mutationCache.test.tsx",
+ "packages/solid-query/src/__tests__/useMutation.test.tsx",
+ "packages/query-core/src/__tests__/queryCache.test.tsx"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ "AGENTS.md",
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/product-ux-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "skipped": "Tracked setup edits require a commit; this test does not commit to external repositories."
+ }
+ },
+ {
+ "repo": "pallets/click",
+ "task": "validate command line options and show usage errors",
+ "stack": "Python",
+ "failures": [],
+ "revision": "36baa15ff831b939a22bc527cd76ce653ef6f66d",
+ "readOnly": true,
+ "previewMs": 188,
+ "files": 166,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["docs/contributing.md", "docs/testing.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "docs/testing.md",
+ "action": "reference"
+ },
+ {
+ "path": "docs/contributing.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 134,
+ "documentationNetLines": 49
+ },
+ "commands": [
+ {
+ "id": "mypy",
+ "executable": "uv",
+ "args": ["run", "mypy", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.mypy]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "pytest",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.pytest]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 260,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13561,
+ "estimatedTokens": 3391
+ },
+ "selected": [
+ "src/click/__init__.py",
+ "docs/command-line-reference.md",
+ "docs/option-decorators.md",
+ "docs/exceptions.md",
+ "tests/typing/typing_version_option.py",
+ "tests/typing/typing_help_option.py",
+ "tests/test_utils/__init__.py"
+ ],
+ "owners": ["src/click/__init__.py"],
+ "tests": [
+ "tests/test_commands.py",
+ "tests/typing/typing_version_option.py",
+ "tests/typing/typing_confirmation_option.py",
+ "tests/typing/typing_help_option.py",
+ "tests/typing/typing_options.py"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "pallets/itsdangerous",
+ "task": "reject expired timestamp signatures",
+ "stack": "Python",
+ "failures": [],
+ "revision": "672971d66a2ef9f85151e53283113f33d642dabd",
+ "readOnly": true,
+ "previewMs": 166,
+ "files": 50,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 130,
+ "documentationNetLines": 47
+ },
+ "commands": [
+ {
+ "id": "mypy",
+ "executable": "uv",
+ "args": ["run", "mypy", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.mypy]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "pytest",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.pytest]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 187,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13580,
+ "estimatedTokens": 3395
+ },
+ "selected": [
+ "src/itsdangerous/__init__.py",
+ "tests/test_itsdangerous/test_timed.py",
+ "docs/timed.rst",
+ "src/itsdangerous/exc.py",
+ "tests/test_itsdangerous/test_signer.py",
+ "tests/test_itsdangerous/__init__.py",
+ "docs/exceptions.rst",
+ "docs/signer.rst"
+ ],
+ "owners": ["src/itsdangerous/__init__.py", "src/itsdangerous/exc.py"],
+ "tests": [
+ "tests/test_itsdangerous/test_timed.py",
+ "tests/test_itsdangerous/test_signer.py",
+ "tests/test_itsdangerous/__init__.py"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "pallets/jinja",
+ "task": "preserve template escaping for undefined values",
+ "stack": "Python",
+ "failures": [],
+ "revision": "5ef70112a1ff19c05324ff889dd30405b1002044",
+ "readOnly": true,
+ "previewMs": 173,
+ "files": 107,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 130,
+ "documentationNetLines": 47
+ },
+ "commands": [
+ {
+ "id": "mypy",
+ "executable": "uv",
+ "args": ["run", "mypy", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.mypy]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "pytest",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.pytest]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 233,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13410,
+ "estimatedTokens": 3353
+ },
+ "selected": [
+ "src/jinja2/tests.py",
+ "docs/integration.rst",
+ "src/jinja2/nativetypes.py",
+ "tests/res/templates/broken.html",
+ "tests/res/templates/foo/test.html",
+ "tests/res/templates/mojibake.txt",
+ "tests/res/templates/syntaxerror.html",
+ "tests/res/templates/test.html",
+ "tests/res/templates2/foo",
+ ".github/ISSUE_TEMPLATE/config.yml"
+ ],
+ "owners": ["src/jinja2/tests.py", "src/jinja2/nativetypes.py"],
+ "tests": [
+ "tests/res/templates/broken.html",
+ "tests/res/templates/foo/test.html",
+ "tests/res/templates/mojibake.txt",
+ "tests/res/templates/syntaxerror.html",
+ "tests/res/templates/test.html"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "pydantic/pydantic",
+ "task": "preserve validator errors when parsing nested models",
+ "stack": "Python/Rust",
+ "failures": [],
+ "revision": "74a852ea4838a03519e09a9dae4806dcdc026bf5",
+ "readOnly": true,
+ "previewMs": 349,
+ "files": 589,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": ["2 symbolic link(s) were not followed: CONTRIBUTING.md, tests/pydantic_core"],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["docs/contributing.md", "docs/internals/architecture.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "docs/internals/architecture.md",
+ "action": "reference"
+ },
+ {
+ "path": "docs/contributing.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 216,
+ "documentationNetLines": 49
+ },
+ "commands": [
+ {
+ "id": "core-test-debug-8",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.core-test-debug.steps[7].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "core-test-os-7",
+ "executable": "uv",
+ "args": ["run", "pytest", "tests/pydantic_core"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.core-test-os.steps[6].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "pydantic-core-cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": "pydantic-core",
+ "source": "pydantic-core/Cargo.toml",
+ "appliesTo": ["pydantic-core/**"]
+ },
+ {
+ "id": "pydantic-core-core-test-os-8",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": "pydantic-core",
+ "source": ".github/workflows/ci.yml jobs.core-test-os.steps[7].run",
+ "appliesTo": ["pydantic-core/**"]
+ },
+ {
+ "id": "pydantic-core-pytest",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": "pydantic-core",
+ "source": "pydantic-core/pyproject.toml [tool.pytest]",
+ "appliesTo": ["pydantic-core/**"]
+ },
+ {
+ "id": "pydantic-core-ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": "pydantic-core",
+ "source": "pydantic-core/pyproject.toml [tool.ruff]",
+ "appliesTo": ["pydantic-core/**"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "run-pytest-no-coverage",
+ "executable": "uv",
+ "args": ["run", "pytest", "--durations=10"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[6].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "run-tests",
+ "executable": "uv",
+ "args": [
+ "run",
+ "pytest",
+ "--ignore=tests/mypy/",
+ "--ignore=tests/test_docs.py",
+ "--memray"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test-memray.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-plugin-5",
+ "executable": "uv",
+ "args": ["run", "pytest", "tests/plugin"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test-plugin.steps[4].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "tests-typechecking-mypy",
+ "executable": "python",
+ "args": ["-m", "mypy", "."],
+ "cwd": "tests/typechecking",
+ "source": "tests/typechecking/pyproject.toml [tool.mypy]",
+ "appliesTo": ["tests/typechecking/**"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 445,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 15872,
+ "estimatedTokens": 3968
+ },
+ "selected": [
+ "pydantic/deprecated/class_validators.py",
+ "pydantic-core/src/validators/custom_error.rs",
+ "tests/mypy/outputs/mypy-default_ini/root_models.py"
+ ],
+ "owners": [
+ "pydantic-core/src/validators/model.rs",
+ "pydantic/functional_validators.py",
+ "pydantic-core/src/validators/model_fields.rs",
+ "pydantic/_internal/_model_construction.py",
+ "pydantic/v1/validators.py"
+ ],
+ "tests": [
+ "tests/mypy/outputs/mypy-default_ini/root_models.py",
+ "tests/mypy/outputs/pyproject-default_toml/root_models.py",
+ "tests/mypy/outputs/mypy-plugin_ini/root_models.py",
+ "tests/typechecking/base_model.py",
+ "pydantic-core/tests/benchmarks/nested_schema.py"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "python-attrs/attrs",
+ "task": "validate default attribute values in generated classes",
+ "stack": "Python",
+ "failures": [],
+ "revision": "8f767776326faaed11e6c2974798787f6e19b343",
+ "readOnly": true,
+ "previewMs": 193,
+ "files": 140,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [".github/CONTRIBUTING.md", ".github/SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".github/SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": ".github/CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 136,
+ "documentationNetLines": 49
+ },
+ "commands": [
+ {
+ "id": "mypy",
+ "executable": "uv",
+ "args": ["run", "mypy", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.mypy]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "pytest",
+ "executable": "uv",
+ "args": ["run", "pytest"],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.pytest]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 261,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13468,
+ "estimatedTokens": 3367
+ },
+ "selected": [
+ "src/attr/filters.py",
+ "tests/strategies.py",
+ "docs/how-does-it-work.md",
+ ".python-version-default"
+ ],
+ "owners": ["src/attr/filters.py"],
+ "tests": ["tests/strategies.py"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "pytest-dev/pluggy",
+ "task": "preserve hook ordering when a plugin is unregistered",
+ "stack": "Python",
+ "failures": [],
+ "revision": "4821148db2f4c6daa62ad8bdcae2918ecf27a731",
+ "readOnly": true,
+ "previewMs": 178,
+ "files": 79,
+ "limits": [],
+ "initializationAllowed": false,
+ "conflicts": [
+ "Multiple root agent instruction sources require reconciliation: AGENTS.md, CLAUDE.md"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [".pre-commit-config.yaml", "SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [],
+ "growth": {
+ "createdFiles": 0,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 0,
+ "documentationNetLines": 0
+ },
+ "commands": [
+ {
+ "id": "mypy",
+ "executable": "uv",
+ "args": ["run", "mypy", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.mypy]",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "ruff",
+ "executable": "uv",
+ "args": ["run", "ruff", "check", "."],
+ "cwd": ".",
+ "source": "pyproject.toml [tool.ruff]",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 204,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 8537,
+ "estimatedTokens": 2135
+ },
+ "selected": [
+ "AGENTS.md",
+ "CLAUDE.md",
+ "docs/api_reference.rst",
+ "pyproject.toml",
+ ".pre-commit-config.yaml"
+ ],
+ "owners": ["src/pluggy/_hooks.py"],
+ "tests": ["testing/test_hookcaller.py", "testing/test_pluginmanager.py"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "init": "refused"
+ },
+ {
+ "repo": "BurntSushi/toml",
+ "task": "decode quoted TOML keys without losing type information",
+ "stack": "Go",
+ "failures": [],
+ "revision": "d733fc535e4a9f3c454e421a87b90ade5d49bf31",
+ "readOnly": true,
+ "previewMs": 157,
+ "files": 42,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 140,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": ".",
+ "source": "go.mod",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-3",
+ "executable": "go",
+ "args": ["test", "-race", "./..."],
+ "cwd": ".",
+ "source": ".github/workflows/test.yml jobs.test.steps[2].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "testdata-cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": "testdata",
+ "source": "testdata/Cargo.toml",
+ "appliesTo": ["testdata/**"]
+ },
+ {
+ "id": "testdata-cargo-test",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": "testdata",
+ "source": "testdata/Cargo.toml",
+ "appliesTo": ["testdata/**"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 178,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13241,
+ "estimatedTokens": 3311
+ },
+ "selected": [
+ "_example/example.go",
+ "cmd/toml-test-decoder/main.go",
+ "example_test.go",
+ "cmd/toml-test-decoder/README.md",
+ "cmd/toml-test-encoder/main.go",
+ "cmd/toml-test-encoder/README.md",
+ "cmd/toml-test-decoder/COPYING",
+ "go.mod"
+ ],
+ "owners": [
+ "decode.go",
+ "_example/example.go",
+ "cmd/toml-test-decoder/main.go",
+ "cmd/toml-test-encoder/main.go",
+ "cmd/tomlv/main.go"
+ ],
+ "tests": ["decode_test.go", "toml_test.go", "example_test.go"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "go-chi/chi",
+ "task": "preserve route parameters through nested middleware",
+ "stack": "Go",
+ "failures": [],
+ "revision": "ae6be7469132cf471ca099d8c7bda4010c4ff7b2",
+ "readOnly": true,
+ "previewMs": 166,
+ "files": 105,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md", "SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 133,
+ "documentationNetLines": 49
+ },
+ "commands": [
+ {
+ "id": "examples-rest-go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": "_examples/rest",
+ "source": "_examples/rest/go.mod",
+ "appliesTo": ["_examples/rest/**"]
+ },
+ {
+ "id": "examples-versions-go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": "_examples/versions",
+ "source": "_examples/versions/go.mod",
+ "appliesTo": ["_examples/versions/**"]
+ },
+ {
+ "id": "go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": ".",
+ "source": "go.mod",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 221,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 14598,
+ "estimatedTokens": 3650
+ },
+ "selected": [
+ "middleware/route_headers.go",
+ "middleware/route_headers_test.go",
+ "_examples/rest/routes.md"
+ ],
+ "owners": [
+ "middleware/route_headers.go",
+ "middleware/strip.go",
+ "middleware/page_route.go",
+ "middleware/url_format.go",
+ "middleware/recoverer.go"
+ ],
+ "tests": [
+ "middleware/route_headers_test.go",
+ "middleware/strip_test.go",
+ "middleware/client_ip_test.go",
+ "middleware/middleware_test.go",
+ "middleware/url_format_test.go"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "rs/zerolog",
+ "task": "preserve structured fields when formatting log events",
+ "stack": "Go",
+ "failures": [],
+ "revision": "dfd11cca1143ba03ba0fc0ff14e5dbb4d61f6f0a",
+ "readOnly": true,
+ "previewMs": 171,
+ "files": 99,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Referenced path was not available: log/slog"]
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 6,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 128,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "cmd-lint-go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": "cmd/lint",
+ "source": "cmd/lint/go.mod",
+ "appliesTo": ["cmd/lint/**"]
+ },
+ {
+ "id": "go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": ".",
+ "source": "go.mod",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "go",
+ "args": ["test", "-race", "-bench", ".", "-benchmem", "./..."],
+ "cwd": ".",
+ "source": ".github/workflows/test.yml jobs.test.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-cbor",
+ "executable": "go",
+ "args": ["test", "-tags", "binary_log", "-race", "./..."],
+ "cwd": ".",
+ "source": ".github/workflows/test.yml jobs.test.steps[4].run",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 226,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 15083,
+ "estimatedTokens": 3771
+ },
+ "selected": ["log.go"],
+ "owners": ["event.go", "log.go", "log/log.go", "fields.go", "slog.go"],
+ "tests": [
+ "event_test.go",
+ "log_example_test.go",
+ "log_test.go",
+ "log/log_example_test.go",
+ "slog_test.go"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "stretchr/testify",
+ "task": "compare nested values in assertion failure messages",
+ "stack": "Go",
+ "failures": [],
+ "revision": "435c07b5cb95c88b82cf35f49da0dde33d24ad46",
+ "readOnly": true,
+ "previewMs": 172,
+ "files": 91,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 137,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "build-6",
+ "executable": "go",
+ "args": ["test", "-v", "-race", "./..."],
+ "cwd": ".",
+ "source": ".github/workflows/main.yml jobs.build.steps[5].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "codegen-go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": "_codegen",
+ "source": "_codegen/go.mod",
+ "appliesTo": ["_codegen/**"]
+ },
+ {
+ "id": "go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": ".",
+ "source": "go.mod",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 227,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13541,
+ "estimatedTokens": 3386
+ },
+ "selected": [
+ "assert/assertion_compare.go",
+ "assert/forward_assertions.go",
+ "assert/assertion_format.go.tmpl",
+ "assert/assertion_forward.go.tmpl",
+ "_codegen/go.mod"
+ ],
+ "owners": [
+ "assert/assertions.go",
+ "assert/assertion_forward.go",
+ "assert/assertion_format.go",
+ "assert/assertion_compare.go",
+ "assert/assertion_order.go"
+ ],
+ "tests": [
+ "assert/assertion_compare_test.go",
+ "assert/forward_assertions_test.go",
+ "assert/http_assertions_test.go",
+ "assert/assertion_order_test.go",
+ "assert/assertions_test.go"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "junegunn/fzf",
+ "task": "preserve query selection when reloading results",
+ "stack": "Go/terminal",
+ "failures": [],
+ "revision": "52f4319a72c17e123396cc3a2e6abf2e96e9d753",
+ "readOnly": true,
+ "previewMs": 192,
+ "files": 161,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 111,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": ".",
+ "source": "go.mod",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 271,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13564,
+ "estimatedTokens": 3391
+ },
+ "selected": ["src/result.go", "src/tui/light_query_test.go"],
+ "owners": ["src/result.go", "src/result_others.go", "src/result_x86.go"],
+ "tests": ["src/result_test.go", "src/tui/light_query_test.go"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "serde-rs/json",
+ "task": "report invalid JSON numbers with useful errors",
+ "stack": "Rust",
+ "failures": [],
+ "revision": "afdf6fc67247dd7fa4fcde1381e6ecc6bcc7a30e",
+ "readOnly": true,
+ "previewMs": 175,
+ "files": 92,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 398,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "build-10",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--no-default-features",
+ "--features",
+ "alloc,raw_value"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[9].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-11",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--features",
+ "serde_json/preserve_order"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[10].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-12",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--no-default-features",
+ "--features",
+ "alloc,serde_json/preserve_order"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[11].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-3",
+ "executable": "cargo",
+ "args": ["check", "--manifest-path", "tests/crate/Cargo.toml"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[2].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-4",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--features",
+ "float_roundtrip"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-5",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--features",
+ "arbitrary_precision"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[4].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-6",
+ "executable": "cargo",
+ "args": ["check", "--manifest-path", "tests/crate/Cargo.toml", "--features", "raw_value"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[5].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-7",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--features",
+ "unbounded_depth"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[6].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-8",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--no-default-features",
+ "--features",
+ "alloc"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[7].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "build-9",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "tests/crate/Cargo.toml",
+ "--no-default-features",
+ "--features",
+ "alloc,arbitrary_precision"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.build.steps[8].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "clippy-3",
+ "executable": "cargo",
+ "args": ["clippy", "--tests", "--", "-Dclippy::all", "-Dclippy::pedantic"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.clippy.steps[2].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "clippy-4",
+ "executable": "cargo",
+ "args": [
+ "clippy",
+ "--all-features",
+ "--tests",
+ "--",
+ "-Dclippy::all",
+ "-Dclippy::pedantic"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.clippy.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "fuzz-cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": "fuzz",
+ "source": "fuzz/Cargo.toml",
+ "appliesTo": ["fuzz/**"]
+ },
+ {
+ "id": "fuzz-cargo-test",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": "fuzz",
+ "source": "fuzz/Cargo.toml",
+ "appliesTo": ["fuzz/**"]
+ },
+ {
+ "id": "minimal-4",
+ "executable": "cargo",
+ "args": ["check", "--locked"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.minimal.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-3",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[2].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-4",
+ "executable": "cargo",
+ "args": [
+ "test",
+ "--features",
+ "preserve_order",
+ "--tests",
+ "--",
+ "--skip",
+ "ui",
+ "--exact"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-5",
+ "executable": "cargo",
+ "args": [
+ "test",
+ "--features",
+ "float_roundtrip",
+ "--tests",
+ "--",
+ "--skip",
+ "ui",
+ "--exact"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[4].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-6",
+ "executable": "cargo",
+ "args": [
+ "test",
+ "--features",
+ "arbitrary_precision",
+ "--tests",
+ "--",
+ "--skip",
+ "ui",
+ "--exact"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[5].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-7",
+ "executable": "cargo",
+ "args": [
+ "test",
+ "--features",
+ "float_roundtrip,arbitrary_precision",
+ "--tests",
+ "--",
+ "--skip",
+ "ui",
+ "--exact"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[6].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-8",
+ "executable": "cargo",
+ "args": ["test", "--features", "raw_value", "--tests", "--", "--skip", "ui", "--exact"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[7].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-9",
+ "executable": "cargo",
+ "args": [
+ "test",
+ "--features",
+ "unbounded_depth",
+ "--tests",
+ "--",
+ "--skip",
+ "ui",
+ "--exact"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[8].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "tests-crate-cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": "tests/crate",
+ "source": "tests/crate/Cargo.toml",
+ "appliesTo": ["tests/crate/**"]
+ },
+ {
+ "id": "tests-crate-cargo-test",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": "tests/crate",
+ "source": "tests/crate/Cargo.toml",
+ "appliesTo": ["tests/crate/**"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 223,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13414,
+ "estimatedTokens": 3354
+ },
+ "selected": [
+ "src/lexical/errors.rs",
+ "tests/debug.rs",
+ "CONTRIBUTING.md",
+ "tests/regression/issue845.rs",
+ "tests/lexical/num.rs",
+ "tests/ui/unexpected_after_map_entry.stderr",
+ "tests/ui/unexpected_after_map_entry.rs",
+ "tests/ui/missing_colon.stderr",
+ "fuzz/Cargo.toml"
+ ],
+ "owners": ["src/number.rs", "src/error.rs", "src/lexical/errors.rs"],
+ "tests": [
+ "tests/debug.rs",
+ "tests/regression/issue845.rs",
+ "tests/lexical/num.rs",
+ "tests/ui/unexpected_after_map_entry.stderr",
+ "tests/ui/unexpected_after_map_entry.rs"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "clap-rs/clap",
+ "task": "validate conflicting command line arguments",
+ "stack": "Rust workspace",
+ "failures": [],
+ "revision": "af3044228bd76a87a3f46a3c7c3343563c059527",
+ "readOnly": true,
+ "previewMs": 241,
+ "files": 620,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [
+ "12 symbolic link(s) were not followed: clap_builder/LICENSE-APACHE, clap_builder/LICENSE-MIT, clap_complete/LICENSE-APACHE, clap_complete/LICENSE-MIT, clap_complete_nushell/LICENSE-APACHE, clap_complete_nushell/LICENSE-MIT, clap_derive/LICENSE-APACHE, clap_derive/LICENSE-MIT, clap_lex/LICENSE-APACHE, clap_lex/LICENSE-MIT, clap_mangen/LICENSE-APACHE, clap_mangen/LICENSE-MIT"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": [
+ "CONTRIBUTING.md",
+ "clap_builder/CONTRIBUTING.md",
+ "clap_complete/CONTRIBUTING.md",
+ "clap_derive/CONTRIBUTING.md",
+ "clap_lex/CONTRIBUTING.md",
+ "clap_mangen/CONTRIBUTING.md"
+ ],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "clap_builder/CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": "clap_complete/CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": "clap_derive/CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": "clap_lex/CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": "clap_mangen/CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 6,
+ "netLines": 173,
+ "documentationNetLines": 53
+ },
+ "commands": [
+ {
+ "id": "cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "cargo-test",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "clap-complete",
+ "executable": "cargo",
+ "args": [
+ "test",
+ "-p",
+ "clap_complete",
+ "-F",
+ "unstable-dynamic",
+ "-F",
+ "unstable-shell-tests"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.shell-integration.steps[4].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "clap-complete-nu",
+ "executable": "cargo",
+ "args": ["test", "-p", "clap_complete_nushell", "-F", "unstable-shell-tests"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.shell-integration-nu.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test-dynamic-completions",
+ "executable": "cargo",
+ "args": ["test", "-p", "clap_complete", "-F", "unstable-dynamic"],
+ "cwd": ".",
+ "source": ".github/workflows/ci.yml jobs.test.steps[7].run",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 319,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 12622,
+ "estimatedTokens": 3156
+ },
+ "selected": [
+ "tests/builder/command.rs",
+ "tests/derive/arguments.rs",
+ "tests/derive_ui/external_subcommand_wrong_type.stderr",
+ "tests/derive_ui/multiple_external_subcommand.rs",
+ "tests/derive_ui/skip_subcommand.rs",
+ "tests/derive/nested_subcommands.rs",
+ "clap_builder/src/builder/tests.rs",
+ "clap_bench/Cargo.toml"
+ ],
+ "owners": [
+ "clap_builder/src/builder/command.rs",
+ "clap_derive/src/derives/subcommand.rs",
+ "clap_builder/src/builder/tests.rs"
+ ],
+ "tests": [
+ "tests/builder/command.rs",
+ "tests/derive/arguments.rs",
+ "tests/builder/flag_subcommands.rs",
+ "tests/builder/subcommands.rs",
+ "tests/derive_ui/external_subcommand_wrong_type.stderr"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "sharkdp/bat",
+ "task": "preserve syntax highlighting when paging a file",
+ "stack": "Rust",
+ "failures": [],
+ "revision": "2ed8b010afb59c8b8463ad6818c4ee50fa1f17ee",
+ "readOnly": true,
+ "previewMs": 338,
+ "files": 909,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md", "SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 192,
+ "documentationNetLines": 49
+ },
+ "commands": [
+ {
+ "id": "cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "cargo-test",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "lint-4",
+ "executable": "cargo",
+ "args": ["clippy", "--locked", "--all-targets", "--all-features", "--", "-D", "warnings"],
+ "cwd": ".",
+ "source": ".github/workflows/CICD.yml jobs.lint.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "run-ignored-by-default-unit-tests-with-new-syntaxes-and-themes",
+ "executable": "cargo",
+ "args": ["test", "--locked", "--release", "--test", "assets", "--", "--ignored"],
+ "cwd": ".",
+ "source": ".github/workflows/CICD.yml jobs.test_with_new_syntaxes_and_themes.steps[6].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "run-unit-tests",
+ "executable": "cargo",
+ "args": ["test", "--locked", "--test", "system_wide_config", "--", "--ignored"],
+ "cwd": ".",
+ "source": ".github/workflows/CICD.yml jobs.test_with_system_config.steps[4].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "run-unit-tests-with-new-syntaxes-and-themes",
+ "executable": "cargo",
+ "args": ["test", "--locked", "--release"],
+ "cwd": ".",
+ "source": ".github/workflows/CICD.yml jobs.test_with_new_syntaxes_and_themes.steps[5].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "tests-syntax-tests-highlighted-go-go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": "tests/syntax-tests/highlighted/Go",
+ "source": "tests/syntax-tests/highlighted/Go/go.mod",
+ "appliesTo": ["tests/syntax-tests/highlighted/Go/**"]
+ },
+ {
+ "id": "tests-syntax-tests-source-go-go-test",
+ "executable": "go",
+ "args": ["test", "./..."],
+ "cwd": "tests/syntax-tests/source/Go",
+ "source": "tests/syntax-tests/source/Go/go.mod",
+ "appliesTo": ["tests/syntax-tests/source/Go/**"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 486,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13596,
+ "estimatedTokens": 3399
+ },
+ "selected": [
+ "src/syntax_mapping.rs",
+ "src/paging.rs",
+ ".github/ISSUE_TEMPLATE/syntax_request.md",
+ "src/assets/serialized_syntax_set.rs",
+ "tests/syntax-tests/source/NAnt Build File/LICENSE.md",
+ "tests/benchmarks/many-small-files/small-file-0.txt",
+ "src/syntax_mapping/builtins/bsd-family/.gitkeep",
+ "src/syntax_mapping/builtins/common/.gitkeep"
+ ],
+ "owners": [
+ "src/syntax_mapping.rs",
+ "src/assets/serialized_syntax_set.rs",
+ "src/syntax_mapping/ignored_suffixes.rs",
+ "src/syntax_mapping/builtin.rs",
+ "src/paging.rs"
+ ],
+ "tests": [
+ "tests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff",
+ "tests/syntax-tests/highlighted/cmd-help/test.cmd-help",
+ "tests/scripts/find-slow-to-highlight-files.py",
+ "tests/syntax-tests/highlighted/Bash/batgrep.sh",
+ "tests/syntax-tests/highlighted/CMake/CMakeLists.txt"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "tokio-rs/axum",
+ "task": "preserve request extraction errors in routing",
+ "stack": "Rust workspace",
+ "failures": [],
+ "revision": "194030d7d0c9395cd98c172d1cfd08777332d7b2",
+ "readOnly": true,
+ "previewMs": 266,
+ "files": 498,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [
+ "5 symbolic link(s) were not followed: README.md, axum-core/LICENSE, axum-extra/LICENSE, axum-macros/LICENSE, axum/LICENSE"
+ ],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 1,
+ "netLines": 152,
+ "documentationNetLines": 48
+ },
+ "commands": [
+ {
+ "id": "axum-macros-run-nightly-tests",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": "axum-macros",
+ "source": ".github/workflows/CI.yml jobs.test-nightly.steps[4].run",
+ "appliesTo": ["axum-macros/**"]
+ },
+ {
+ "id": "cargo-check",
+ "executable": "cargo",
+ "args": ["check"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "cargo-test",
+ "executable": "cargo",
+ "args": ["test"],
+ "cwd": ".",
+ "source": "Cargo.toml",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "github-workflows-ci-yml-check",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--all-targets",
+ "--all-features",
+ "--target",
+ "armv5te-unknown-linux-musleabi"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/CI.yml jobs.armv5te-unknown-linux-musleabi.steps[3].run",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "github-workflows-ci-yml-check-2",
+ "executable": "cargo",
+ "args": [
+ "check",
+ "--manifest-path",
+ "./examples/simple-router-wasm/Cargo.toml",
+ "--target",
+ "wasm32-unknown-unknown"
+ ],
+ "cwd": ".",
+ "source": ".github/workflows/CI.yml jobs.wasm32-unknown-unknown.steps[3].run",
+ "appliesTo": ["**/*"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 384,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 14649,
+ "estimatedTokens": 3663
+ },
+ "selected": [
+ "axum/src/middleware/map_request.rs",
+ "axum/src/routing/tests/handle_error.rs"
+ ],
+ "owners": [
+ "axum/src/routing/mod.rs",
+ "axum-extra/src/routing/mod.rs",
+ "axum/src/middleware/map_request.rs",
+ "axum/src/routing/method_routing.rs",
+ "axum-macros/src/from_request/mod.rs"
+ ],
+ "tests": [
+ "axum/src/routing/tests/handle_error.rs",
+ "axum-macros/tests/from_request/fail/override_rejection_on_enum_without_via.stderr",
+ "axum/src/routing/tests/mod.rs",
+ "axum-macros/tests/from_request/fail/generic_without_via_rejection.stderr",
+ "axum-macros/tests/from_request/fail/generic_without_via.stderr"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "skipped": "No root README for the harmless changed-diff probe."
+ }
+ },
+ {
+ "repo": "ruby/rake",
+ "task": "invoke prerequisite tasks in dependency order",
+ "stack": "Ruby",
+ "failures": [],
+ "revision": "3834925b2d5e1cd889904eb92def1f9d4b81a66e",
+ "readOnly": true,
+ "previewMs": 178,
+ "files": 127,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "No authoritative verification wrapper or candidate checks were found."
+ ]
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Verification behavior was not assessed."]
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 5,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 83,
+ "documentationNetLines": 33
+ },
+ "commands": [],
+ "deterministic": true,
+ "context": {
+ "ms": 229,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 14833,
+ "estimatedTokens": 3709
+ },
+ "selected": ["lib/rake/task.rb", "doc/glossary.rdoc"],
+ "owners": [
+ "lib/rake/task.rb",
+ "lib/rake/task_manager.rb",
+ "lib/rake/multi_task.rb",
+ "lib/rake/file_task.rb",
+ "lib/rake/file_creation_task.rb"
+ ],
+ "tests": [
+ "test/test_rake_task.rb",
+ "test/test_rake_test_task.rb",
+ "test/test_rake_file_task.rb",
+ "test/test_rake_multi_task.rb",
+ "test/test_rake_task_with_arguments.rb"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "skipped": "No root README for the harmless changed-diff probe."
+ }
+ },
+ {
+ "repo": "sinatra/sinatra",
+ "task": "handle route errors without losing response headers",
+ "stack": "Ruby",
+ "failures": [],
+ "revision": "cb22afd7902b566b6eaba6c4ea89739494a65d12",
+ "readOnly": true,
+ "previewMs": 213,
+ "files": 292,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md", "SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "No authoritative verification wrapper or candidate checks were found."
+ ]
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Verification behavior was not assessed."]
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 5,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 88,
+ "documentationNetLines": 35
+ },
+ "commands": [],
+ "deterministic": true,
+ "context": {
+ "ms": 328,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 13353,
+ "estimatedTokens": 3339
+ },
+ "selected": [
+ "sinatra-contrib/lib/sinatra/multi_route.rb",
+ "test/mapped_error_test.rb",
+ "sinatra-contrib/ideas.md",
+ "sinatra-contrib/spec/multi_route_spec.rb",
+ "test/route_added_hook_test.rb",
+ "test/views/error.builder",
+ "test/views/error.erb",
+ "test/views/error.haml"
+ ],
+ "owners": ["sinatra-contrib/lib/sinatra/multi_route.rb"],
+ "tests": [
+ "test/mapped_error_test.rb",
+ "sinatra-contrib/spec/multi_route_spec.rb",
+ "test/route_added_hook_test.rb",
+ "test/views/error.builder",
+ "test/views/error.erb"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "slimphp/Slim",
+ "task": "preserve request routing and error middleware behavior",
+ "stack": "PHP",
+ "failures": [],
+ "revision": "3675bf6baac66b07032575b7bef4200b60b7974b",
+ "readOnly": true,
+ "previewMs": 178,
+ "files": 145,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md", "SECURITY.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "No authoritative verification wrapper or candidate checks were found."
+ ]
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Verification behavior was not assessed."]
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "SECURITY.md",
+ "action": "reference"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 5,
+ "patchedFiles": 0,
+ "referencedFiles": 2,
+ "netLines": 86,
+ "documentationNetLines": 35
+ },
+ "commands": [],
+ "deterministic": true,
+ "context": {
+ "ms": 259,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 14739,
+ "estimatedTokens": 3685
+ },
+ "selected": [
+ "Slim/Middleware/RoutingMiddleware.php",
+ "Slim/Exception/HttpBadRequestException.php",
+ "Slim/Middleware/ErrorMiddleware.php",
+ "tests/Routing/RouteRunnerTest.php",
+ "UPGRADING.md"
+ ],
+ "owners": [
+ "Slim/Middleware/RoutingMiddleware.php",
+ "Slim/Middleware/ErrorMiddleware.php",
+ "Slim/Routing/RouteRunner.php",
+ "Slim/Routing/Route.php",
+ "Slim/Middleware/BodyParsingMiddleware.php"
+ ],
+ "tests": [
+ "tests/Middleware/ErrorMiddlewareTest.php",
+ "tests/Middleware/RoutingMiddlewareTest.php",
+ "tests/Routing/RouteRunnerTest.php",
+ "tests/Routing/RouteTest.php",
+ "tests/MiddlewareDispatcherTest.php"
+ ],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "dorny/paths-filter",
+ "task": "match changed paths against exclusion rules",
+ "stack": "GitHub Action/TypeScript",
+ "failures": [],
+ "revision": "ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d",
+ "readOnly": true,
+ "previewMs": 176,
+ "files": 32,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/verification.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/verify-change/SKILL.md",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 7,
+ "patchedFiles": 0,
+ "referencedFiles": 0,
+ "netLines": 130,
+ "documentationNetLines": 47
+ },
+ "commands": [
+ {
+ "id": "build",
+ "executable": "npm",
+ "args": ["run", "build"],
+ "cwd": ".",
+ "source": "package.json scripts.build",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "lint",
+ "executable": "npm",
+ "args": ["run", "lint"],
+ "cwd": ".",
+ "source": "package.json scripts.lint",
+ "appliesTo": ["**/*"]
+ },
+ {
+ "id": "test",
+ "executable": "npm",
+ "args": ["run", "test"],
+ "cwd": ".",
+ "source": "package.json scripts.test",
+ "appliesTo": ["__tests__/**", "src/**", "*.js", "package.json"]
+ }
+ ],
+ "deterministic": true,
+ "context": {
+ "ms": 185,
+ "confidence": "partial",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 14285,
+ "estimatedTokens": 3572
+ },
+ "selected": ["src/safe-directory.ts", "__tests__/shell-escape.test.ts", "CHANGELOG.md"],
+ "owners": ["src/safe-directory.ts"],
+ "tests": ["__tests__/shell-escape.test.ts"],
+ "unknowns": ["Applicable approved verification command"]
+ },
+ "changedPaths": [
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md",
+ ".noxroot/skills/verify-change/SKILL.md",
+ ".noxroot/verification.yml",
+ "AGENTS.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "continued": true,
+ "noChange": "blocked",
+ "changedDiff": "incomplete",
+ "finishInferred": true,
+ "documentationUnchanged": true,
+ "agentCalls": 0
+ }
+ },
+ {
+ "repo": "neovim/nvim-lspconfig",
+ "task": "find language server root directories correctly",
+ "stack": "Lua",
+ "failures": [],
+ "revision": "85e732c62ac59ab7c12df71ddd020baa87948390",
+ "readOnly": true,
+ "previewMs": 247,
+ "files": 892,
+ "limits": [],
+ "initializationAllowed": true,
+ "conflicts": [],
+ "capabilities": [
+ {
+ "id": "project-knowledge",
+ "label": "Project knowledge",
+ "decision": "reuse",
+ "evidence": ["CONTRIBUTING.md"],
+ "missingEvidence": []
+ },
+ {
+ "id": "task-routes",
+ "label": "Task routes",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "verification-policy",
+ "label": "Verification",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": [
+ "No authoritative verification wrapper or candidate checks were found."
+ ]
+ },
+ {
+ "id": "verification-skill",
+ "label": "Verification skill",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["Verification behavior was not assessed."]
+ },
+ {
+ "id": "task-orchestration",
+ "label": "Task orchestration",
+ "decision": "create",
+ "evidence": [],
+ "missingEvidence": []
+ },
+ {
+ "id": "product-ux-guidance",
+ "label": "Product and UX guidance",
+ "decision": "not-assessed",
+ "evidence": [],
+ "missingEvidence": ["No user-facing product surface was detected."]
+ }
+ ],
+ "proposals": [
+ {
+ "path": "AGENTS.md",
+ "action": "patch"
+ },
+ {
+ "path": ".noxroot/config.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/knowledge/INDEX.md",
+ "action": "create"
+ },
+ {
+ "path": "CONTRIBUTING.md",
+ "action": "reference"
+ },
+ {
+ "path": ".noxroot/routes.yml",
+ "action": "create"
+ },
+ {
+ "path": ".noxroot/skills/independent-review/SKILL.md",
+ "action": "create"
+ }
+ ],
+ "growth": {
+ "createdFiles": 4,
+ "patchedFiles": 1,
+ "referencedFiles": 1,
+ "netLines": 82,
+ "documentationNetLines": 33
+ },
+ "commands": [],
+ "deterministic": true,
+ "context": {
+ "ms": 272,
+ "confidence": "insufficient",
+ "budget": {
+ "maximumBytes": 16000,
+ "selectedBytes": 12946,
+ "estimatedTokens": 3237
+ },
+ "selected": [
+ "AGENTS.md",
+ "CONTRIBUTING.md",
+ "lsp/anakin_language_server.lua",
+ "lsp/arduino_language_server.lua",
+ "test/test_dir/root_marker.txt",
+ "doc/server_configurations.md",
+ "doc/server_configurations.txt",
+ "scripts/docs_template.md"
+ ],
+ "owners": [],
+ "tests": ["test/test_dir/root_marker.txt"],
+ "unknowns": ["Owning source path", "Applicable approved verification command"]
+ },
+ "changedPaths": [
+ "AGENTS.md",
+ ".noxroot/config.yml",
+ ".noxroot/knowledge/INDEX.md",
+ ".noxroot/routes.yml",
+ ".noxroot/skills/independent-review/SKILL.md"
+ ],
+ "idempotent": true,
+ "syncProposals": 0,
+ "init": "applied-only-proposed-files",
+ "lifecycle": {
+ "skipped": "Tracked setup edits require a commit; this test does not commit to external repositories."
+ }
+ }
+ ],
+ "cleanup": true,
+ "package": {
+ "size": 120610,
+ "unpackedSize": 385248,
+ "sha256": "b7f74599743ba729e1c2ca6079ffa6c51d727fb16a8800f7e97335dde682e51f"
+ },
+ "finishedAt": "2026-09-03T20:06:12.530Z"
+}
diff --git a/tests/adoption.test.ts b/tests/adoption.test.ts
index 853e5a5..fab07a8 100644
--- a/tests/adoption.test.ts
+++ b/tests/adoption.test.ts
@@ -22,6 +22,20 @@ async function root(): Promise {
}
describe("mature repository adoption", () => {
+ it("does not reuse HTTP route documentation as agent task routes", async () => {
+ const repository = await root();
+ await mkdir(path.join(repository, "docs"));
+ await writeFile(path.join(repository, "package.json"), '{"name":"http-library"}\n');
+ await writeFile(path.join(repository, "AGENTS.md"), "Read [API routes](docs/routes.md).\n");
+ await writeFile(
+ path.join(repository, "docs/routes.md"),
+ "# Routes\nHTTP GET and POST endpoints.\n",
+ );
+ const preview = await previewRepository(repository);
+ expect(preview.capabilities.find((item) => item.id === "task-routes")?.decision).toBe("create");
+ expect(preview.proposedFiles.map((item) => item.path)).toContain(".noxroot/routes.yml");
+ });
+
it("follows explicit references, recognizes forwarding instructions, and reuses procedures", async () => {
const repository = await root();
await mkdir(path.join(repository, "docs"), { recursive: true });
diff --git a/tests/documentation.test.ts b/tests/documentation.test.ts
index abf519c..5023e88 100644
--- a/tests/documentation.test.ts
+++ b/tests/documentation.test.ts
@@ -1,7 +1,6 @@
import { access, readFile, readdir } from "node:fs/promises";
import path from "node:path";
import { describe, expect, it } from "vitest";
-import { buildContext } from "../src/core/context.js";
import { previewRepository } from "../src/core/preview.js";
import { renderPreview } from "../src/output.js";
import { fixtures } from "./helpers.js";
@@ -36,20 +35,19 @@ describe("documentation examples", () => {
}
});
- it("keeps the README context proof synchronized with the dogfood route", async () => {
+ it("labels the terminal illustration without inventing a successful run", async () => {
const readme = await readFile(path.resolve("README.md"), "utf8");
- const context = await buildContext("improve reviewer decision safety", path.resolve("."));
- const relatedTests =
- context.likelyTests.length > 1 ? ` (+${context.likelyTests.length - 1} related)` : "";
- for (const line of [
- `${context.selected.length} files · ~${context.budget.estimatedTokens.toLocaleString("en-US")} tokens`,
- context.likelyOwningSource[0]!,
- `${context.likelyTests[0]}${relatedTests}`,
- ...context.requiredVerification.map((item) => [item.executable, ...item.args].join(" ")),
- `${context.excluded.length} files left out`,
- ]) {
- expect(readme).toContain(line);
- }
+ expect(readme).toContain(
+ "Output excerpt with illustrative project paths and checks, not a captured test run.",
+ );
+ expect(readme).toContain(
+ '`context ""` is read-only. It does not start a task or run checks.',
+ );
+ expect(readme).not.toContain("improve reviewer decision safety");
+ const png = await readFile(path.resolve("docs/assets/noxroot-terminal.png"));
+ expect(png.subarray(0, 8).toString("hex")).toBe("89504e470d0a1a0a");
+ expect(png.readUInt32BE(16)).toBe(594);
+ expect(png.readUInt32BE(20)).toBe(867);
});
it("documents the application-agent framework boundary", async () => {
@@ -94,10 +92,9 @@ describe("documentation examples", () => {
if (/^(?:https?:|mailto:|#)/.test(target)) continue;
await expect(access(path.resolve(target.split("#")[0]!))).resolves.toBeUndefined();
}
- const assets = ["noxroot-logo.svg", "noxroot-workflow.svg"];
+ const assets = ["noxroot-logo.svg", "noxroot-terminal.png"];
expect((await readdir(path.resolve("docs", "assets"))).sort()).toEqual(assets);
- expect(readme).toContain("This transcript illustrates the stable information hierarchy");
- for (const asset of assets) {
+ for (const asset of assets.filter((name) => name.endsWith(".svg"))) {
const svg = await readFile(path.resolve("docs", "assets", asset), "utf8");
expect(svg).toContain(" {
expect(svg).toContain(" Promise> = [];
afterEach(async () => Promise.all(cleanup.splice(0).map((operation) => operation())));
describe("initialization, sync safety, context, and doctor", () => {
+ it("reuses local agent instructions even when Git ignores them", async () => {
+ const fixture = await fixtureCopy("typescript");
+ cleanup.push(fixture.cleanup);
+ await writeFile(
+ path.join(fixture.root, ".gitignore"),
+ "AGENTS.md\nCLAUDE.md\nprivate-notes.md\n",
+ );
+ await writeFile(
+ path.join(fixture.root, "CLAUDE.md"),
+ "Read AGENTS.md for repository guidance.\n",
+ );
+ await writeFile(path.join(fixture.root, "private-notes.md"), "Excluded ordinary content.\n");
+ await applyProposals(await previewRepository(fixture.root));
+
+ const after = await previewRepository(fixture.root);
+ expect(after.profile.files).toContain("AGENTS.md");
+ expect(after.profile.files).toContain("CLAUDE.md");
+ expect(after.profile.files).not.toContain("private-notes.md");
+ expect(after.proposedFiles).toEqual([]);
+ await expect(applyProposals(after)).resolves.toMatchObject({ created: [], patched: [] });
+ const privateProfile = await scanRepository(fixture.root, {
+ sensitivePaths: ["AGENTS.md", "CLAUDE.md"],
+ });
+ expect(privateProfile.files).not.toContain("AGENTS.md");
+ expect(privateProfile.files).not.toContain("CLAUDE.md");
+ });
+
it("creates only the minimal empty-repository setup", async () => {
const root = await temporaryDirectory();
cleanup.push(() => rm(root, { recursive: true, force: true }));
diff --git a/tests/learning-bounds.test.ts b/tests/learning-bounds.test.ts
new file mode 100644
index 0000000..e564f73
--- /dev/null
+++ b/tests/learning-bounds.test.ts
@@ -0,0 +1,130 @@
+import { mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises";
+import path from "node:path";
+import { afterEach, describe, expect, it } from "vitest";
+import { applyLearning, proposeLearnings, type LearningProposal } from "../src/knowledge/learn.js";
+import type { RunRecord } from "../src/orchestration/run.js";
+import { temporaryDirectory } from "./helpers.js";
+
+const roots: string[] = [];
+afterEach(async () =>
+ Promise.all(roots.splice(0).map((root) => rm(root, { recursive: true, force: true }))),
+);
+
+async function fullCorpus() {
+ const root = await temporaryDirectory("noxroot-learning-corpus-");
+ roots.push(root);
+ await mkdir(path.join(root, ".noxroot/knowledge/archive"), { recursive: true });
+ // Oversized and nested documents still consume real corpus space.
+ await writeFile(path.join(root, ".noxroot/knowledge/archive/existing.md"), "x".repeat(1_000_000));
+ return root;
+}
+
+const proposal: LearningProposal = {
+ id: "knowledge-corpus",
+ signature: "corpus-bound",
+ destination: ".noxroot/knowledge/new.md",
+ kind: "knowledge",
+ evidence: ["regression test"],
+ expectedFutureValue: "Preserve a validated boundary.",
+ duplication: "not-found",
+ conflict: "none",
+ content: "A validated repository convention.",
+ executableDestination: "The regression test enforces the behavior.",
+};
+
+describe("durable knowledge corpus bounds", () => {
+ it("links a nested learning destination relative to the knowledge index", async () => {
+ const root = await temporaryDirectory();
+ roots.push(root);
+ await applyLearning(root, {
+ ...proposal,
+ destination: ".noxroot/knowledge/decisions/cache.md",
+ });
+ expect(await readFile(path.join(root, ".noxroot/knowledge/INDEX.md"), "utf8")).toContain(
+ "](decisions/cache.md)",
+ );
+ });
+
+ it("refuses writes through a knowledge-directory symlink", async () => {
+ const root = await temporaryDirectory();
+ const outside = await temporaryDirectory();
+ roots.push(root, outside);
+ await mkdir(path.join(root, ".noxroot"));
+ await symlink(outside, path.join(root, ".noxroot/knowledge"), "junction");
+ await expect(applyLearning(root, proposal)).rejects.toThrow(/symbolic link/);
+ await expect(readFile(path.join(outside, "new.md"))).rejects.toThrow();
+ });
+
+ it("bounds index growth independently of a small learning entry", async () => {
+ const root = await temporaryDirectory();
+ roots.push(root);
+ await mkdir(path.join(root, ".noxroot/knowledge"), { recursive: true });
+ await writeFile(path.join(root, ".noxroot/knowledge/INDEX.md"), "x".repeat(24_000));
+ await expect(applyLearning(root, proposal)).rejects.toThrow(/index would exceed/);
+ await expect(readFile(path.join(root, proposal.destination))).rejects.toThrow();
+ });
+
+ it("refuses a new-file proposal when nested existing knowledge fills the corpus", async () => {
+ const root = await fullCorpus();
+ const run: RunRecord & { learningCandidates: unknown[] } = {
+ id: "task-corpus",
+ task: "bounded task",
+ status: "approved",
+ calls: [],
+ verification: [],
+ verificationGaps: [],
+ handoff: "",
+ learningCandidates: [
+ {
+ ...proposal,
+ expectedValue: proposal.expectedFutureValue,
+ whyNotExecutable: proposal.executableDestination,
+ },
+ ],
+ };
+ const result = await proposeLearnings(root, run);
+ expect(result.proposals).toEqual([]);
+ expect(result.rejected[0]?.reason).toContain("corpus");
+ });
+
+ it("rechecks total growth at apply without creating a target or changing the index", async () => {
+ const root = await fullCorpus();
+ const index = path.join(root, ".noxroot/knowledge/INDEX.md");
+ await writeFile(index, "# Existing index\n");
+ await expect(applyLearning(root, proposal)).rejects.toThrow(/corpus/);
+ expect(await readFile(index, "utf8")).toBe("# Existing index\n");
+ await expect(readFile(path.join(root, proposal.destination))).rejects.toThrow();
+ });
+
+ it("counts the generated index link in the total write budget", async () => {
+ const root = await fullCorpus();
+ const targetBytes = Buffer.byteLength(`# Validated learnings\n\n${proposal.content}\n`);
+ await writeFile(
+ path.join(root, ".noxroot/knowledge/archive/existing.md"),
+ "x".repeat(1_000_000 - targetBytes),
+ );
+ await expect(applyLearning(root, proposal)).rejects.toThrow(/corpus/);
+ });
+
+ it("does not let a direct apply call bypass the owned Markdown destination", async () => {
+ const root = await temporaryDirectory();
+ roots.push(root);
+ await writeFile(path.join(root, "README.md"), "# Preserve me\n");
+ await expect(applyLearning(root, { ...proposal, destination: "README.md" })).rejects.toThrow(
+ /owned/,
+ );
+ expect(await readFile(path.join(root, "README.md"), "utf8")).toBe("# Preserve me\n");
+ });
+
+ it("rejects alternate spellings of the managed index as a learning destination", async () => {
+ const root = await temporaryDirectory();
+ roots.push(root);
+ for (const destination of [
+ ".noxroot/knowledge/./INDEX.md",
+ ".noxroot/knowledge/index.md",
+ ".noxroot\\knowledge\\INDEX.md",
+ ]) {
+ await expect(applyLearning(root, { ...proposal, destination })).rejects.toThrow(/owned/);
+ }
+ });
+});
diff --git a/tests/package-smoke.mjs b/tests/package-smoke.mjs
index 7480962..4006ca9 100644
--- a/tests/package-smoke.mjs
+++ b/tests/package-smoke.mjs
@@ -104,7 +104,7 @@ try {
"docs/architecture.md",
"docs/adapters.md",
"docs/assets/noxroot-logo.svg",
- "docs/assets/noxroot-workflow.svg",
+ "docs/assets/noxroot-terminal.png",
]) {
await readFile(path.join(installedPackage, requiredFile), "utf8");
}