You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit cd11b49
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: CONTEXT.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,7 +78,7 @@ human; if a decision is genuinely wrong, write a new ADR that supersedes it.
78
78
79
79
| Term | Meaning |
80
80
|---|---|
81
-
|**gated project**|A project holding any one **gate marker**. |
81
+
|**gated project**|At the repository's top level, a project holding any one **gate marker**. Below the top level, a folder holding `research/DISCOVERY.md` and either `research/raw/` or a contract `new-project` rendered (ADR-0182). A commit that removes the evidence HEAD holds for a project is judged as one even with no marker left on disk, unless the project is below the top level and keeps no tracked path - deleted or moved whole (ADR-0184). |
82
82
|**gate marker**| One of exactly four artifacts: `research/DISCOVERY.md`, `research/plan.json`, `research/EVIDENCE.md`, `research/raw/`. Declared once, in `research-kit/lib/scaffold.mjs`; the predicate derives from it. |
83
83
|**gate verdict**| The single answer to *is this project gated, and does it pass?* — `evaluate()` in `research-kit/lib/gate.mjs`, consumed by all three callers so they cannot disagree. |
84
84
|**verdict context**| The unit the verdict reads: the research corpus, the machine-side gate state, and the operator's evidence policy. Owned by `verdictContext()` in `research-kit/lib/preflight.mjs` — preflight, doctor, and the gate path all consume it, so the same snapshot cannot yield a different verdict. |
@@ -167,7 +167,7 @@ Added 2026-09-21 under ADR-0032. The vocabulary of the ZIP that leaves this kit.
167
167
|**structural refusal**| A ZIP fault decided from the **central directory**, before one byte is inflated: traversal, absolute path, drive letter, backslash, NUL, duplicate, case collision, symlink, entry count, declared size, compression ratio. The directory is attacker-controlled too, so `inflateRawSync` also runs with `maxOutputLength` — the ceiling belongs to the runtime rather than to a field the attacker wrote. |
168
168
|**transport, not storage**| What an artifact is. Workflow artifacts last at most 90 days on a public repository and vanish with the run that produced them, so anything that must persist is committed instead. |
169
169
|**source** (of a capture) | The text a capture's Markdown was converted from - Firecrawl's `rawHtml`, the keyless transport's decoded HTML, the browser's rendered DOM - kept LF-folded beside the capture as `<capture>.source.html` and named in the fetch's ledger entry (`source`, `sourceSha256`), where it is verified like the capture (ADR-0140). A verbatim text or JSON capture has none, being its own source. Not a capture: nothing cites, grades or exports it; it exists so that a conversion defect can be repaired after the fact. |
170
-
|**net log**| Chromium's own record of every request it made during a render (`--log-net-log`), which the browser transport reads for the origin's HTTP status and the page's final URL, because `--dump-dom` reports neither (ADR-0137). The guard child has it written to a private folder and deletes it after the read; it never reaches the corpus. A render whose log names no response for the page is **status not observed**: the capture is graded `partial` saying so, and the status is never guessed from the page's text. |
170
+
|**net log**| Chromium's own record of every request it made during a render (`--log-net-log`), which the browser transport reads for the origin's HTTP status and the page's final URL, because `--dump-dom` reports neither (ADR-0137). The guard child has it written to the render's folder - which the transport makes, which holds the browser's profile too, and which is removed after the read and again by the transport once the child is gone (ADR-0185); it never reaches the corpus. A render whose log names no response for the page is **status not observed**: the capture is graded `partial` saying so, and the status is never guessed from the page's text. |
171
171
|**corroboration**| How many INDEPENDENT readings a closed unknown rests on, and the thirteenth check. Three shapes: one row (`single-source`), several rows from one host (`one-voice`), several hosts (`independent`). The middle one is the distinction a count cannot make — two pages from one vendor catch a misreading and cannot catch the vendor being wrong about itself. It reports and never fails on its own: a vendor's own reference is the authority on that vendor, and demanding a second opinion about it would be ceremony. `evidencePolicy=strict` is where an operator says otherwise. |
172
-
|**suite rule**| The commit gate's check in the kit's own checkout only (ADR-0120): a commit staging a path under `research-kit/` is allowed when `bin/selftest.mjs`, run by the gate and read through its result file, reports no failures. The checkout is recognised by four markers (`research-kit/lib/core.mjs`, `bin/gate.mjs`, `bin/selftest.mjs`, `test/`); a scaffolded project has none and never pays. An unsupported test is not red; a runner that produced no result is a block; a run past the **suite budget** is a block; a docs-only commit owes nothing. Overridden by `git commit --no-verify`, which nothing records: git skips the hook that would. The suite budget is 65 minutes - twice the slowest honest run measured on a supported host - or, when the operator sets `RESEARCH_KIT_GATE_TIMEOUT`, that gate watchdog less 120 s, never more than half of one under 240 s (ADR-0142). |
172
+
| **suite rule** | The commit gate's check in the kit's own checkout only (ADR-0120): a commit staging a path under `research-kit/` is allowed when `bin/selftest.mjs`, run by the gate and read through its result file, reports no failures. It runs on the commit, not the working tree: in a scratch repository built from the index being committed, so the runner, the tests and the library are the commit's own; a scratch that cannot be built, or an index that changes while the suite runs, is a block (ADR-0183). The checkout is recognised by four markers (`research-kit/lib/core.mjs`, `bin/gate.mjs`, `bin/selftest.mjs`, `test/`), at the top level or below it (#309); a scaffolded project has none and never pays. An unsupported test is not red; a runner that produced no result is a block; a run past the **suite budget** is a block; a docs-only commit owes nothing. Overridden by `git commit --no-verify`, which nothing records: git skips the hook that would. The suite budget is 65 minutes - twice the slowest honest run measured on a supported host - or, when the operator sets `RESEARCH_KIT_GATE_TIMEOUT`, that gate watchdog less 120 s, never more than half of one under 240 s (ADR-0142). |
173
173
|**the suite describes the kit, not the machine**| What `bin/selftest.mjs` guarantees before the first test runs (ADR-0123): the run has a scratch home of its own (`HOME`, `USERPROFILE`; `APPDATA`, `LOCALAPPDATA` on Windows), no `RESEARCH_KIT_*` variable but the ones that describe the host or the run (the result file, the unsupported opt-in, the browser, the gate timeout, the live opt-ins, the harness's `RESEARCH_KIT_TEST_*` seams), and no vendor key. A test that spawns a kit command had read the operator's machine config, deployed kit, CLI login and keys, so a `strict` posture config turned 18 tests red and a Firecrawl CLI installed and not logged in two more - a verdict about the machine, not the kit. A test that wants a config, a deployed kit or a key makes its own. |
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -643,7 +643,7 @@ Environment variables take precedence where one exists: `RESEARCH_KIT_TRANSPORT`
643
643
| the run stops with `credits ran out` and exits 2 | the Firecrawl account is empty | top up and run the same command, or run it with `--fallback` to finish on the free transports; `research --status` shows the budget |
644
644
|`research.mjs` or `decompose.mjs` exits 2 with "builder" | this machine is declared a builder | collect on the collector, or `install-hooks.mjs --role collector`|
645
645
| tests print `UNSUP PYTHON-NOT-FOUND` and block | no Python 3.11+ | install it; a green suite without it would claim two languages agree while testing one |
646
-
| Windows: `git add`refuses with a long-path error |`MAX_PATH`|`git config core.longpaths true`|
646
+
| Windows: `git clone`, `checkout` or `add`fails with `Filename too long`|`MAX_PATH`(260): the clone's folder plus the repository's longest paths, under `docs/decisions/`, pass it | clone into a short folder, or `git clone -c core.longpaths=true ...`; in an existing clone,`git config core.longpaths true`|
647
647
| the commit gate blocks with "is not staged with them" | in this repository, a declared code path changed without `docs/ARCHITECTURE.md`| update the map in the same commit |
0 commit comments