Docs: reconcile published v1.4.2 guidance and the post-release Graphify boundary - #1009
Conversation
v1.4.2 is published from 55339bf under the annotated v1.4.2 tag, and release #952 is closed, but current-facing docs on main still described it as an unpublished source candidate pending #952. - State v1.4.2 as the published package-index baseline across README, install, quickstart, try-in-10-minutes, the public-release and OSS checklists, the early-adopter runbooks, sessions, github-setup, builders-grok-cursor, the PyPI runbook, and release history. README, current-state, and the rollout plan now use versioning.public_baseline_sentence() verbatim. - Convert docs/v142-release-notes.md and docs/v142-qualification.md into final records. Only proven outcomes are PASS, each bound to its evidence: the independent Codex audit of PR #1006 head 32706cf, CI run 35188065537, publish run 35189302150, the wheel/sdist digests, and both verified local Board restarts. Run 35189721623's skipped publish jobs are recorded as the intended posture. Metadata upload is marked not required; no cloud aggregate check is claimed. Both pages note that the immutable v1.4.2 tag still carries the prepublication snapshots; the tag is not touched. - Record v1.4.0/v1.4.1/v1.4.2 as shipped in the roadmap, Board complete at 55339bf, #951 as the separately pending hosted canary, and v1.5.0 Slack as the active phase. Historical PR mapping moves to past tense and merged PRs now use /pull/ URLs while issues use /issues/. - Surface Graphify as shipped optional functionality: README navigation to setup/lifecycle/queries, a ramp-up flow in graphify-setup.md, the excluded inputs and the absence of a working-tree watcher, and a dated historical banner on graphify-evaluation.md that preserves its benchmark record. - Surface the persistent Board service and its macOS/launchd boundary from README and docs navigation, fix the board-demo browser wording, and move the stranded delayed_health_failed row into the delayed-health section where its post-apply semantics belong. - Add official pipx/uv installation links and command -v preflight checks without any curl-pipe-shell, and record the install boundaries adoption feedback keeps returning to. - Sync templates/lanes/README.md with the packaged copy so both document the supported `never` token expiry. - Make README links absolute so the built PyPI long description resolves, and teach release_readiness to accept either link spelling. - Canonicalize the installed-lineage harness temp root and both sides of every provenance assertion so the documented replay is portable on macOS, where temporary directories arrive through the /var -> /private/var symlink. - Move CHANGELOG Unreleased to the top and empty it; its entries shipped in v1.4.1 and are recorded there. - Rewrite tests/test_release_v142.py away from candidate-state enforcement onto the published identity, README link behavior, packaged-template consistency, issue-vs-pull URLs, and the repaired lifecycle table. Refs #1008. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four multi-line commands in the new ramp-up flow lost their trailing line-continuation, joining each command onto one line with stray whitespace. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PR #1007 merged to main at b863e63 after v1.4.2 was published, so the two are no longer the same integration. Current docs still described #1007 as an open, unmerged pull request and left its entry out of the changelog entirely. - CHANGELOG: Unreleased is no longer empty. It carries #1007's Fixed entry and states the boundary directly -- accepted on main, in no published package, intended for the next appropriate release. The v1.4.1 shipped entries and the immutable 1.4.2 section are unchanged, and the Graphify fix is not double-booked into 1.4.2. - graphify-setup.md: replace the stale "separate open pull request ... not merged and not released" paragraph with a "Published `v1.4.2` versus current `main`" section naming what merged, that the accepted 0.9.58 pin and wheel digest are untouched because this is a Code Mower fix rather than a provider upgrade, and that a generation built before the next release must be rebuilt with `context-graph refresh`. A published generation is never rewritten in place, so upgrading alone does not repair an older partial frontend generation. - current-state-and-roadmap.md: the published package carries the originally shipped integration; the merged compatibility fixes are recorded as on main awaiting the next appropriate release, in the Graphify phase and in the delivery-order note about merged-but-unpublished work. - README, context-graph-lifecycle.md and context-graph-queries.md: state where the #1007 behaviour does and does not apply, so a reader on the published package is not told the separate provider-manifest budget, `doc_ref` exclusions, or JavaScript/TypeScript test conventions are available to them. - graphify-evaluation.md: point the historical banner at that boundary section. - test_release_v142.py: drop the assertion that #1007 is absent from the changelog, which encoded the now-false claim that it is unmerged. Replace it with coverage that Unreleased carries the merged entry, that the setup and roadmap pages state the boundary in both directions including the rebuild requirement, that no current page still calls #1007 open, and that the pin stays at 0.9.58. Rebased onto b863e63 with #1007's changelog entry and documentation preserved. Refs #1008. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
| def _links_to_repository_doc(markdown: str, label: str, relative_path: str) -> bool: | ||
| """Whether ``markdown`` links ``label`` at ``relative_path``. | ||
|
|
||
| README.md is also the built package's long description, where a relative | ||
| destination resolves against the package index rather than the repository, | ||
| so repository links there are absolute GitHub URLs. Both spellings satisfy | ||
| this check; only the label and the file it lands on are required. | ||
| """ | ||
|
|
||
| pattern = re.compile( | ||
| r"\[" + re.escape(label) + r"\]\(\s*<?([^)\s>]+)>?[^)]*\)" | ||
| ) | ||
| for destination in pattern.findall(markdown): | ||
| if destination.partition("#")[0].rstrip("/").endswith(relative_path): | ||
| return True |
There was a problem hiding this comment.
💡 Bug: _links_to_repository_doc matches path via endswith, allowing false positives
In src/code_mower/release_readiness.py:107-122, _links_to_repository_doc checks destination.partition("#")[0].rstrip("/").endswith(relative_path). Because this is a suffix check rather than an exact match, a link to an unrelated file like docs/OTHER_SUPPORT.md or vendor/SECURITY.md would incorrectly satisfy the check for label "Support"/SUPPORT.md or "Security Policy"/SECURITY.md. This weakens the release-readiness gate that is supposed to verify README links point at the real top-level SUPPORT.md/SECURITY.md/CODE_OF_CONDUCT.md files; a rename or the addition of a similarly-suffixed file elsewhere in the repo would make the check pass without those exact docs being linked.
Require the match to be the whole path or preceded by a path separator, not an arbitrary suffix.:
def _links_to_repository_doc(markdown: str, label: str, relative_path: str) -> bool:
pattern = re.compile(
r"\[" + re.escape(label) + r"\]\(\s*<?([^)\s>]+)>?[^)]*\)"
)
for destination in pattern.findall(markdown):
cleaned = destination.partition("#")[0].rstrip("/")
if cleaned == relative_path or cleaned.endswith("/" + relative_path):
return True
return False
Was this helpful? React with 👍 / 👎
|
Note Automatic reviews are paused because your team has used its included automatic processing for this billing period (headroom scales with your seat count). You can still comment "Gitar review" to run one anytime, and automatic reviews resume on their own by October 1. Add seats for more headroom. Code Review 👍 Approved with suggestions 0 closed / 1 findingsDocumentation audit reconciling v1.4.2 published guidance with current 💡 Bug: _links_to_repository_doc matches path via endswith, allowing false positives📄 src/code_mower/release_readiness.py:107-121 In src/code_mower/release_readiness.py:107-122, _links_to_repository_doc checks Require the match to be the whole path or preceded by a path separator, not an arbitrary suffix.🤖 Prompt for agentsReview coverageRules No rules evaluated OptionsDisplay: compact → Counting what did not apply, without listing it. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
Two documentation inaccuracies found in root review, both in the post-v1.4.2 Graphify guidance. "Everything above describes that package" was false. PR #1007 added the language-extras and runtime-ownership paragraphs to "Separate acquisition environment", which sits above the boundary section, so part of "above" describes current main rather than the published v1.4.2 package. The claim is now scoped to the base setup and ramp-up -- acquisition, the separate contained offline build, and steps 1 through 7 -- and the two #1007 paragraphs carry an explicit post-v1.4.2 marker where a reader meets them, which the boundary section names. The rebuild guidance implied every generation built before the next release must be rebuilt. It is narrowed to the generations #1007's compatibility gaps actually affected: most often an older frontend generation left partial, whose oversized provider manifest was refused or whose inputs a missing language parser could not process. A generation "context-graph status --json" already reports usable needs no rebuild. Applied in docs/graphify-setup.md, README.md, and docs/current-state-and-roadmap.md; the changelog and release records carried no equivalent claim. Two tests in tests/test_release_v142.py enforce the boundary: one rejects any "everything above describes that package" spelling and requires the scoped claim plus the in-place post-v1.4.2 marker above the boundary section, the other rejects blanket rebuild-everything-built-before wording across all three pages and requires each to tie the rebuild to the partial state and exempt a generation status already reports usable. Both fail against the pre-fix text. No product code changed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex audit (merge-authority lane)Head SHA: Codex Audit: PASS Summary: No actionable regressions were identified. Test execution was blocked by the environment's missing PyYAML dependency. Findings: none. |
_links_to_repository_doc accepted any destination whose path ended with the required relative path, so docs/OTHER_SUPPORT.md satisfied the SUPPORT.md requirement and the public-docs-linked-from-readme check could pass on a README that never links the real file. Accept a destination only when its path is exactly the relative path or ends with "/" + the relative path. Both spellings the check exists for still pass: the relative form in the repository README and the absolute GitHub blob URL the packaged long description needs. Query strings are now dropped alongside fragments, since neither changes which file the destination resolves to. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex audit (merge-authority lane)Head SHA: Codex Audit: BLOCKED Summary: The release-readiness change introduces a confirmed false-positive for broken documentation links. Focused tests could not run because PyYAML is unavailable in the environment. Findings:
|
The path-segment boundary added in 58976cc still let two destinations satisfy the public-docs-linked-from-readme check without addressing the required file: a nested relative path that does not exist in this tree, such as docs/SUPPORT.md for SUPPORT.md, and any unrelated absolute URL whose path ends in /SUPPORT.md, including another owner's or another repository's GitHub URL. Resolve the destination to the one repository-relative path it lands on, then require that path to equal the required document. A relative destination is normalized against the repository root, where README.md sits, so docs/SUPPORT.md resolves to itself and no longer matches. An absolute destination resolves only when it is this repository's own GitHub URL -- github.com/codemower-ai/code-mower/{blob,raw}/<ref>/<path> -- reduced to the path under its ref; every other host, owner, and repository resolves to nothing. Query strings and fragments are still dropped first, since neither changes which file is addressed. A site-root /SUPPORT.md no longer passes. GitHub does not resolve a site-root path against the repository, so that spelling was a broken link the check was accepting; nothing in this repository uses it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex audit (merge-authority lane)Head SHA: Codex Audit: PASS Summary: No actionable regressions were identified. Test execution was blocked by sandbox restrictions and the missing PyYAML dependency. Findings: none. |
|
Owner gate reconciliation for exact head
|
Closes #1008.
What this is
One repository-wide documentation audit after the v1.4.2 publication, rebased
onto
mainatb863e638so it reconciles against the current tree rather thanthe pre-#1007 base.
v1.4.2 is published from release commit
55339bf1acf76d33be5937e80bdaad772e0b2bf5under the annotated
v1.4.2tag, and release #952 is closed -- but current-facingdocs still described it as an unpublished source candidate pending #952. Separately,
PR #1007 has since merged to
mainatb863e638, so the published package andmainare no longer the same Graphify integration, and several pages still called#1007 an open, unmerged pull request.
No source behaviour changes here beyond the release-readiness README link check
-- widened to accept the absolute spelling, then tightened until it resolves a
destination to the one document it addresses -- and two test-harness portability
fixes.
Published v1.4.2 versus current
mainThis is the distinction the rebase forced, and it is now stated explicitly rather
than left to the reader:
v1.4.2package contains the optional Graphify integrationexactly as it originally shipped. That claim is scoped to the base setup and
ramp-up -- acquisition, the separate contained offline build, and steps 1
through 7. It is not "everything above": Fix Graphify inventory limits and frontend test discovery #1007's language-extras and
runtime-ownership paragraphs sit above that section, so they now carry an
explicit post-
v1.4.2marker where a reader meets them, and the boundarysection names them as the only paragraphs so marked.
mainadditionally carries Fix Graphify inventory limits and frontend test discovery #1007's real-pilot compatibility fixes: a bounded16 MiB provider-manifest reader separate from the 256 KiB compact
generation-manifest bound, explicit refusal of an oversized provider manifest,
doc_refnodes accepted as declared non-code exclusions, andrelated_testsrecognition of JavaScript/TypeScript
.test/.specand__tests__conventionsplus
importsrelationships. These are intended for the next appropriate releaseand are in no published package.
0.9.58pin and wheel digest are unchanged. Fix Graphify inventory limits and frontend test discovery #1007 is aCode Mower compatibility fix, not a provider upgrade.
never rewritten in place. That matters only for the generations Fix Graphify inventory limits and frontend test discovery #1007's
compatibility gaps actually affected: most often an older frontend generation
left
partial, one whose oversized provider manifest was refused or whoseinputs a missing language parser could not process. Those are rebuilt explicitly
with
code-mower context-graph refresh, then confirmed usable rather thanpartial. This is not a blanket rebuild of everything built before thatfuture release: ask
code-mower context-graph status --jsonfirst, and ageneration it already reports usable needs no rebuild.
#1007's own
Unreleasedchangelog entry and its documentation changes are preservedverbatim through the rebase.
Changes
Published identity. README, install, quickstart, try-in-10-minutes, the
public-release and OSS checklists, the early-adopter runbooks, sessions,
github-setup, builders-grok-cursor, the PyPI runbook, and release history now state
v1.4.2 as the published package-index baseline. README, current-state, and the
rollout plan use
versioning.public_baseline_sentence()verbatim so the next releasemoves them together.
Release records.
docs/v142-release-notes.mdanddocs/v142-qualification.mdbecome final records. Only proven outcomes are PASS, each bound to its evidence: the
independent Codex audit of PR #1006 head
32706cf5, CI run 35188065537, publish run35189302150, the wheel/sdist digests, and both verified local Board restarts. Run
35189721623's skipped publish jobs are recorded as the intended posture, not a
failure. Metadata upload is marked not required and no cloud aggregate check is
claimed. Both pages note that the immutable
v1.4.2tag still carries theprepublication snapshots; the tag is not touched.
Roadmap. v1.4.0/v1.4.1/v1.4.2 recorded as shipped, Board complete at
55339bf,#951 kept explicit as the separately pending hosted Devin canary that this release
does not claim and does not close, #1007 recorded as merged-on-main awaiting the
next release, and v1.5.0 Slack as the active phase. Merged PRs now use
/pull/URLswhile issues use
/issues/.Graphify. README navigation to setup/lifecycle/queries, a ramp-up flow in
graphify-setup.mdwith the excluded inputs and the absence of a working-treewatcher, a new "Published
v1.4.2versus currentmain" section, a dated historicalbanner on
graphify-evaluation.mdthat preserves its benchmark record, andversion-boundary notes in
context-graph-lifecycle.mdandcontext-graph-queries.mdso a reader on the published package is not told #1007's behaviour is available to
them. Four ramp-up commands got their lost backslash continuations back.
The boundary section states its claim precisely rather than as "everything above",
which was false: #1007 added two paragraphs to
Separate acquisition environment
that sit above it. Those paragraphs now carry an explicit post-
v1.4.2marker inplace, and the rebuild guidance in
graphify-setup.md, README, and the roadmap isnarrowed to the generations those compatibility gaps affected rather than every
generation built before the next release.
Board and install. The persistent Board service and its macOS/launchd boundary
surfaced from README and docs navigation; board-demo browser wording fixed; the
stranded
delayed_health_failedrow moved into the delayed-health section. Officialpipx/uv installation links and
command -vpreflight checks, with no curl-pipe-shell,plus the install boundaries adoption feedback keeps returning to.
Portability and consistency. The installed-lineage harness canonicalizes its temp
root and both sides of every provenance assertion, so the documented replay is
portable on macOS where temp dirs arrive through the
/var->/private/varsymlink.templates/lanes/README.mdsynced with the packaged copy. README links made absoluteso the built PyPI long description resolves, with
release_readinessaccepting eitherspelling -- and resolving the destination to the document it actually addresses, so
the allowance cannot be satisfied by a lookalike file or a foreign URL (see below).
CHANGELOG.
Unreleasedmoved to the top. It is not empty: it carries #1007'sFixed entry and states the boundary directly. The entries previously listed there
shipped in v1.4.1 and are recorded under that release.
Tests.
tests/test_release_v142.pyrewritten away from candidate-stateenforcement onto the published identity, README link behaviour, packaged-template
consistency, issue-vs-pull URLs, and the repaired lifecycle table. The assertion that
#1007was absent from the changelog -- which encoded the now-false claim that it isunmerged -- is replaced by coverage that
Unreleasedcarries the merged entry, thatthe setup and roadmap pages state the boundary in both directions including the
rebuild requirement, that no current page still calls #1007 open, and that the pin
stays at
0.9.58.Two further tests enforce the precise boundary. One rejects any "everything above
describes that package" spelling, requires the scoped claim, and requires the
post-
v1.4.2marker to appear above the boundary section with both #1007 paragraphsstill under the acquisition heading that section names. The other rejects blanket
rebuild-everything-built-before wording in
graphify-setup.md, README, and theroadmap, and requires all three to tie the rebuild to the
partialstate, name thefrontend generation, and record that a generation
statusalready reports usableneeds none. Both were verified to fail against the pre-fix text.
Release-readiness link check: resolve the destination, do not match its suffix
This gate took two review rounds. Both findings were real, and the second superseded
the first fix.
Round 1 (Gitar, on
4129cb65)._links_to_repository_doccompared destinationswith a bare
endswith(relative_path), so any path merely ending in the requiredfilename satisfied the requirement:
[Support](docs/OTHER_SUPPORT.md)passed thepublic-docs-linked-from-readmecheck while never linkingSUPPORT.md. Fixed in58976cc7by requiring a path-segment boundary.Round 2 (Codex exact-head audit of
58976cc7, P2 --audit comment).
The boundary rule was still a suffix test, and two false positives survived it:
[Support](docs/SUPPORT.md)passed, because the path ends at a/SUPPORT.mdboundary -- even though no such file exists in this tree.
[Support](https://example.com/SUPPORT.md)passed, as didhttps://github.com/someone-else/code-mower/blob/main/SUPPORT.md. Any unrelated URLending in the required filename satisfied a check about this repository's docs.
The fix in
05b01f5c. The destination is now resolved to the singlerepository-relative path it addresses, and that path has to equal the required
document. A new
_repository_destination_pathhelper does the resolving:README.md sits (
posixpath.normpath).SUPPORT.md,./SUPPORT.mdanddocs/../SUPPORT.mdall resolve toSUPPORT.md;docs/SUPPORT.mdresolves todocs/SUPPORT.mdand no longer matches;../SUPPORT.mdescapes the root andresolves to nothing.
URL. A single anchored pattern --
https://github.com/codemower-ai/code-mower/then
bloborraw, then the ref segment -- yields the path under that ref. Theowner and repository come from a named
REPOSITORY_SLUGconstant, so a differenthost, owner, or repository resolves to nothing however its URL ends.
blobandraware the two views that address a file; nothing narrower would accept theREADME's own links, and nothing broader is used.
mailto:,http:, …), a scheme-relative//host/..., or a site-root/SUPPORT.mdresolves to nothing.Query strings and fragments are still dropped before resolving, since neither changes
which file a destination addresses;
…/SUPPORT.md?plain=1and…/SUPPORT.md#anchorboth still pass.
One intended spelling was deliberately dropped: site-root
/SUPPORT.md, which58976cc7accepted. GitHub does not resolve a site-root path against the repository,so that was a broken link the check was passing. Nothing in this repository uses it,
and
migration release-readiness --jsonis still 20/20 withpublic-docs-linked-from-readmepass on the real README.Regression tests. The unit test over
_links_to_repository_docnow runs 11accepted and 14 rejected destinations as named subtests. Accepted: the relative form,
./-prefixed, a traversal that lands on the file, a trailing slash, fragment andquery variants, and the absolute
blobURL on both a branch and a tag, therawURL,and its fragment and query variants. Rejected: both flagged false positives
(
docs/SUPPORT.mdandhttps://example.com/SUPPORT.md), plus the nested absolutepath, another owner, another repository, a nested foreign host, the scheme-relative
form, site-root, four sibling-suffix spellings, and parent traversal. The end-to-end
test drives
render_release_readinessover five synthetic READMEs and assertspublic-docs-linked-from-readmeis fail for the lookalike, the nested path, andthe foreign URL, and pass for the exact relative and absolute forms.
Both tests were run against the
58976cc7implementation and fail there -- 11 subtestfailures across the two, including one for each flagged false positive at both the
unit and end-to-end level -- so neither assertion is vacuous.
This touches
src/code_mower/release_readiness.pyandtests/test_release_hygiene.pyonly. No documentation and no product behaviour outside this one gate.
Validation
Rebased onto
b863e638(exact currentorigin/main); one CHANGELOG conflict resolvedby this writer. Final head
05b01f5c698c16669912ac5dfaa0d19721e02408.The Codex P2 fix above landed in
05b01f5con top of58976cc7. It touchessrc/code_mower/release_readiness.pyandtests/test_release_hygiene.pyonly -- 2files, +142/-37, no documentation and no other product code. The validation below was
re-run at
05b01f5c. The earlier heads stand as reported:58976cc7carried theGitar fix (2 files, +86/-1) and
4129cb65the two P2 documentation corrections(4 files, +104/-13, no product code).
test_release_hygiene.pyat05b01f5ctest_release_v142.pyat05b01f5c4129cb65)05b01f5ctest_release_v142(50),test_release_hygiene(363),test_documentation(2),test_documented_commands(7),test_release_v141(7),test_release_qualify(70, 1 skipped)4129cb65test_release_v142(50),test_release_hygiene(361),test_documentation(2),test_documented_commands(7),test_context_graph_lifecycle(269),test_context_graph_query(132),test_context_graph(25),test_context_graph_connection(42),test_context_readiness(12),test_lineage_producer_artifacts(5),test_release_v141(7),test_release_qualify(70)58976cc7codedocs/SUPPORT.mdandhttps://example.com/SUPPORT.mdat both the unit and end-to-end levelruff check .scripts/privacy_scan.pyprivacy scan passedgit diff --checkcompileall src scriptsat05b01f5cmigration release-readiness --jsonat05b01f5cpublic-docs-linked-from-readmestill pass, since the README's links are this repository's ownblob/main/URLs. No-publish posture, next action is thepublish_testpypi=false publish_pypi=falsedry runscripts/guard_package_workflows.pyscripts/smoke_easy_mode.pypython -m build+twine check --strictProject-URLset intact; newgraphify-setup.md#published-v142-versus-current-mainanchor verified to resolve#1007-open phrasing outside the test guard lists, no personal paths, no private repo name, no token-shaped values in the branch diffpython -m unittest discover -s testsThe full suite was run without a pipeline so the Python exit code survived; stdout and
stderr were captured to files and the exit code read back from disk.
ruff check .,scripts/privacy_scan.py, andgit diff --checkwere re-run at05b01f5cand are clean there. Rows not marked with a commit were run at4f4a5456and are unaffected by the later commits:
4129cb65changes three Markdown pages andone test module, and
58976cc7and05b01f5cchange one gate function and its tests.None touches packaging inputs, workflows, or the long description, so the build,
twine, METADATA, and workflow-guard rows still hold; the05b01f5cre-run abovecovers every suite that reads the changed code.
The 5 full-suite failures are pre-existing and unrelated
All five are macOS lane-runner tests whose fake Codex CLI exits 2:
test_devin_builder_lane.DevinMacLaneRunnerFunctionalTests.test_devin_lane_auto_selects_and_targets_correctly_prefixed_local_branch(error)test_branch_policy.GeneratedRunnerTests.test_fix_round_guards_exactly_the_policy_compliant_targettest_branch_policy.GeneratedRunnerTests.test_fix_round_without_a_policy_keeps_the_lane_prefix_targettest_branch_policy.GeneratedRunnerTests.test_generated_devin_to_codex_takeover_and_replay_need_no_prefix_patchtest_branch_policy.GeneratedRunnerTests.test_handoff_runner_without_ambient_tmpdir_keeps_guard_exit_and_replay_contractsThey touch no file this PR changes. Reproduced identically in a clean detached
worktree at unmodified
origin/mainb863e638(4 failures + 1 error) and at thepublished release commit
55339bf(4 failures + 1 error) -- the commit whose full CIrun was green. This is a condition of this macOS host, not a regression from #1007 or
from this branch. Linux CI on this PR is the authority for them.
Live-issue follow-up
completion and hand off to v1.5.0; keep it open for the remaining phases.
55339bfand shipped inv1.4.2; close once Board: integrate head-bound evidence and qualify local and hosted session visibility #951's remaining boundary is settled.
authorization. Not claimed by v1.4.2, not closed by this PR, and documented as a
separately pending boundary.
roadmap.
canary and final acceptance here; independent Slack work is not blocked.
release, and note in those release notes that a generation those gaps left
partial-- not every generation built before it -- needs an explicitrebuild.
Boundaries
No product or cloud schema expansion. No paid hosted session. No private repository
name, graph/index content, raw provider log, personal path, or source appears in any
changed file. Archived transcripts and historical release runbooks are preserved as
historical records with framing added only where needed; the immutable
v1.4.2tag isnot touched.
🤖 Generated with Claude Code