Repository navigation
v0.2.36.0 fix: the test run's contracts, refusals, save and store, and causes without private paths (Cycle 0050, PR-1 of 3) - #119
Conversation
…ths and a guarded home in causes (F11 F31 F58)
…s (F28 F38 F80 F81)
…topped and frees its slot, not a refusal (F55, F56, F97)
… outside the repository named, version-read guards tested (F34 F47 F101)
…uplicate help assertions are dropped and value cards name code in words (F13 F37 F87)
…sing, both rule bounds asserted (F74 F84)
…ead-failure and preparation-wiring rows of the environment (F10 F30 F67)
… docstring paragraph moved (F29 F42)
…reparation, before the history begins (F57)
…p refusals tested (F18 F50)
…save before reading its lines (F4)
…akeover waits a hang bound, not a two-second deadline (F5, F82)
… as the ordinary page (F6)
…ot the whole test by the runner's 2 s (F112, F210)
…d (F210), and the slow-read tests use a 1 s send limit with 8 ms pauses (F113)
…issing; Local chat for a Copilot-harness chat; token pins and a version pin (F86 F94); name failed tests in a refused recording (F60)
…y refusal, skill 1.0.47 (F103)
…d its start a typed refusal worded as the library's (F33, F92, F93)
…appended bytes, does not remember transient read errors, watches header.json, sanitizes reasons and removes a history sealed with no entry (F14 F15 F22 F41 F45 F63 F64 F65 F85 F102)
…erged review cycles, record open Critical and Major defects in an Issue, fix the last findings and merge
… capture gaps exposed, no Save for an empty history (F44, F48, F49, F51, F71, F72)
…ing tests Cycle 0049 changed (F17)
…ollow the store revision, the status item follows the run and redraws on change, a failed open is sanitized and keeps the replay without its debugger, with the Save matrix tests (F16 F19 F23 F24 F26 F39 F40 F46 F52 F53 F66 F68 F70 F73 F75 F76 F83 F88 F89 F90 F98)
…ce summary reads, recording reasons; help interpolates the Vitest major; docstrings; README (F14 F27 F35 F41 F43 F59 F69)
…ers only stop, diagnostics sink cannot throw (F9, F91, F99)
… Stop, completed run at the deadline, unknown-run stop, no-code result row (F20, F21, F25, F32, F36)
…output so it is not removed at its seal (F85)
…ond hang bound, and live entry waits for the keyboard back on the learner's draft (F231, F232)
…ettled its marker, which it does after its update ends (F5)
…dmission read and a browser run's error are sanitized (F219)
…vate path in the terminal reason (F233)
…y after the chosen position reached the disk (F231)
…iew limit's recorded defects and the bug-fix cycle that follows them (F238)
…wner is disposed reports and commits nothing (F237)
…se READER_RESULT_BOUND_MS (F239)
… waits for the saved stop on disk, with the reader's result bound (F231)
…he run starts, and hold the retired tab's close until it began so its wait is reached (F154, F240)
…ce range in the anchorIndex refusal (F242); docs(agents): the ship review limit's scope and the cycle rule's one exception worded (F241)
…terals the secrets scan reads as credentials
… an unexpected failure's cause (F243); a replaced journal restarts its scan (F244); transient file errors pinned (F245); pre-landing review fixes - protocol: every tool and resource answer describes an unexpected failure through StudyService.unexpectedFailure, which sanitizes its cause with the service's roots (a removed history's lstat named the storage folder) - the recording scan and the history read word a broken journal line through the store's describer, and the read cuts the whole reason to the index's 1,024-character bound (a long failure made the read itself fail) - tests: a gone history through codebook_read_resource, the scan's describer, the read's bound, a journal replaced by a longer file, the transient codes - isSealedEmptyHistory reads the error code through systemErrorCode (F247); holdsHistoryFolder documents why it stays synchronous (F246)
…only stop, and a learner's pause at the bound column is held (ship coverage audit)
…eason name no private path and keep their bound (ship coverage audit, pass 2)
… nothing (F251); capture gaps read again at the next save (F252); no read-history for a removed empty history (F253); write failures, status prerequisites and long causes name no private path and cut whole characters (F256, F257, F258); pre-landing review fixes, cycle 2 - isSealedEmptyHistory reads the seal: entryCount and journalBytes 0, beside an empty or absent journal; a damaged history (seal with entries, journal lost) is kept with its learning material (Codex structured P1) - the next learning-material save reads the run's capture gaps again when the seal's summary read failed for a transient reason - the run resource offers no read-history and names no historyUri for a test history sealed with no entry (D6 removes its folder) - writeFailureError sanitizes the write's cause; codebook_status sanitizes every missing prerequisite sentence; sanitizedCause cuts between characters with the cut marker - tests: the failed removal at the seal and in dropSealedEmpty, a summary after a recording's or a sealed history's folder is gone (F254, F255); the recording scan documents that it trusts its own append-only writer - NODE_TEST_HISTORY_SEAL_LIMIT_BYTES names the seal bound
…a literal the secrets scan reads as a credential
…earner files keep an empty history (F274); an output moment waits for a retiring replay debugger (F275); causes cut after their roots are hidden, by whole characters; pre-landing review fixes, cycle 3 - StudyService.unexpectedFailure sanitizes a StudyError's message and cause (a stored book, a reveal's stale pause, a playback refusal quoted raw paths) - a history holding learning material or understanding marks is never removed as empty, at the seal or by the count (Codex adversarial High) - a moment without a recorded stop waits for a replay debugger still being disposed, and leaves one the learner stopped stopped (Codex structured P2) - causeRootsFor builds every set of cause roots, and each real path is resolved once (F262); sanitizeCause hides roots before joining and cutting (F263); the save notice and the book catalog's reason are sanitized (F264); store reasons are cut between characters (F265) - the count removes a headerless sealed-empty folder (F266); replacing the store's describer forgets its memos (F267); the restore hook keeps section lines verbatim (F268) - VITEST_PACKAGE_PATH and VITEST_PROGRAM_PATH constants; one cited sentence (F270); simplifications (F271) - tests for the state-machine and coverage cells of cycle 3 (F272, F273)
…emoved empty or damaged histories, STALE_PAUSE after a failed release, a stopped replay debugger stays stopped, and where a long cause is cut (0.2.36.0 documentation audit)
…nd-in describes a failure as the real workspace does, so the notice is checked through describeFailure (F277)
Co-Authored-By: Claude <noreply@anthropic.com>
|
Required CI on The failure did not reproduce in any of these runs:
It is tracked as F279 in #118 and is fixed in PR-2 of this cycle (D52). Exact-head gate: the local verification gate (static checks, |
Refs #118 (Cycle 0050, bug-fix cycle, PR-1 of 3). This pull request closes the 155 PR-1 tasks of #118. PR-2 and PR-3 close the rest, and #118 stays open until PR-3 merges.
Summary
This pull request fixes bugs from two sources: Cycle 0049's carried list (F3 to F213), and the defects that this cycle's own reviews and gate found (F210 to F278). They are in the test run, its MCP contracts and refusals, save and store, redaction, the bundled skill, the compaction hook and the test scripts.
Test run and its MCP contracts
codebook_statusreadnode-testnot ready, with the count and the limit. A start becomes a typedPREREQUISITE_MISSING, worded as the library's refusal: the learner frees a place, never the agent (F92, F93).stop, and a continue is refused withSTALE_PAUSE(F91). A late continuation keeps a failed phase (F77).nodeTest.captureMissingis exposed and read again at the next learning-material save. The skill claims saved learning only when it is empty (F72, F252).Save, store and Saved studies
header.json(F102).read-history(F253).Private paths in causes
StudyErrors included. The storage folder, the workspace and the home folder read<storage>,<workspace>and~, also under their real paths (F243, F261, F58, F214).… [cut](F51, F258, F263, F265).Skill, hook, scripts and documents
test:shard --recordnames failed tests, in the singular for one (F60, F212). The README gains the Output › Codebook how-to and recovery rows (F103, F228). AGENTS.md states the owner's ship review limit (F229, F230, F238, F241).Load-dependent test failures (closure rule 3)
Tests only
Test Coverage
Step 7 coverage audit (first cycle). 30 paths, 28 covered, 93% value-weighted, 0 gaps. Two existing tests were extended:
configuredService.test.tsandownedNodeTestRun.test.ts.Later cycles. Their audits added tests for every reported gap:
f7c6573): every MCP answer path, and a broken journal line's reason;read-history, and an absent profile.Closure proof. #118 records every task's closure:
The driving agent re-executed every red run and every mutation proof.
Tests ran: tests count unavailable (the receipt has no count; the runner's summary reads 5,864 tests, 5,858 pass, 0 fail, 6 skipped or todo)
Tests ran: package count unavailable (the receipt has no count; the runner's summary reads 1,071 tests, 1,061 pass, 0 fail)
Pre-Landing Review
Three fixing cycles:
a96ada1except two: F246 closed with evidence (0.61 µs per call), and F248 moved to PR-3 (D47).0d336e5. Nine findings closed with evidence (F259). F260 moved to PR-2 (D48).763bf0e.The verification gate on the final tree then found F277 and F278. Both are fixed with proof (D51).
Other reviews:
open-code-review-delegate: F216 to F224.Gate edits: none detected (Step 7 gate rescan: 277 listed, 178 eligible, the tool read 50; the parent read all 15 tagged hunks and checked all 178 for lost assertions: 0 findings)
Exploratory QA
Compaction hook: 2 of 2 charters pass (a CRLF checkout, a renamed section). This pull request owns no native-check row of #118's table. Unit tests and the five Reader DOM checks cover its UI-facing changes (status item, Study pane lines); no native editor run does.
Design Review
No visual or layout change: the Study pane and status item change only their text and state, so design review was skipped.
Eval Results
The bundled skill changed (1.0.47), but this repository has no eval suite. The skill's routing and token tests pin it.
Scope Drift
Scope Check: CLEAN (every changed file maps to a PR-1 task of #118).
Plan Completion
The plan is #118's PR-1 task list: 155 of 155 DONE. An open bug-fix task would count NOT DONE. Five tasks belong to later pull requests of this cycle and stay in it:
Linked Spec
Linked to #118 (partial delivery: PR-1 of 3; not auto-closing). The remaining work:
Spec archive
20261023-031910-11275-cycle-0050-every-defect-cycle-0049-carried-is-fixed-or-close.md.Verification Results
TODOS
No TODOS.md: the cycle rule keeps every defect as a task in #118 (AGENTS.md).
Documentation
Audit binding (D51). The audit (
c50-pr1-docs-140131-r2, the second and last attempt) binds the documentation as committed. After it, the gate's fixes changed two release paths that no document describes:extension/src/constants.ts, the version constant;extension/src/tests/extension.test.ts, a test stand-in.Under the owner's direction in AGENTS.md, the audit stays valid for the documentation; no hash was refreshed. A CHANGELOG wording observation from the audit is PR-2's F276 (D50).
Status: updated. One factual correction was made in
extension/README.md; no blockers.Scope: the base-to-working-tree diff, including the unstaged CHANGELOG.md, VERSION, extension/README.md, extension/package.json and the package test version line. Every user-visible behavior named by the
## [0.2.36.0]entry was checked againstextension/README.mdand againstextension/src: the full-library status and refusal, pre-history checks, stops bound at another column, stopped-before-first-stop,read-historyoffers,STALE_PAUSEafter a failed release, the one-time seal retry after 200 ms, removal of empty histories and the kept damaged ones, Save before the first stop,captureMissing, the replay debugger that cannot start,PLAYBACK_PROFILE_UNSUPPORTED,<storage>/<workspace>/~causes, the 300-character cut and the bundled skill 1.0.47 Local chat advice. The first-attempt and parent README edits in the Test replays section match the code.Documentation health:
… [cut]sentence in the Output > Codebook paragraph now says the cut applies to tooltips, notifications, the run resource and MCP messages (at most 300 characters in the run resource) and that the Output entry keeps the whole cause, as the code does.Coverage debt: none new; every CHANGELOG behavior has a README reference sentence. No diagram drift (no architecture diagrams touched).
Test plan
All on the final tree
94aba4c(tree77da59a7d84d), fromextension/:pnpm format:check,pnpm typecheck,pnpm lint,pnpm health:static,pnpm dupes,pnpm dead-code: each exit 0pnpm test(gstack-evidence lanetests): exit 0; 5,864 tests, 5,858 pass, 0 failpnpm test:package(lanepackage): exit 0; 1,071 tests, 1,061 pass, 0 failstudy-bootstrap,wiki-reader-dom,study-reading-pose,understanding-focus,repository-return,verify): each exit 0pnpm health: exit 0node --test .codex/restore-product-context.test.mjs: exit 0gstack-pregate --stage preflight --allow-repo-commands: PASS (secrets clean, no stray file, no timing assertion added)The first gate run, on
b8cf9f1, failed. It found F277 (1 test) and F278 (32 package tests, one cause), andpnpm healthrefused to score a failed suite. Both are fixed, and the run above is the whole gate again.🤖 Generated with Claude Code