diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a462f0c..abbeb8b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -375,7 +375,7 @@ jobs: mkdir -p dist/release-assets while IFS= read -r -d '' artifact; do cp "$artifact" dist/release-assets/; done < <(find dist/native -type f -name 'codebase-graph-*.tar.gz' -print0) while IFS= read -r -d '' checksum; do cp "$checksum" dist/release-assets/; done < <(find dist/native -type f -name 'codebase-graph-*.tar.gz.sha256' -print0) - test "$(find dist/release-assets -type f | wc -l | tr -d ' ')" = '8' + test "$(find dist/release-assets -type f | wc -l | tr -d ' ')" = '4' - name: Upload validated release set uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e6f87756..cf533f28 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "4.0.0" + ".": "4.0.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 63a11be9..50ead764 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## [4.0.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.4...v4.0.1) (2026-10-27) + +This release replaces the unpublished 4.0.0 proposal ([#156](https://github.com/rabii-chaarani/codebaseGraph/pull/156)). Its production gate failed before any tag or release was created. The storage changes below are included because 3.0.4 remains the last published release. + +### ⚠ BREAKING CHANGES + +* **storage:** database open helpers return GuardedDatabase and reject path forms whose native resource identity cannot be proven. Connections borrow the guarded handle; canonical Windows extended paths retain their namespace. + +### Features + +* **storage:** automate graph disk cleanup and controlled legacy retirement ([#153](https://github.com/rabii-chaarani/codebaseGraph/pull/153)) ([75a99c8](https://github.com/rabii-chaarani/codebaseGraph/commit/75a99c840aa53e75a3f14df8dab41979c9efa19c)) + +### Bug Fixes + +* **ci:** archive historical Python evidence helpers without changing their bytes, and check repository release policy in ordinary CI ([#159](https://github.com/rabii-chaarani/codebaseGraph/pull/159)) ([34eac4f](https://github.com/rabii-chaarani/codebaseGraph/commit/34eac4f8644adc046093babd84ee1fdbffdae853)) +* **release:** stop replaying old release overrides when a manifest version has no published tag, and stage the four public archive/checksum files for the two supported native targets ([#162](https://github.com/rabii-chaarani/codebaseGraph/pull/162)). + ## [4.0.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.4...v4.0.0) (2026-10-27) diff --git a/Cargo.lock b/Cargo.lock index b73fbaed..1ab264a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -187,7 +187,7 @@ dependencies = [ [[package]] name = "codebase-graph" -version = "4.0.0" +version = "4.0.1" dependencies = [ "cc", "fs2", @@ -777,7 +777,7 @@ dependencies = [ [[package]] name = "k-wiki" -version = "4.0.0" +version = "4.0.1" dependencies = [ "ammonia", "axum", @@ -1956,7 +1956,7 @@ dependencies = [ [[package]] name = "xtask" -version = "4.0.0" +version = "4.0.1" dependencies = [ "flate2", "serde", diff --git a/Cargo.toml b/Cargo.toml index 0134de31..c94271ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "codebase-graph" -version = "4.0.0" +version = "4.0.1" edition = "2021" rust-version = "1.82" description = "Native codebaseGraph CLI and MCP server for local code knowledge graphs." diff --git a/crates/k-wiki/Cargo.toml b/crates/k-wiki/Cargo.toml index 320cbc6a..fa0ea4f8 100644 --- a/crates/k-wiki/Cargo.toml +++ b/crates/k-wiki/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "k-wiki" -version = "4.0.0" +version = "4.0.1" edition = "2021" rust-version = "1.82" description = "OKF knowledge wiki, projection builder, and MCP service." @@ -24,7 +24,7 @@ bundled-windows-extensions = ["codebase-graph/bundled-windows-extensions"] # The patched 4.1 backport preserves the workspace's Rust 1.82 MSRV. ammonia = "~4.1.8" axum = { version = "0.8", default-features = false, features = ["http1", "json", "tokio"] } -codebase-graph = { version = "4.0.0", path = "../.." } +codebase-graph = { version = "4.0.1", path = "../.." } pulldown-cmark = { version = "0.13", default-features = false, features = ["html"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml index 15ee0402..ce544547 100644 --- a/crates/xtask/Cargo.toml +++ b/crates/xtask/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xtask" -version = "4.0.0" +version = "4.0.1" edition = "2021" publish = false diff --git a/crates/xtask/src/release/workflow_tests.rs b/crates/xtask/src/release/workflow_tests.rs index 04be89fd..4cb4ec2f 100644 --- a/crates/xtask/src/release/workflow_tests.rs +++ b/crates/xtask/src/release/workflow_tests.rs @@ -255,6 +255,40 @@ fn proposal_reports_pending_release_then_proceeds_after_finalization() { assert!(!f.output().contains("ready=true")); } +#[test] +fn staged_assets_match_the_supported_native_targets() { + let script = step("validate-artifacts", "Stage complete validated set"); + for complete in [true, false] { + let f = Fixture::new(); + let native = f.root.join("dist/native"); + fs::create_dir_all(&native).unwrap(); + for target in crate::NATIVE_TARGETS { + let archive = target.archive_name("2.0.0"); + fs::write(native.join(&archive), b"validated archive").unwrap(); + fs::write(native.join(format!("{archive}.sha256")), b"checksum").unwrap(); + } + if !complete { + let archive = crate::NATIVE_TARGETS[0].archive_name("2.0.0"); + fs::remove_file(native.join(format!("{archive}.sha256"))).unwrap(); + } + let output = f.execute(&format!("set -euo pipefail\n{script}"), &[]); + assert_eq!( + output.status.success(), + complete, + "{}", + String::from_utf8_lossy(&output.stderr) + ); + if complete { + assert_eq!( + fs::read_dir(f.root.join("dist/release-assets")) + .unwrap() + .count(), + crate::NATIVE_TARGETS.len() * 2 + ); + } + } +} + #[test] fn ci_run_recovery_dry_run_validates_without_authorizing_publication() { let f = Fixture::new(); diff --git a/docs/release.md b/docs/release.md index 6e7d1008..7034e740 100644 --- a/docs/release.md +++ b/docs/release.md @@ -161,6 +161,23 @@ After upgrading from a release archive: To force a specific next version, merge a commit whose body contains a `Release-As: X.Y.Z` trailer. +### Unpublished 4.0.0 recovery + +Release PR #156 merged as 4.0.0, but its immutable source failed the production repository gate before publication. +PR #159 corrected that gate on later main; it cannot change the old release source. PR #162 therefore proposes 4.0.1 +from corrected main instead of retrying or tagging the failed 4.0.0 source. The old proposal remains unpublished, not tagged. + +`release-please-config.json` uses that failed merge, `7038e66ff8271ffddc511f879cf8d28353a09b2d`, as its +`bootstrap-sha` commit cutoff. When the manifest's tag is missing, this prevents a full-history scan from replaying +an old `Release-As: 1.2.2` trailer. The cutoff is not evidence of publication and does not authorize a tag, CI run, +or artifact source. Once the manifest version has a real release tag, release-please ignores the bootstrap cutoff. +No permanent `release-as` version pin is used. The 4.0.1 notes explicitly include the unpublished storage change; +all existing exact-SHA CI, production, artifact, and crate-publication gates still apply to the new release merge. + +Until this correction reaches main, another ordinary main merge can make the old generator overwrite the open PR. +Reapply the reviewed correction if that happens; do not publish a placeholder 4.0.0 tag or clear pending labels to +work around proposal generation. Publication and maintainer merge approval remain separate from this repair. + ## Conda-Forge Release Path This repository intentionally does not upload directly to Anaconda.org. Conda distribution should go through diff --git a/docs/testing/release-pr-162/README.md b/docs/testing/release-pr-162/README.md new file mode 100644 index 00000000..00a20d98 --- /dev/null +++ b/docs/testing/release-pr-162/README.md @@ -0,0 +1,43 @@ +# Release PR #162 repair evidence + +Work: **COD-100 / GH-162** · Scryer change: `chg-9sernm`. + +The user approved “make it 4.0.1 and resolve the issues first” on 2026-10-27. This is a proportional repair under the existing [release process](../../../docs/release.md) and the canonical wiki `knowledge/architecture/release-verification.md`; no new architecture or publication contract is introduced. Merge, exact-source main CI, publication and maintainer-owned closure remain separate. + +## Acceptance evidence + +| Criterion | Evidence | +| --- | --- | +| Stop replaying the old `Release-As: 1.2.2` and unrelated historical notes | `generator-audit.md`, `generator-4.0.1.json`: actual release-please 17.6.0, writes blocked, manifest 4.0.0 plus failed-release bootstrap cutoff yields 4.0.1. `generator-future.json` distinguishes a local overlay from synthetic future tagged states. | +| Keep all package/dependency/lock/manifest versions consistent at 4.0.1 | `verification.json` snapshot hashes; locked Cargo metadata; `verify-release-version v4.0.1`; immutable metadata helper after commit. | +| Preserve unreleased storage changes and report 4.0.0 truthfully | `CHANGELOG.md` 4.0.1 includes the storage feature and breaking change; comparison starts from published v3.0.4. Historical 4.0.0 section stays. Failed PR156 is not tagged or described as published. | +| Stage the complete supported artifact set without accepting an incomplete set | New `staged_assets_match_the_supported_native_targets` executes actual workflow Bash with two target archives and checksums. `asset-staging-baseline.log` demonstrates failure before 8→4 fix; `xtask.junit.xml` records 44 passing tests, including incomplete-set rejection. | +| Preserve release gates | `local-checks.log`: format, warnings-denied xtask Clippy, workflow policy, normal and production repository gates, and v4.0.1 version validation pass. Confirmation arguments reproduce existing job settings, not new environment approval. | + +## Reproduction + +From this checkout, with an isolated `CARGO_TARGET_DIR` if sharing other worktrees: + +```text +cargo fmt --check +cargo nextest run -p xtask --locked --config-file docs/testing/release-pr-162/nextest.toml --profile cod100 +cargo clippy -p xtask --all-targets --locked -- -D warnings +cargo run -p xtask --locked -- check-workflows +cargo run -p xtask --locked -- release-gate +cargo run -p xtask --locked -- release-gate --production --confirm release-environment --confirm private-vulnerability-reporting +cargo run -p xtask --locked -- verify-release-version v4.0.1 +cargo metadata --no-deps --locked --format-version 1 +cargo run -p xtask --locked -- release-metadata --source-sha --source-dir . +``` + +The generator check is a separate isolated Node project, not a repository dependency. Install `release-please@17.6.0` +there and copy `read-only-generation.cjs` into that directory. Supply a GitHub read token on stdin through the normal +CLI credential flow; never save it to a file or log it. The script guards REST writes and GraphQL mutations, only +builds candidates/change sets, and writes the two scenario reports in its current directory. It tests current main, +so its output changes after this PR merges. The committed JSON records the exact live-main baseline named above. + +The recorded environment is local Darwin ARM64, Cargo 1.96.0, nextest 0.9.140. These checks do not qualify native Windows/macOS consumer archives or substitute for PR/main CI. No tag, release, crate, workflow dispatch, merge or release-label mutation is part of this repair. + +The original working tree has unrelated edits and an older checkout. Scryer is configured against it, so these isolated-snapshot passing reports must not be fingerprinted as evidence for those different source files. Source/test hashes and JUnit are retained here for correct-snapshot reconciliation. No whole-project drift advancement was performed. + +Until this configuration reaches main, a new ordinary main CI completion can regenerate the old proposal over the open PR. There is no supported open-PR hold label in release-please 17.6.0. Do not bypass recognition by removing pending labels, fabricate a v4.0.0 tag, or change workflow permissions to mask that risk. diff --git a/docs/testing/release-pr-162/asset-staging-baseline.log b/docs/testing/release-pr-162/asset-staging-baseline.log new file mode 100644 index 00000000..14148e74 --- /dev/null +++ b/docs/testing/release-pr-162/asset-staging-baseline.log @@ -0,0 +1,59 @@ + Compiling libc v0.2.189 + Compiling version_check v0.9.5 + Compiling proc-macro2 v1.0.106 + Compiling unicode-ident v1.0.24 + Compiling quote v1.0.45 + Compiling serde_core v1.0.228 + Compiling typenum v1.20.1 + Compiling cfg-if v1.0.4 + Compiling rustix v1.1.4 + Compiling serde v1.0.228 + Compiling crc32fast v1.5.0 + Compiling zmij v1.0.21 + Compiling generic-array v0.14.7 + Compiling bitflags v2.13.0 + Compiling adler2 v2.0.1 + Compiling simd-adler32 v0.3.10 + Compiling itoa v1.0.18 + Compiling hashbrown v0.15.5 + Compiling equivalent v1.0.2 + Compiling serde_json v1.0.150 + Compiling indexmap v2.7.1 + Compiling miniz_oxide v0.9.1 + Compiling ryu v1.0.23 + Compiling libyaml-rs v0.3.0 + Compiling memchr v2.8.2 + Compiling syn v2.0.117 + Compiling serde_derive v1.0.228 + Compiling errno v0.3.14 + Compiling cpufeatures v0.2.17 + Compiling filetime v0.2.29 + Compiling xattr v1.6.1 + Compiling tar v0.4.46 + Compiling crypto-common v0.1.7 + Compiling block-buffer v0.10.4 + Compiling digest v0.10.7 + Compiling sha2 v0.10.9 + Compiling flate2 v1.1.10 + Compiling yaml_serde v0.10.7 + Compiling xtask v1.2.2 (/private/tmp/codebasegraph-cod100-release-401/crates/xtask) + Finished `test` profile [unoptimized + debuginfo] target(s) in 6.29s + Running unittests src/main.rs (/private/tmp/codebasegraph-cod100-cargo-target/debug/deps/xtask-d46547d2161cf356) + +running 1 test +test release::workflow_tests::staged_assets_match_the_supported_native_targets ... +thread 'release::workflow_tests::staged_assets_match_the_supported_native_targets' (35033717) panicked at crates/xtask/src/release/workflow_tests.rs:276:9: +assertion `left == right` failed: + left: false + right: true +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +FAILED + +failures: + +failures: + release::workflow_tests::staged_assets_match_the_supported_native_targets + +test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 43 filtered out; finished in 0.03s + +error: test failed, to rerun pass `-p xtask --bin xtask` diff --git a/docs/testing/release-pr-162/delivery.md b/docs/testing/release-pr-162/delivery.md new file mode 100644 index 00000000..5b61054c --- /dev/null +++ b/docs/testing/release-pr-162/delivery.md @@ -0,0 +1,23 @@ +# Release repair delivery + +- Work: COD-100 / GH-162; Scryer `chg-9sernm`, proportional repair with no changed architecture claims. +- User approval: “make it 4.0.1 and resolve the issues first”, 2026-10-27. This authorizes the open-PR repair, not a merge or publication. +- Source repair commit: `654e1c6aabf7126b1732992bd17f86bb9ef37ff3`. Whitespace-only evidence follow-up: `39e817427bd9cd8fb65f6ff907599e0b7ff6ec6f`. Both retain the ten reviewed source/test hashes in `verification.json`. +- Existing PR: https://github.com/rabii-chaarani/codebaseGraph/pull/162; title now `chore(main): release 4.0.1`; body contains the curated 4.0.1 notes. Trusted pending label preserved. +- Failed unpublished 4.0.0 proposal: https://github.com/rabii-chaarani/codebaseGraph/pull/156#issuecomment-6437846462. Supersession is truthful commentary only; no tagged label or placeholder tag. +- Local checks: 44/44 nextest release-tool tests (JUnit), warnings-denied scoped Clippy, formatting, workflow policy, normal/production release gates, version validation and locked metadata passed. Actual pinned generator read-only checks demonstrate version-boundary recovery and future normal operation. +- Committed-source metadata helper run at `654e1c6aabf7126b1732992bd17f86bb9ef37ff3` returns that exact source SHA, version 4.0.1, tag v4.0.1, and the exact curated nonempty notes. This validates metadata, not main-history membership, CI or publication authority. +- Fresh independent review: GPT-6.1 Sol / Max (`openai-codex/gpt-6.1-sol`, `thinking=max`), exact ten-file hash snapshot, no confirmed P0–P3 findings. Independent 44-test rerun passed. See `final-review.md`. +- Observed hosted CI for `39e817427bd9cd8fb65f6ff907599e0b7ff6ec6f`: https://github.com/rabii-chaarani/codebaseGraph/actions/runs/40478036814, queued at delivery. Later documentation/memory-only delivery commits have identical reviewed source hashes and require their own current PR check status. Do not interpret queued or configured jobs as passing evidence. +- Linear: https://linear.app/codebasegraph/issue/COD-100/correct-release-pr-162-to-401-and-reconcile-failed-400-proposal, In Review pending hosted gates and maintainer acceptance. +- Reusable knowledge: `memory/procedural/missing-manifest-release-replays-version-overrides-2026-10-27`, recorded/verified/activated through configured k-wiki. Recommended validation accepted with zero diagnostics; link check zero diagnostics; configured site build succeeded (328 routes, 2 assets). Existing architecture/wiki spec identities and approvals retained. + +## Unchanged limitations + +No merge, tag, release, registry publication, workflow dispatch, release-label mutation or integration-settings change was performed. The old source remains unpublished. Eventual release requires its own successful exact-source main-push CI and unchanged production/artifact/crate gates. + +Until the corrected config reaches main, another ordinary main CI completion can overwrite the manually repaired open PR. Recheck/reapply the reviewed correction if that occurs; no supported hold label exists. + +Scryer/graph are configured against the unrelated original checkout. JUnit and exact source hashes are retained; do not ingest them as passing fingerprints of different original-worktree source or advance whole-project drift. No new or changed claims were needed. The graph does not index hidden release config/workflow or the split release test file; Scryer file anchors and discovered xtask/docs scoped inspection. + +Original unrelated source/wiki/spec edits were preserved. The new focused memory and generated wiki output are the only intentional additions in that original knowledge bundle; generated `.kwiki` state was built through k-wiki, never edited manually. diff --git a/docs/testing/release-pr-162/final-review.md b/docs/testing/release-pr-162/final-review.md new file mode 100644 index 00000000..54a75878 --- /dev/null +++ b/docs/testing/release-pr-162/final-review.md @@ -0,0 +1,61 @@ +# COD-100 / GH-162 final read-only review + +## Outcome + +**No confirmed P0–P3 findings in the reviewed repair.** Proceed with delivery of this bounded correction, subject to the remaining remote-state and hosted-CI checks below. This is not merge approval or publication qualification. + +## Reviewer and exact snapshot + +- Fresh independent reviewer; no implementation work performed. Required adversarial-review-engineer skill and applicable requirements, correctness, release operations, trust-boundary, verification, and maintenance lenses were used. +- Actual spawn profile confirmed by the parent: `model="openai-codex/gpt-6.1-sol"`, `thinking="max"`; returned model matches. Fresh session `01a17c92-d8f4-731a-8cb2-becef5f1d851`. RLM exposes no separate `agent_type`/`fork_turns` parameters; this session received the bounded task, not a forked conversation. +- Worktree: `/private/tmp/codebasegraph-cod100-release-401`. +- Baseline main: `34eac4f8644adc046093babd84ee1fdbffdae853`. +- Existing malformed PR HEAD: `95e3830c6997190d2eaaf4147dc6c7352c1880f8`. **HEAD alone is not the reviewed correction.** Reviewed the full working-tree diff against baseline main and the source/test SHA-256 map in `docs/testing/release-pr-162/verification.json`. +- All ten enumerated source/test hashes matched before and after checks. Diff is 10 files, 78 insertions, 9 deletions. Evidence files are additional documentation, not source changes. +- User scope: “make it 4.0.1 and resolve the issues first”; existing PR #162, COD-100, Scryer `chg-9sernm`. No merge, tag, release, registry publish, source rewrite, remote write, or workflow-settings change was performed by this reviewer. + +## Contracts examined + +1. **Versions and notes:** root/wiki/xtask package versions, wiki dependency, lockfile packages and release manifest agree on 4.0.1. Independent locked Cargo metadata confirmed all three workspace versions. `CHANGELOG.md:3–18` compares from published v3.0.4, includes the unreleased storage breaking change/feature, #159 and this repair, and truthfully describes 4.0.0 as unpublished. Historical 4.0.0 notes remain intact. +2. **No persistent version pin:** `release-please-config.json:2` adds only the failed merge's bootstrap cutoff (`7038e66ff8271ffddc511f879cf8d28353a09b2d`), not `release-as` or `last-release-sha`. Verified pinned release-please 17.6.0 implementation: bootstrap applies only while no matching manifest release/tag is found; matching release discovery restores normal commit boundaries. The cutoff excludes the old 1.2.2 override and is not publication authorization. +3. **Generator evidence:** examined the actual read-only 17.6.0 generation report and request trace: main manifest 4.0.0 plus the cutoff proposes 4.0.1 with agreeing updates, with no REST writes or GraphQL mutations. Examined the future fixture and its script: synthetic matching 4.0.1 release yields no proposal without newer commits and 4.0.2 with only the added fix. That future check is explicitly synthetic, not proof of future hosted publication. Overlaying the repaired 4.0.1 manifest on pre-publication history generates 4.0.2 as documented; it must not be used to regenerate the manually repaired current proposal. +4. **Complete native assets:** current typed targets are macos-arm64 and windows-x86_64. `.github/workflows/release.yml:378` changes 8 to 4 public files. The unchanged validator at workflow line 369 runs first and requires both unique target provenance documents, exact SHA/version, correct archive/digest/sidecar contents, archive contracts, and no unexpected or missing files (`crates/xtask/src/main.rs:681–778`). Thus reducing the staging count does not admit an arbitrary four-file artifact set. The new actual-Bash test at `workflow_tests.rs:259–290` accepts the complete supported set and rejects a missing checksum. +5. **Safety boundaries:** full diff changes no CI binding, trusted branch/label recognition, production confirmations, artifact source/provenance, publishing permissions/environment, tag conflict handling, crate validation, finalization or concurrency gate. The only workflow change is the public-file count. Scryer existing release/metadata/note responsibilities remain satisfied without new architecture claims. + +## Executed reviewer checks + +All passed in this exact worktree, with an isolated Cargo target directory: + +- `CARGO_TARGET_DIR=/private/tmp/cbg-cod100-review-target cargo test -p xtask --locked`: **44 passed**, zero failed/ignored/filtered; includes actual-Bash complete/incomplete staging and release authorization/publisher regressions. Output: `/tmp/cbg-cod100-review-xtask.log`. +- `cargo run -p xtask --locked -- check-workflows`. +- `cargo run -p xtask --locked -- release-gate`. +- `cargo run -p xtask --locked -- release-gate --production --confirm release-environment --confirm private-vulnerability-reporting`. +- `cargo run -p xtask --locked -- verify-release-version v4.0.1`. +- `cargo metadata --no-deps --locked --format-version 1`. +- `git diff --check 34eac4f8644adc046093babd84ee1fdbffdae853`. + +Also inspected supplied before-fix failure, 44-pass nextest/JUnit report, local strict-Clippy/workflow/gate evidence and generator audit. The before-fix staging test failed because the valid two-target set was rejected, establishing that the new test detects the repaired defect. No full workspace tests, native builds or publish dry-run were started by this reviewer. + +## Conditional risks and remaining delivery checks (not confirmed defects) + +- **Open-PR overwrite before merge:** current main still has the old generator config. Another ordinary-main successful CI event can overwrite the repaired open PR. This is an existing operational window, explicitly documented at `docs/release.md:177–179`, not a reason to fabricate a v4.0.0 tag, remove trusted release labels, invent a hold label or weaken workflow gates. Recheck/reapply the exact correction if the bot changes it. +- **Remote metadata/supersession not yet applied at review time:** parent reported no GitHub mutations yet. Verify pushed branch content equals this reviewed source snapshot; verify PR title/body consistently say 4.0.1 and retain the curated notes. Add truthful supersession communication for failed/unpublished #156 without describing it as tagged/published. These are pending delivery steps, not source findings. Existing empty #156 labels must not be misrepresented as a task change. +- **Hosted qualification remains required:** PR CI and the eventual release merge's own complete main-push CI, artifacts, production checks and publish gates must pass. Local production confirmation flags exercise configured policy logic; they do not independently verify owner-controlled environment settings. No merge/publication is authorized by these results. +- **Repository integration scope:** used configured wiki memory and release architecture plus Scryer governing rules/orientation/claims. Graph returned docs/xtask orientation but does not index the hidden config/workflow and split/new release file; parent-provided graph discovery and Scryer file anchors supplied the bounded scope. Configured graph/Scryer are against the unrelated original worktree, so no fingerprint reconciliation or memory/model activation was attempted from this isolated snapshot. Wiki's older four-target description is pre-existing and contradicted by current typed targets/docs/workflow; no architecture change is introduced here. Linear connection inventory is pending; no updates were claimed. + +## Assumptions and constants + +Assume the already approved recovery is 4.0.1 superseding an unpublished 4.0.0, not repair/publication of the old immutable source. Reviewed changed constants: versions to 4.0.1; public file count 8 → 4; bootstrap SHA to the failed 4.0.0 merge. Reviewer changed none. Reusable knowledge is warranted about missing manifest-matching tags replaying historical Release-As trailers; candidate/activation work is deferred to the implementation owner because this review is read-only. + +## Reviewed source SHA-256 + +- `.github/workflows/release.yml`: `56b4530d355685f13da6b690ca28c401f9e3211d7db76d387c63281524fcc2e2` +- `.release-please-manifest.json`: `f87e6c288df6c2b7ae134915c0a4e9f0828551c9c8d200f64a32743015bdd050` +- `CHANGELOG.md`: `c83a38e8e2f9a91324ec47784809eeca94f016d51f122f81cfe61a4dc0971978` +- `Cargo.lock`: `03b13a29495eb408054cb381fd3dee3f029c28cce07ad73998c38ba1667463f1` +- `Cargo.toml`: `e9c384f697b8c0af11c2e73c269c2cd1711f1be4445a7d0909629b931a2335cc` +- `crates/k-wiki/Cargo.toml`: `a819729c99aa5927f0b9e796a77031860fe3f3eb5d796d9263e26dadc0cd72b3` +- `crates/xtask/Cargo.toml`: `b5eb92df487c6ecfe6c17d01b8b1f812ac2ca6bb11e5fb7267763be01ae0e30c` +- `crates/xtask/src/release/workflow_tests.rs`: `ce8e04c3afd53f9095d5e549a111ab0cb294b32105aac511fa7ba6bfd9b06c2a` +- `docs/release.md`: `0e871d395f34cbbfb4a1d9095bdbe781b503a7981fca5c0f9f9af5c64e5303b0` +- `release-please-config.json`: `aee0cc12299ec52e26f56bf7621a7e48a50445f0105041da9fed5eea178f5497` diff --git a/docs/testing/release-pr-162/generator-4.0.1.json b/docs/testing/release-pr-162/generator-4.0.1.json new file mode 100644 index 00000000..6e32084a --- /dev/null +++ b/docs/testing/release-pr-162/generator-4.0.1.json @@ -0,0 +1,129 @@ +{ + "releasePleaseVersion": "17.6.0", + "bootstrapSha": "7038e66ff8271ffddc511f879cf8d28353a09b2d", + "results": [ + { + "title": "chore(main): release 4.0.1", + "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n## [4.0.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v4.0.0...v4.0.1) (2026-10-27)\n\n\n### Bug Fixes\n\n* **ci:** archive historical Python evidence helpers ([#159](https://github.com/rabii-chaarani/codebaseGraph/issues/159)) ([34eac4f](https://github.com/rabii-chaarani/codebaseGraph/commit/34eac4f8644adc046093babd84ee1fdbffdae853))\n\n---\nThis PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).", + "version": "4.0.1", + "updates": [ + { + "path": "CHANGELOG.md", + "content": "# Changelog\n\n## [4.0.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v4.0.0...v4.0.1) (2026-10-27)\n\n\n### Bug Fixes\n\n* **ci:** archive historical Python evidence helpers ([#159](https://github.com/rabii-chaarani/codebaseGraph/issues/159)) ([34eac4f](https://github.com/rabii-chaarani/codebaseGraph/commit/34eac4f8644adc046093babd84ee1fdbffdae853))\n\n## [4.0.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.4...v4.0.0) (2026-10-27)\n\n\n### ⚠ BREAKING CHANGES\n\n* **storage:** database open helpers return GuardedDatabase and reject path forms whose native resource identity cannot be proven. Connections borrow the guarded handle; canonical Windows extended paths retain their namespace.\n\n### Features\n\n* **storage:** automate graph disk cleanup and controlled legacy retirement ([#153](https://github.com/rabii-chaarani/codebaseGraph/issues/153)) ([75a99c8](https://github.com/rabii-chaarani/codebaseGraph/commit/75a99c840aa53e75a3f14df8dab41979c9efa19c))\n\n## [3.0.4](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.3...v3.0.4) (2026-10-21)\n\n\n### Bug Fixes\n\n* **deps:** update ammonia to the patched 4.1.8 release ([#152](https://github.com/rabii-chaarani/codebaseGraph/pull/152))\n* **k-wiki:** close diagnostic gaps and add regression coverage ([#149](https://github.com/rabii-chaarani/codebaseGraph/issues/149)) ([98ff47a](https://github.com/rabii-chaarani/codebaseGraph/commit/98ff47aee385366f5884193f70f050da79169e71))\n\n### Tests\n\n* Verify stale-worker recovery and native-phase teardown across manual graph publication ([#152](https://github.com/rabii-chaarani/codebaseGraph/pull/152)).\n\n## [3.0.3](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.2...v3.0.3) (2026-10-15)\n\n\n### Bug Fixes\n\n* **ci:** exercise native lifecycle faults on Windows ([d98143e](https://github.com/rabii-chaarani/codebaseGraph/commit/d98143e2c7be72403587ecfcc15f2f7e533dc2a0))\n* **ci:** preserve compiler compatibility and patch sanitizer ([b7acfc4](https://github.com/rabii-chaarani/codebaseGraph/commit/b7acfc456663f98961c2e26529330b7a6ae12127))\n* **runtime:** keep Windows recovery probes read-only ([7c368f8](https://github.com/rabii-chaarani/codebaseGraph/commit/7c368f87ca110724da304dea65fd9a29e04c1e41))\n* **runtime:** recover stale workers and clean up database loaders ([809e64b](https://github.com/rabii-chaarani/codebaseGraph/commit/809e64b6b05b19c0700954f8496f491f1a126fc3))\n* **runtime:** recover stale workers and contain database loaders ([fdf73d0](https://github.com/rabii-chaarani/codebaseGraph/commit/fdf73d0e273c77a8b09c6d6b5a120958a56fff37))\n\n## [3.0.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.1...v3.0.2) (2026-09-30)\n\n\n### Bug Fixes\n\n* **wiki:** preserve UTF-8 boundaries in recall snippets ([5bc3883](https://github.com/rabii-chaarani/codebaseGraph/commit/5bc38834db8b6686c75911d517f61fd99b81c4d4))\n* **wiki:** prevent Unicode memory recall from closing MCP transport ([366dd54](https://github.com/rabii-chaarani/codebaseGraph/commit/366dd543356a84c9b48ba882eaf9c46de4a0021c))\n\n## [3.0.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v3.0.0...v3.0.1) (2026-09-25)\n\n\n### Bug Fixes\n\n* **storage:** keep graph reads available during Windows cleanup contention ([#134](https://github.com/rabii-chaarani/codebaseGraph/issues/134)) ([fd7362f](https://github.com/rabii-chaarani/codebaseGraph/commit/fd7362fc3d2b3a44837d151ed514cca69964c996))\n* **storage:** make direct publication recovery idempotent ([#126](https://github.com/rabii-chaarani/codebaseGraph/issues/126)) ([f674ece](https://github.com/rabii-chaarani/codebaseGraph/commit/f674ece9558dc903825f2266bd704d68cba20897))\n\n## [3.0.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v2.0.0...v3.0.0) (2026-09-24)\n\n\n### ⚠ BREAKING CHANGES\n\n* remove semantic_enrichment and semantic_provider_mode Rust fields and the retired CLI flags. Existing JSON/config keys remain readable through unknown-field handling; graph and storage compatibility is unchanged.\n\n### Bug Fixes\n\n* isolate MCP clients and bound abandoned hook work ([#123](https://github.com/rabii-chaarani/codebaseGraph/issues/123)) ([8c3bcf3](https://github.com/rabii-chaarani/codebaseGraph/commit/8c3bcf317d2bc8e5d803ee59b8f86678c1a55a1c))\n* recover MCP sessions and serialize hook cache delivery ([#125](https://github.com/rabii-chaarani/codebaseGraph/issues/125)) ([3fc635f](https://github.com/rabii-chaarani/codebaseGraph/commit/3fc635fbbac46e5674a94dbce50c10d0db8036d2))\n* **release:** publish verified merge commits and resume blocked releases ([#127](https://github.com/rabii-chaarani/codebaseGraph/issues/127)) ([4594f38](https://github.com/rabii-chaarani/codebaseGraph/commit/4594f384488e4764c18ca41ac69be146b328c18c))\n\n## [2.0.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.8.1...v2.0.0) (2026-09-23)\n\n\n### ⚠ BREAKING CHANGES\n\n* remove semantic_enrichment and semantic_provider_mode Rust fields and the retired CLI flags. Existing JSON/config keys remain readable through unknown-field handling; graph and storage compatibility is unchanged.\n\n### Code Refactoring\n\n* remove retired semantic enrichment interfaces ([#122](https://github.com/rabii-chaarani/codebaseGraph/issues/122)) ([d32d3e3](https://github.com/rabii-chaarani/codebaseGraph/commit/d32d3e3a2b5f35e2b1ebb74fd5931c363757a8a6))\n\n## [1.8.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.8.0...v1.8.1) (2026-09-22)\n\n\n### Bug Fixes\n\n* keep MCP daemon alive after client disconnects ([#120](https://github.com/rabii-chaarani/codebaseGraph/issues/120)) ([fd357ab](https://github.com/rabii-chaarani/codebaseGraph/commit/fd357abd37824687db2b1e910add87c264969f2b))\n\n## [1.8.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.7.1...v1.8.0) (2026-09-22)\n\n\n### Features\n\n* add agent-loop graph hooks ([#118](https://github.com/rabii-chaarani/codebaseGraph/issues/118)) ([d091d4f](https://github.com/rabii-chaarani/codebaseGraph/commit/d091d4fee000c69550313833dd8436260571f9c9))\n\n## [1.7.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.7.0...v1.7.1) (2026-09-08)\n\n\n### Bug Fixes\n\n* keep repository graphs fresh under MCP ([#115](https://github.com/rabii-chaarani/codebaseGraph/issues/115)) ([e29a46b](https://github.com/rabii-chaarani/codebaseGraph/commit/e29a46b9528cc596486f529c5ca9531a9748687c))\n\n## [1.7.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.6.0...v1.7.0) (2026-08-25)\n\n\n### Features\n\n* **parser:** add web and WebAssembly language support ([#107](https://github.com/rabii-chaarani/codebaseGraph/issues/107)) ([9afad95](https://github.com/rabii-chaarani/codebaseGraph/commit/9afad9533fa9d1f80398120cbd8ea9a7e0bd3276))\n\n## [1.6.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.5.2...v1.6.0) (2026-08-25)\n\n\n### Features\n\n* **parser:** add CSS support ([#104](https://github.com/rabii-chaarani/codebaseGraph/issues/104)) ([6666b8e](https://github.com/rabii-chaarani/codebaseGraph/commit/6666b8edcaaba603a4a7a61236a458d20d8e602b))\n\n## [1.5.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.5.1...v1.5.2) (2026-08-25)\n\n\n### Bug Fixes\n\n* **mcp:** harden managed daemon recovery ([#99](https://github.com/rabii-chaarani/codebaseGraph/issues/99)) ([1f676d3](https://github.com/rabii-chaarani/codebaseGraph/commit/1f676d3f2fc5f233790891ace29f3c4d8fd3d148))\n\n## [1.5.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.5.0...v1.5.1) (2026-08-24)\n\n\n### Bug Fixes\n\n* **release:** retry crates.io publish failures ([#96](https://github.com/rabii-chaarani/codebaseGraph/issues/96)) ([b3ebd83](https://github.com/rabii-chaarani/codebaseGraph/commit/b3ebd83f103d4f420eefa8d0b778eed05739d40f))\n\n## [1.5.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.6...v1.5.0) (2026-08-21)\n\n\n### Features\n\n* **mcp:** share one managed HTTP daemon ([#90](https://github.com/rabii-chaarani/codebaseGraph/issues/90)) ([731367c](https://github.com/rabii-chaarani/codebaseGraph/commit/731367ccf91b822da05c5895aa118e785e36f35d))\n\n\n### Bug Fixes\n\n* **release:** bundle Ladybug 0.19 extensions ([#89](https://github.com/rabii-chaarani/codebaseGraph/issues/89)) ([e52bdf4](https://github.com/rabii-chaarani/codebaseGraph/commit/e52bdf4a0bc0b9613125495befc136759a73c630))\n* **runtime:** integrate materialization and coordinator stack ([#88](https://github.com/rabii-chaarani/codebaseGraph/issues/88)) ([b248cd6](https://github.com/rabii-chaarani/codebaseGraph/commit/b248cd61a4dcf0e687809144f673a00772bd4f59))\n\n## [1.4.6](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.5...v1.4.6) (2026-08-17)\n\n\n### Bug Fixes\n\n* **refresh:** elect a single repository owner ([#78](https://github.com/rabii-chaarani/codebaseGraph/issues/78)) ([8d624f2](https://github.com/rabii-chaarani/codebaseGraph/commit/8d624f2cd61f99003aeb09ea39a3b9e5d606ab24))\n\n## [1.4.5](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.4...v1.4.5) (2026-08-17)\n\n\n### Bug Fixes\n\n* **release:** bind asset upload repository ([#82](https://github.com/rabii-chaarani/codebaseGraph/issues/82)) ([2a898c6](https://github.com/rabii-chaarani/codebaseGraph/commit/2a898c6f0c50345723d0d60cf9fc8df0da8f23ee))\n\n## [1.4.4](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.3...v1.4.4) (2026-08-17)\n\n\n### Bug Fixes\n\n* **release:** publish after skipped rebuild ([#80](https://github.com/rabii-chaarani/codebaseGraph/issues/80)) ([392b26c](https://github.com/rabii-chaarani/codebaseGraph/commit/392b26cfc304732489cdbf66986ab3d37b310a84))\n\n## [1.4.3](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.2...v1.4.3) (2026-08-17)\n\n\n### Bug Fixes\n\n* **release:** prevent stale tag publication ([#77](https://github.com/rabii-chaarani/codebaseGraph/issues/77)) ([1931dc8](https://github.com/rabii-chaarani/codebaseGraph/commit/1931dc85d32f92477f2fa244dbebb3e0f5ea4c44))\n\n## [1.4.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.1...v1.4.2) (2026-08-17)\n\n\n### Bug Fixes\n\n* **ci:** repair crates.io package verification ([#75](https://github.com/rabii-chaarani/codebaseGraph/issues/75)) ([5f2686a](https://github.com/rabii-chaarani/codebaseGraph/commit/5f2686af7c83bb7127072739602efc116be2142f))\n\n## [1.4.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.4.0...v1.4.1) (2026-08-14)\n\n\n### Bug Fixes\n\n* **release:** trigger publication from completed ci ([#73](https://github.com/rabii-chaarani/codebaseGraph/issues/73)) ([8d9cc44](https://github.com/rabii-chaarani/codebaseGraph/commit/8d9cc44e77d8cb5f3bef24a4dd6e550a24aba9ad))\n\n## [1.4.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.3.1...v1.4.0) (2026-08-13)\n\n\n### Features\n\n* add language grammar extractors ([#65](https://github.com/rabii-chaarani/codebaseGraph/issues/65)) ([ee3a7bd](https://github.com/rabii-chaarani/codebaseGraph/commit/ee3a7bd4e352c0608a9ae589de110896e9bbc73d))\n\n## [1.3.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.3.0...v1.3.1) (2026-08-11)\n\n\n### Bug Fixes\n\n* **memory:** enhance agent-memory workflow documentation and add distinct memory kind tests ([#63](https://github.com/rabii-chaarani/codebaseGraph/issues/63)) ([a447ac3](https://github.com/rabii-chaarani/codebaseGraph/commit/a447ac3a3fad28762dfb33f51fc971afc941b8bf))\n\n## [1.3.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.2.2...v1.3.0) (2026-08-10)\n\n\n### Features\n\n* **k-wiki:** initialize memory source on install ([#61](https://github.com/rabii-chaarani/codebaseGraph/issues/61)) ([6680d59](https://github.com/rabii-chaarani/codebaseGraph/commit/6680d5931584d8817b8b7adc9b210a6920667e2a))\n\n## [1.2.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.2.1...v1.2.2) (2026-08-07)\n\n\n### Features\n\n* **k-wiki:** make repository memory durable and reviewable ([cbcbc71](https://github.com/rabii-chaarani/codebaseGraph/commit/cbcbc719cc9df462b4bd57593560517be6d2c73a))\n* **storage:** prevent graph growth with immutable generations ([e4f5c95](https://github.com/rabii-chaarani/codebaseGraph/commit/e4f5c95d62a7f8c318cac80b863844c17938ac6f))\n\n\n### Bug Fixes\n\n* **ci:** compare escaped Windows MCP commands ([0ba9f7e](https://github.com/rabii-chaarani/codebaseGraph/commit/0ba9f7ee8f3cbed2b90a8a87ddd144932809bfbc))\n* **ci:** make storage cleanup and audit checks portable ([81b699b](https://github.com/rabii-chaarani/codebaseGraph/commit/81b699ba404978c685047f36a3cf5caf24f9e7d0))\n* **ci:** make Windows lock and Hermes tests portable ([515a43c](https://github.com/rabii-chaarani/codebaseGraph/commit/515a43c4bdebdcf48bf8ea67e3ca906500be936a))\n* **ci:** prevent Windows test shard stalls ([89cb0f6](https://github.com/rabii-chaarani/codebaseGraph/commit/89cb0f6f693096f3290c55b2b039cb9858650a73))\n* **k-wiki:** manage memory guidance separately ([f82659d](https://github.com/rabii-chaarani/codebaseGraph/commit/f82659de1d8ed7bc9f5c95fc6f6587a3072f3446))\n* **k-wiki:** prevent cross-repository MCP routing ([6fc7bbf](https://github.com/rabii-chaarani/codebaseGraph/commit/6fc7bbf3b3dad629ab2ccb4bcb92d9e23a641865))\n* **k-wiki:** prevent cross-repository wiki routing ([87898aa](https://github.com/rabii-chaarani/codebaseGraph/commit/87898aa634c9e6ad7b2c730280bc6975bfa4881e))\n* **release:** restore release workflow execution ([#58](https://github.com/rabii-chaarani/codebaseGraph/issues/58)) ([1c3c481](https://github.com/rabii-chaarani/codebaseGraph/commit/1c3c481700cbb8ec503e481c4b58ed09db97faa8))\n* **storage:** avoid unsupported Windows directory sync ([3376c22](https://github.com/rabii-chaarani/codebaseGraph/commit/3376c2249abf2b200d359e6faf4f98d07f8bfe2f))\n* **storage:** release refresh leases before watcher idle ([096ed2e](https://github.com/rabii-chaarani/codebaseGraph/commit/096ed2e44e24b689eedc65750ad1a91f5723dd20))\n* **storage:** reuse portable artifact directory sync ([f092d77](https://github.com/rabii-chaarani/codebaseGraph/commit/f092d7769018d901c27dd12759ac4e1a9c025801))\n* **storage:** sync published generations portably ([df00bc3](https://github.com/rabii-chaarani/codebaseGraph/commit/df00bc3fc41c5a9eb9fbe4259b02a591584bb024))\n\n## [1.2.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.2.0...v1.2.1) (2026-08-05)\n\n\n### Bug Fixes\n\n* **ci:** unblock Windows release linking ([#53](https://github.com/rabii-chaarani/codebaseGraph/issues/53)) ([0edad59](https://github.com/rabii-chaarani/codebaseGraph/commit/0edad5908fd34503cf54a8097bcb9eeb8e0b4f12))\n\n## [1.2.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.6...v1.2.0) (2026-08-04)\n\n\n### Features\n\n* Implement the k-wiki knowledge management subsystem ([#51](https://github.com/rabii-chaarani/codebaseGraph/issues/51)) ([fd8fe8e](https://github.com/rabii-chaarani/codebaseGraph/commit/fd8fe8e5b1ae63d59f53b0b2825ccae503485ef8))\n\n## [1.1.6](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.5...v1.1.6) (2026-06-23)\n\n\n### Bug Fixes\n\n* Recover live graph refresh after DB contention ([#40](https://github.com/rabii-chaarani/codebaseGraph/issues/40)) ([ee1754b](https://github.com/rabii-chaarani/codebaseGraph/commit/ee1754b66f98a69832b72dbd21224e7a87e97b19))\n\n## [1.1.5](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.4...v1.1.5) (2026-06-22)\n\n\n### Bug Fixes\n\n* **release:** shrink crates.io package ([07c2e3c](https://github.com/rabii-chaarani/codebaseGraph/commit/07c2e3cc17a0e68593335373cf2a3f11b8964904))\n\n## [1.1.4](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.3...v1.1.4) (2026-06-22)\n\n\n### Bug Fixes\n\n* **ci:** use bash for release artifact upload ([276606c](https://github.com/rabii-chaarani/codebaseGraph/commit/276606c005b3e9e59b5cfee9f36bf8e943bdd859))\n\n## [1.1.3](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.2...v1.1.3) (2026-06-22)\n\n\n### Bug Fixes\n\n* **ci:** use portable release checksums ([54daa47](https://github.com/rabii-chaarani/codebaseGraph/commit/54daa476202bdbd352ca2a6753a2b836b3bca4f9))\n\n## [1.1.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.1...v1.1.2) (2026-06-22)\n\n\n### Bug Fixes\n\n* **ci:** use cargo release environment ([ede151f](https://github.com/rabii-chaarani/codebaseGraph/commit/ede151f8a52897d58f753a9dbed8190f6bdb10f9))\n\n## [1.1.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.1.0...v1.1.1) (2026-06-22)\n\n\n### Bug Fixes\n\n* **ci:** read release confirmations at step scope ([c1000de](https://github.com/rabii-chaarani/codebaseGraph/commit/c1000de52a600d0a1a9ba31756d3b25bbc49f5c2))\n\n## [1.1.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v1.0.0...v1.1.0) (2026-06-22)\n\n\n### Features\n\n* reduce graph build latency with parallel defaults ([#33](https://github.com/rabii-chaarani/codebaseGraph/issues/33)) ([4a2af02](https://github.com/rabii-chaarani/codebaseGraph/commit/4a2af027070950c02325cfab6a6326ab157cb7cf))\n\n## [1.0.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.5.0...v1.0.0) (2026-06-19)\n\n\n### ⚠ BREAKING CHANGES\n\n* Rust version of codebaseGraph ([#26](https://github.com/rabii-chaarani/codebaseGraph/issues/26))\n\n### Features\n\n* Rust version of codebaseGraph ([#26](https://github.com/rabii-chaarani/codebaseGraph/issues/26)) ([712c757](https://github.com/rabii-chaarani/codebaseGraph/commit/712c75724c4bf353904a537bba1a4894c6969551))\n\n## [0.5.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.4.0...v0.5.0) (2026-06-15)\n\n\n### Features\n\n* Enhance semantic resolution across ingestion and reference handling ([#23](https://github.com/rabii-chaarani/codebaseGraph/issues/23)) ([5bad710](https://github.com/rabii-chaarani/codebaseGraph/commit/5bad71071f3fcb0de085d826ad872d64a5628555))\n\n## [0.4.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.3.0...v0.4.0) (2026-06-12)\n\n\n### Features\n\n* parse supported languages by default ([#21](https://github.com/rabii-chaarani/codebaseGraph/issues/21)) ([154006f](https://github.com/rabii-chaarani/codebaseGraph/commit/154006fdbae21b903f41a7bfe5df75d4d02f2f4f))\n\n## [0.3.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.2.5...v0.3.0) (2026-06-12)\n\n\n### Features\n\n* Extend ontology and setup workflows for language profiles ([#19](https://github.com/rabii-chaarani/codebaseGraph/issues/19)) ([6c684ea](https://github.com/rabii-chaarani/codebaseGraph/commit/6c684ea71208c9d847ca04a80f360c3de30d9ff3))\n\n## [0.2.5](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.2.4...v0.2.5) (2026-06-12)\n\n\n### Bug Fixes\n\n* improved codebase context output ([#17](https://github.com/rabii-chaarani/codebaseGraph/issues/17)) ([54cd8ee](https://github.com/rabii-chaarani/codebaseGraph/commit/54cd8eee0d2dc1c41fde6c64a2667c53cff9d817))\n\n## [0.2.4](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.2.3...v0.2.4) (2026-06-10)\n\n\n### Documentation\n\n* document runtime code paths ([#14](https://github.com/rabii-chaarani/codebaseGraph/issues/14)) ([c302b2a](https://github.com/rabii-chaarani/codebaseGraph/commit/c302b2ac13c19929e00f05666d20bb6a30abcd1c))\n\n## [0.2.3](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.2.2...v0.2.3) (2026-06-10)\n\n\n### Bug Fixes\n\n* ignore local Scryer state ([#13](https://github.com/rabii-chaarani/codebaseGraph/issues/13)) ([098bbc8](https://github.com/rabii-chaarani/codebaseGraph/commit/098bbc8815af3947f2bc4d4d7aa41e787a67aa24))\n\n## [0.2.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.2.1...v0.2.2) (2026-06-09)\n\n\n### Bug Fixes\n\n* [codex] mcp tools exposed ([#10](https://github.com/rabii-chaarani/codebaseGraph/issues/10)) ([2f3c793](https://github.com/rabii-chaarani/codebaseGraph/commit/2f3c7936a4fad97ceba9d17d5e77e616de5f73ef))\n\n## [0.2.1](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.2.0...v0.2.1) (2026-05-28)\n\n\n### Bug Fixes\n\n* **release:** download release assets without git checkout ([#7](https://github.com/rabii-chaarani/codebaseGraph/issues/7)) ([05d046d](https://github.com/rabii-chaarani/codebaseGraph/commit/05d046dbabccb391e66ae8ec40371613e5b59568))\n\n## [0.2.0](https://github.com/rabii-chaarani/codebaseGraph/compare/v0.1.0...v0.2.0) (2026-05-28)\n\n\n### Features\n\n* added source code ([ba29182](https://github.com/rabii-chaarani/codebaseGraph/commit/ba29182aa3c8055fd9c476be41ac01a32cc81cc2))\n* full functioning knowledge graph ([ee1dac5](https://github.com/rabii-chaarani/codebaseGraph/commit/ee1dac56f0b7f5152c865fa2bf1ba3c1e30f7c76))\n\n\n### Bug Fixes\n\n* **release:** enforce strict semver release tags ([#5](https://github.com/rabii-chaarani/codebaseGraph/issues/5)) ([f0f9342](https://github.com/rabii-chaarani/codebaseGraph/commit/f0f9342320cb6066ee1f95163d144709306efd67))\n\n## 0.1.0 (2026-05-28)\n\n\n### Features\n\n* added source code ([ba29182](https://github.com/rabii-chaarani/codebaseGraph/commit/ba29182aa3c8055fd9c476be41ac01a32cc81cc2))\n* full functioning knowledge graph ([ee1dac5](https://github.com/rabii-chaarani/codebaseGraph/commit/ee1dac56f0b7f5152c865fa2bf1ba3c1e30f7c76))\n\n## Changelog\n\nRelease notes are managed by release-please.\n" + }, + { + "path": "crates/k-wiki/Cargo.toml", + "content": "[package]\nname = \"k-wiki\"\nversion = \"4.0.1\"\nedition = \"2021\"\nrust-version = \"1.82\"\ndescription = \"OKF knowledge wiki, projection builder, and MCP service.\"\nlicense = \"MIT\"\nrepository = \"https://github.com/rabii-chaarani/codebaseGraph\"\npublish = false\n\n[lib]\nname = \"k_wiki\"\n\n[[bin]]\nname = \"k-wiki\"\npath = \"src/bin/k-wiki.rs\"\n\n[features]\ndefault = []\ngraph-context = []\nbundled-windows-extensions = [\"codebase-graph/bundled-windows-extensions\"]\n\n[dependencies]\n# The patched 4.1 backport preserves the workspace's Rust 1.82 MSRV.\nammonia = \"~4.1.8\"\naxum = { version = \"0.8\", default-features = false, features = [\"http1\", \"json\", \"tokio\"] }\ncodebase-graph = { version = \"4.0.1\", path = \"../..\" }\npulldown-cmark = { version = \"0.13\", default-features = false, features = [\"html\"] }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nsha2 = \"0.10.9\"\ntokio = { version = \"1\", features = [\"io-util\", \"macros\", \"net\", \"rt-multi-thread\", \"signal\", \"sync\", \"time\"] }\nwalkdir = \"2\"\nyaml_serde = \"0.10\"\n" + }, + { + "path": "crates/xtask/Cargo.toml", + "content": "[package]\nname = \"xtask\"\nversion = \"4.0.1\"\nedition = \"2021\"\npublish = false\n\n[dependencies]\nflate2 = \"1\"\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nsha2 = \"0.10.9\"\ntar = \"0.4\"\nyaml_serde = \"0.10\"\n" + }, + { + "path": "Cargo.toml", + "content": "[package]\nname = \"codebase-graph\"\nversion = \"4.0.1\"\nedition = \"2021\"\nrust-version = \"1.82\"\ndescription = \"Native codebaseGraph CLI and MCP server for local code knowledge graphs.\"\nlicense = \"MIT\"\nrepository = \"https://github.com/rabii-chaarani/codebaseGraph\"\nhomepage = \"https://github.com/rabii-chaarani/codebaseGraph\"\nreadme = \"README.md\"\nkeywords = [\"codebase\", \"graph\", \"mcp\", \"cli\", \"analysis\"]\ncategories = [\"command-line-utilities\", \"development-tools\"]\ninclude = [\n \"src/**\",\n \"!src/**/.DS_Store\",\n \"tests/**\",\n \"assets/*.json\",\n \"assets/ladybug-extensions/0.19.0/**/*.xz\",\n \"vendor/tree-sitter-wat/**\",\n \"build.rs\",\n \"README.md\",\n \"LICENSE\",\n]\n\n[workspace]\nmembers = [\".\", \"crates/k-wiki\", \"crates/xtask\"]\nresolver = \"2\"\n\n[profile.native-tests]\ninherits = \"release\"\ndebug-assertions = true\noverflow-checks = true\npanic = \"unwind\"\n\n[lib]\nname = \"codebase_graph\"\n\n[features]\nbundled-windows-extensions = []\n\n[dependencies]\nfs2 = \"0.4.3\"\ngetrandom = \"0.3.4\"\nlbug = \"0.19.0\"\nlibc = \"0.2\"\nlibmimalloc-sys = { version = \"0.1.49\", features = [\"extended\"] }\nlzma-rs = \"0.3.0\"\nmimalloc = { version = \"0.1.52\", features = [\"extended\"] }\nnotify = \"8.2\"\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nsha2 = \"0.10.9\"\ntree-sitter = \"0.25\"\ntree-sitter-c = \"0.24.2\"\ntree-sitter-cpp = \"0.23.4\"\ntree-sitter-css = \"0.25.0\"\ntree-sitter-fortran = \"0.6.0\"\ntree-sitter-go = \"0.25.0\"\ntree-sitter-html = \"0.23.2\"\ntree-sitter-javascript = \"0.25.0\"\ntree-sitter-language = \"0.1\"\ntree-sitter-python = \"0.25.0\"\ntree-sitter-rust = \"0.24.2\"\ntree-sitter-typescript = \"0.23.2\"\nwalkdir = \"2\"\n\n[build-dependencies]\ncc = \"1.2\"\n\n[target.'cfg(windows)'.dependencies]\nwindows-sys = { version = \"0.61\", features = [\"Win32_Foundation\", \"Win32_Globalization\", \"Win32_System_ProcessStatus\", \"Win32_System_Threading\", \"Win32_System_JobObjects\", \"Win32_System_SystemServices\", \"Win32_Security\", \"Win32_Security_Authorization\", \"Win32_System_Memory\", \"Win32_Storage_FileSystem\", \"Win32_System_Pipes\", \"Win32_System_Console\", \"Win32_System_Diagnostics_ToolHelp\", \"Win32_System_IO\", \"Wdk_Foundation\", \"Wdk_Storage_FileSystem\"] }\n\n[[bin]]\nname = \"codebase-graph\"\npath = \"src/bin/codebase-graph.rs\"\n\n[[test]]\nname = \"storage_foundation\"\npath = \"src/storage/test_harness.rs\"\n" + }, + { + "path": "Cargo.lock", + "content": "# This file is automatically @generated by Cargo.\n# It is not intended for manual editing.\nversion = 4\n\n[[package]]\nname = \"adler2\"\nversion = \"2.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa\"\n\n[[package]]\nname = \"aho-corasick\"\nversion = \"1.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\"\ndependencies = [\n \"memchr\",\n]\n\n[[package]]\nname = \"ammonia\"\nversion = \"4.1.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2f6660fb4ff692ef4937b1b4e74ab3d378653d8588389587d91f96a296907ea0\"\ndependencies = [\n \"cssparser\",\n \"html5ever\",\n \"maplit\",\n \"url\",\n]\n\n[[package]]\nname = \"anstyle\"\nversion = \"1.0.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\"\n\n[[package]]\nname = \"arrayvec\"\nversion = \"0.7.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50\"\n\n[[package]]\nname = \"atomic-waker\"\nversion = \"1.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\"\n\n[[package]]\nname = \"autocfg\"\nversion = \"1.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53\"\n\n[[package]]\nname = \"axum\"\nversion = \"0.8.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90\"\ndependencies = [\n \"axum-core\",\n \"bytes\",\n \"futures-util\",\n \"http\",\n \"http-body\",\n \"http-body-util\",\n \"hyper\",\n \"hyper-util\",\n \"itoa\",\n \"matchit\",\n \"memchr\",\n \"mime\",\n \"percent-encoding\",\n \"pin-project-lite\",\n \"serde_core\",\n \"serde_json\",\n \"serde_path_to_error\",\n \"sync_wrapper\",\n \"tokio\",\n \"tower\",\n \"tower-layer\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"axum-core\"\nversion = \"0.5.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1\"\ndependencies = [\n \"bytes\",\n \"futures-core\",\n \"http\",\n \"http-body\",\n \"http-body-util\",\n \"mime\",\n \"pin-project-lite\",\n \"sync_wrapper\",\n \"tower-layer\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"bitflags\"\nversion = \"2.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8\"\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.10.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\"\ndependencies = [\n \"generic-array\",\n]\n\n[[package]]\nname = \"bumpalo\"\nversion = \"3.20.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649\"\n\n[[package]]\nname = \"byteorder\"\nversion = \"1.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\"\n\n[[package]]\nname = \"bytes\"\nversion = \"1.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04\"\n\n[[package]]\nname = \"cc\"\nversion = \"1.2.64\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f\"\ndependencies = [\n \"find-msvc-tools\",\n \"shlex\",\n]\n\n[[package]]\nname = \"cfg-if\"\nversion = \"1.0.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\"\n\n[[package]]\nname = \"clap\"\nversion = \"4.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\"\ndependencies = [\n \"clap_builder\",\n]\n\n[[package]]\nname = \"clap_builder\"\nversion = \"4.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\"\ndependencies = [\n \"anstyle\",\n \"clap_lex\",\n \"strsim\",\n]\n\n[[package]]\nname = \"clap_lex\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\"\n\n[[package]]\nname = \"cmake\"\nversion = \"0.1.58\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678\"\ndependencies = [\n \"cc\",\n]\n\n[[package]]\nname = \"codebase-graph\"\nversion = \"4.0.1\"\ndependencies = [\n \"cc\",\n \"fs2\",\n \"getrandom\",\n \"lbug\",\n \"libc\",\n \"libmimalloc-sys\",\n \"lzma-rs\",\n \"mimalloc\",\n \"notify\",\n \"serde\",\n \"serde_json\",\n \"sha2\",\n \"tree-sitter\",\n \"tree-sitter-c\",\n \"tree-sitter-cpp\",\n \"tree-sitter-css\",\n \"tree-sitter-fortran\",\n \"tree-sitter-go\",\n \"tree-sitter-html\",\n \"tree-sitter-javascript\",\n \"tree-sitter-language\",\n \"tree-sitter-python\",\n \"tree-sitter-rust\",\n \"tree-sitter-typescript\",\n \"walkdir\",\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"codespan-reporting\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e\"\ndependencies = [\n \"termcolor\",\n \"unicode-width\",\n]\n\n[[package]]\nname = \"cpufeatures\"\nversion = \"0.2.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\"\ndependencies = [\n \"libc\",\n]\n\n[[package]]\nname = \"crc\"\nversion = \"3.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d\"\ndependencies = [\n \"crc-catalog\",\n]\n\n[[package]]\nname = \"crc-catalog\"\nversion = \"2.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853\"\n\n[[package]]\nname = \"crc32fast\"\nversion = \"1.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511\"\ndependencies = [\n \"cfg-if\",\n]\n\n[[package]]\nname = \"crypto-common\"\nversion = \"0.1.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\"\ndependencies = [\n \"generic-array\",\n \"typenum\",\n]\n\n[[package]]\nname = \"cssparser\"\nversion = \"0.37.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98\"\ndependencies = [\n \"dtoa-short\",\n \"itoa\",\n \"smallvec\",\n]\n\n[[package]]\nname = \"cty\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35\"\n\n[[package]]\nname = \"cxx\"\nversion = \"1.0.138\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3956d60afa98653c5a57f60d7056edd513bfe0307ef6fb06f6167400c3884459\"\ndependencies = [\n \"cc\",\n \"cxxbridge-cmd\",\n \"cxxbridge-flags\",\n \"cxxbridge-macro\",\n \"foldhash\",\n \"link-cplusplus\",\n]\n\n[[package]]\nname = \"cxx-build\"\nversion = \"1.0.138\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9a4b7522f539fe056f1d6fc8577d8ab731451f6f33a89b1e5912e22b76c553e7\"\ndependencies = [\n \"cc\",\n \"codespan-reporting\",\n \"proc-macro2\",\n \"quote\",\n \"scratch\",\n \"syn 2.0.117\",\n]\n\n[[package]]\nname = \"cxxbridge-cmd\"\nversion = \"1.0.138\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0f01e92ab4ce9fd4d16e3bb11b158d98cbdcca803c1417aa43130a6526fbf208\"\ndependencies = [\n \"clap\",\n \"codespan-reporting\",\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n]\n\n[[package]]\nname = \"cxxbridge-flags\"\nversion = \"1.0.138\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c41cbfab344869e70998b388923f7d1266588f56c8ca284abf259b1c1ffc695\"\n\n[[package]]\nname = \"cxxbridge-macro\"\nversion = \"1.0.138\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"88d82a2f759f0ad3eae43b96604efd42b1d4729a35a6f2dc7bdb797ae25d9284\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"rustversion\",\n \"syn 2.0.117\",\n]\n\n[[package]]\nname = \"deranged\"\nversion = \"0.3.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4\"\ndependencies = [\n \"powerfmt\",\n]\n\n[[package]]\nname = \"digest\"\nversion = \"0.10.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\"\ndependencies = [\n \"block-buffer\",\n \"crypto-common\",\n]\n\n[[package]]\nname = \"displaydoc\"\nversion = \"0.2.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 3.0.3\",\n]\n\n[[package]]\nname = \"dtoa\"\nversion = \"1.0.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590\"\n\n[[package]]\nname = \"dtoa-short\"\nversion = \"0.3.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87\"\ndependencies = [\n \"dtoa\",\n]\n\n[[package]]\nname = \"equivalent\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\"\n\n[[package]]\nname = \"errno\"\nversion = \"0.3.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\"\ndependencies = [\n \"libc\",\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"fastrand\"\nversion = \"2.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223\"\n\n[[package]]\nname = \"filetime\"\nversion = \"0.2.29\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759\"\ndependencies = [\n \"cfg-if\",\n \"libc\",\n]\n\n[[package]]\nname = \"find-msvc-tools\"\nversion = \"0.1.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582\"\n\n[[package]]\nname = \"flate2\"\nversion = \"1.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb\"\ndependencies = [\n \"crc32fast\",\n \"miniz_oxide\",\n \"zlib-rs\",\n]\n\n[[package]]\nname = \"foldhash\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2\"\n\n[[package]]\nname = \"form_urlencoded\"\nversion = \"1.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\"\ndependencies = [\n \"percent-encoding\",\n]\n\n[[package]]\nname = \"fs2\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213\"\ndependencies = [\n \"libc\",\n \"winapi\",\n]\n\n[[package]]\nname = \"fsevent-sys\"\nversion = \"4.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2\"\ndependencies = [\n \"libc\",\n]\n\n[[package]]\nname = \"futures-channel\"\nversion = \"0.3.32\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d\"\ndependencies = [\n \"futures-core\",\n]\n\n[[package]]\nname = \"futures-core\"\nversion = \"0.3.32\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d\"\n\n[[package]]\nname = \"futures-task\"\nversion = \"0.3.32\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393\"\n\n[[package]]\nname = \"futures-util\"\nversion = \"0.3.32\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6\"\ndependencies = [\n \"futures-core\",\n \"futures-task\",\n \"pin-project-lite\",\n \"slab\",\n]\n\n[[package]]\nname = \"generic-array\"\nversion = \"0.14.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\"\ndependencies = [\n \"typenum\",\n \"version_check\",\n]\n\n[[package]]\nname = \"getrandom\"\nversion = \"0.3.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\"\ndependencies = [\n \"cfg-if\",\n \"libc\",\n \"r-efi\",\n \"wasip2\",\n]\n\n[[package]]\nname = \"hashbrown\"\nversion = \"0.15.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1\"\n\n[[package]]\nname = \"html5ever\"\nversion = \"0.39.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8\"\ndependencies = [\n \"log\",\n \"markup5ever\",\n]\n\n[[package]]\nname = \"http\"\nversion = \"1.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0\"\ndependencies = [\n \"bytes\",\n \"itoa\",\n]\n\n[[package]]\nname = \"http-body\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c\"\ndependencies = [\n \"bytes\",\n \"http\",\n]\n\n[[package]]\nname = \"http-body-util\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2\"\ndependencies = [\n \"bytes\",\n \"futures-core\",\n \"http\",\n \"http-body\",\n \"pin-project-lite\",\n]\n\n[[package]]\nname = \"httparse\"\nversion = \"1.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\"\n\n[[package]]\nname = \"httpdate\"\nversion = \"1.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\"\n\n[[package]]\nname = \"hyper\"\nversion = \"1.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72\"\ndependencies = [\n \"atomic-waker\",\n \"bytes\",\n \"futures-channel\",\n \"futures-core\",\n \"http\",\n \"http-body\",\n \"httparse\",\n \"httpdate\",\n \"itoa\",\n \"pin-project-lite\",\n \"smallvec\",\n \"tokio\",\n]\n\n[[package]]\nname = \"hyper-util\"\nversion = \"0.1.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0\"\ndependencies = [\n \"bytes\",\n \"http\",\n \"http-body\",\n \"hyper\",\n \"pin-project-lite\",\n \"tokio\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"icu_collections\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c\"\ndependencies = [\n \"displaydoc\",\n \"potential_utf\",\n \"utf8_iter\",\n \"yoke\",\n \"zerofrom\",\n \"zerovec\",\n]\n\n[[package]]\nname = \"icu_locale_core\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29\"\ndependencies = [\n \"displaydoc\",\n \"litemap\",\n \"tinystr\",\n \"writeable\",\n \"zerovec\",\n]\n\n[[package]]\nname = \"icu_normalizer\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4\"\ndependencies = [\n \"icu_collections\",\n \"icu_normalizer_data\",\n \"icu_properties\",\n \"icu_provider\",\n \"smallvec\",\n \"zerovec\",\n]\n\n[[package]]\nname = \"icu_normalizer_data\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38\"\n\n[[package]]\nname = \"icu_properties\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de\"\ndependencies = [\n \"icu_collections\",\n \"icu_locale_core\",\n \"icu_properties_data\",\n \"icu_provider\",\n \"zerotrie\",\n \"zerovec\",\n]\n\n[[package]]\nname = \"icu_properties_data\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14\"\n\n[[package]]\nname = \"icu_provider\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421\"\ndependencies = [\n \"displaydoc\",\n \"icu_locale_core\",\n \"writeable\",\n \"yoke\",\n \"zerofrom\",\n \"zerotrie\",\n \"zerovec\",\n]\n\n[[package]]\nname = \"idna\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\"\ndependencies = [\n \"idna_adapter\",\n \"smallvec\",\n \"utf8_iter\",\n]\n\n[[package]]\nname = \"idna_adapter\"\nversion = \"1.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714\"\ndependencies = [\n \"icu_normalizer\",\n \"icu_properties\",\n]\n\n[[package]]\nname = \"indexmap\"\nversion = \"2.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652\"\ndependencies = [\n \"equivalent\",\n \"hashbrown\",\n]\n\n[[package]]\nname = \"inotify\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1\"\ndependencies = [\n \"bitflags\",\n \"inotify-sys\",\n \"libc\",\n]\n\n[[package]]\nname = \"inotify-sys\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb\"\ndependencies = [\n \"libc\",\n]\n\n[[package]]\nname = \"itoa\"\nversion = \"1.0.18\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\"\n\n[[package]]\nname = \"js-sys\"\nversion = \"0.3.102\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31\"\ndependencies = [\n \"cfg-if\",\n \"futures-util\",\n \"wasm-bindgen\",\n]\n\n[[package]]\nname = \"k-wiki\"\nversion = \"4.0.1\"\ndependencies = [\n \"ammonia\",\n \"axum\",\n \"codebase-graph\",\n \"pulldown-cmark\",\n \"serde\",\n \"serde_json\",\n \"sha2\",\n \"tokio\",\n \"walkdir\",\n \"yaml_serde\",\n]\n\n[[package]]\nname = \"kqueue\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5\"\ndependencies = [\n \"kqueue-sys\",\n \"libc\",\n]\n\n[[package]]\nname = \"kqueue-sys\"\nversion = \"1.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087\"\ndependencies = [\n \"bitflags\",\n \"libc\",\n]\n\n[[package]]\nname = \"lbug\"\nversion = \"0.19.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a2a843feea97d72124b0438ee6a02ae0ce9d3543da3c391989bfb1f39ec20486\"\ndependencies = [\n \"cmake\",\n \"cxx\",\n \"cxx-build\",\n \"rust_decimal\",\n \"rustversion\",\n \"serde_json\",\n \"time\",\n \"uuid\",\n]\n\n[[package]]\nname = \"libc\"\nversion = \"0.2.189\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2\"\n\n[[package]]\nname = \"libmimalloc-sys\"\nversion = \"0.1.49\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9\"\ndependencies = [\n \"cc\",\n \"cty\",\n]\n\n[[package]]\nname = \"libyaml-rs\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e126dda6f34391ab7b444f9922055facc83c07a910da3eb16f1e4d9c45dc777\"\n\n[[package]]\nname = \"link-cplusplus\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82\"\ndependencies = [\n \"cc\",\n]\n\n[[package]]\nname = \"linux-raw-sys\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\"\n\n[[package]]\nname = \"litemap\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0\"\n\n[[package]]\nname = \"lock_api\"\nversion = \"0.4.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\"\ndependencies = [\n \"scopeguard\",\n]\n\n[[package]]\nname = \"log\"\nversion = \"0.4.32\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a\"\n\n[[package]]\nname = \"lzma-rs\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e\"\ndependencies = [\n \"byteorder\",\n \"crc\",\n]\n\n[[package]]\nname = \"maplit\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d\"\n\n[[package]]\nname = \"markup5ever\"\nversion = \"0.39.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de\"\ndependencies = [\n \"log\",\n \"tendril\",\n \"web_atoms\",\n]\n\n[[package]]\nname = \"matchit\"\nversion = \"0.8.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3\"\n\n[[package]]\nname = \"memchr\"\nversion = \"2.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4\"\n\n[[package]]\nname = \"mimalloc\"\nversion = \"0.1.52\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862\"\ndependencies = [\n \"libmimalloc-sys\",\n]\n\n[[package]]\nname = \"mime\"\nversion = \"0.3.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\"\n\n[[package]]\nname = \"miniz_oxide\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c\"\ndependencies = [\n \"adler2\",\n \"simd-adler32\",\n]\n\n[[package]]\nname = \"mio\"\nversion = \"1.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda\"\ndependencies = [\n \"libc\",\n \"log\",\n \"wasi\",\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"new_debug_unreachable\"\nversion = \"1.0.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086\"\n\n[[package]]\nname = \"notify\"\nversion = \"8.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3\"\ndependencies = [\n \"bitflags\",\n \"fsevent-sys\",\n \"inotify\",\n \"kqueue\",\n \"libc\",\n \"log\",\n \"mio\",\n \"notify-types\",\n \"walkdir\",\n \"windows-sys 0.60.2\",\n]\n\n[[package]]\nname = \"notify-types\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d\"\n\n[[package]]\nname = \"num-conv\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9\"\n\n[[package]]\nname = \"num-traits\"\nversion = \"0.2.19\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841\"\ndependencies = [\n \"autocfg\",\n]\n\n[[package]]\nname = \"once_cell\"\nversion = \"1.21.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\"\n\n[[package]]\nname = \"parking_lot\"\nversion = \"0.12.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\"\ndependencies = [\n \"lock_api\",\n \"parking_lot_core\",\n]\n\n[[package]]\nname = \"parking_lot_core\"\nversion = \"0.9.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\"\ndependencies = [\n \"cfg-if\",\n \"libc\",\n \"redox_syscall\",\n \"smallvec\",\n \"windows-link\",\n]\n\n[[package]]\nname = \"percent-encoding\"\nversion = \"2.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\"\n\n[[package]]\nname = \"phf\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf\"\ndependencies = [\n \"phf_shared\",\n \"serde\",\n]\n\n[[package]]\nname = \"phf_codegen\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1\"\ndependencies = [\n \"phf_generator\",\n \"phf_shared\",\n]\n\n[[package]]\nname = \"phf_generator\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737\"\ndependencies = [\n \"fastrand\",\n \"phf_shared\",\n]\n\n[[package]]\nname = \"phf_shared\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266\"\ndependencies = [\n \"siphasher\",\n]\n\n[[package]]\nname = \"pin-project-lite\"\nversion = \"0.2.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\"\n\n[[package]]\nname = \"potential_utf\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564\"\ndependencies = [\n \"zerovec\",\n]\n\n[[package]]\nname = \"powerfmt\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\"\n\n[[package]]\nname = \"precomputed-hash\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c\"\n\n[[package]]\nname = \"proc-macro2\"\nversion = \"1.0.106\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\"\ndependencies = [\n \"unicode-ident\",\n]\n\n[[package]]\nname = \"pulldown-cmark\"\nversion = \"0.13.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e\"\ndependencies = [\n \"bitflags\",\n \"memchr\",\n \"pulldown-cmark-escape\",\n \"unicase\",\n]\n\n[[package]]\nname = \"pulldown-cmark-escape\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae\"\n\n[[package]]\nname = \"quote\"\nversion = \"1.0.45\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\"\ndependencies = [\n \"proc-macro2\",\n]\n\n[[package]]\nname = \"r-efi\"\nversion = \"5.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\"\n\n[[package]]\nname = \"redox_syscall\"\nversion = \"0.5.18\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\"\ndependencies = [\n \"bitflags\",\n]\n\n[[package]]\nname = \"regex\"\nversion = \"1.12.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba\"\ndependencies = [\n \"aho-corasick\",\n \"memchr\",\n \"regex-automata\",\n \"regex-syntax\",\n]\n\n[[package]]\nname = \"regex-automata\"\nversion = \"0.4.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f\"\ndependencies = [\n \"aho-corasick\",\n \"memchr\",\n \"regex-syntax\",\n]\n\n[[package]]\nname = \"regex-syntax\"\nversion = \"0.8.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4\"\n\n[[package]]\nname = \"rust_decimal\"\nversion = \"1.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a\"\ndependencies = [\n \"arrayvec\",\n \"num-traits\",\n]\n\n[[package]]\nname = \"rustix\"\nversion = \"1.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\"\ndependencies = [\n \"bitflags\",\n \"errno\",\n \"libc\",\n \"linux-raw-sys\",\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"rustversion\"\nversion = \"1.0.22\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d\"\n\n[[package]]\nname = \"ryu\"\nversion = \"1.0.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\"\n\n[[package]]\nname = \"same-file\"\nversion = \"1.0.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\"\ndependencies = [\n \"winapi-util\",\n]\n\n[[package]]\nname = \"scopeguard\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\"\n\n[[package]]\nname = \"scratch\"\nversion = \"1.0.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2\"\n\n[[package]]\nname = \"serde\"\nversion = \"1.0.228\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\"\ndependencies = [\n \"serde_core\",\n \"serde_derive\",\n]\n\n[[package]]\nname = \"serde_core\"\nversion = \"1.0.228\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\"\ndependencies = [\n \"serde_derive\",\n]\n\n[[package]]\nname = \"serde_derive\"\nversion = \"1.0.228\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n]\n\n[[package]]\nname = \"serde_json\"\nversion = \"1.0.150\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9\"\ndependencies = [\n \"indexmap\",\n \"itoa\",\n \"memchr\",\n \"serde\",\n \"serde_core\",\n \"zmij\",\n]\n\n[[package]]\nname = \"serde_path_to_error\"\nversion = \"0.1.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\"\ndependencies = [\n \"itoa\",\n \"serde\",\n \"serde_core\",\n]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.10.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\"\ndependencies = [\n \"cfg-if\",\n \"cpufeatures\",\n \"digest\",\n]\n\n[[package]]\nname = \"shlex\"\nversion = \"2.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba\"\n\n[[package]]\nname = \"signal-hook-registry\"\nversion = \"1.4.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\"\ndependencies = [\n \"errno\",\n \"libc\",\n]\n\n[[package]]\nname = \"simd-adler32\"\nversion = \"0.3.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea\"\n\n[[package]]\nname = \"siphasher\"\nversion = \"1.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649\"\n\n[[package]]\nname = \"slab\"\nversion = \"0.4.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\"\n\n[[package]]\nname = \"smallvec\"\nversion = \"1.15.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90\"\n\n[[package]]\nname = \"socket2\"\nversion = \"0.6.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4\"\ndependencies = [\n \"libc\",\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"stable_deref_trait\"\nversion = \"1.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\"\n\n[[package]]\nname = \"streaming-iterator\"\nversion = \"0.1.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520\"\n\n[[package]]\nname = \"string_cache\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901\"\ndependencies = [\n \"new_debug_unreachable\",\n \"parking_lot\",\n \"phf_shared\",\n \"precomputed-hash\",\n]\n\n[[package]]\nname = \"string_cache_codegen\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69\"\ndependencies = [\n \"phf_generator\",\n \"phf_shared\",\n \"proc-macro2\",\n \"quote\",\n]\n\n[[package]]\nname = \"strsim\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\"\n\n[[package]]\nname = \"syn\"\nversion = \"2.0.117\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"unicode-ident\",\n]\n\n[[package]]\nname = \"syn\"\nversion = \"3.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"unicode-ident\",\n]\n\n[[package]]\nname = \"sync_wrapper\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\"\n\n[[package]]\nname = \"synstructure\"\nversion = \"0.13.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n]\n\n[[package]]\nname = \"tar\"\nversion = \"0.4.46\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840\"\ndependencies = [\n \"filetime\",\n \"libc\",\n \"xattr\",\n]\n\n[[package]]\nname = \"tendril\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08\"\ndependencies = [\n \"new_debug_unreachable\",\n]\n\n[[package]]\nname = \"termcolor\"\nversion = \"1.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755\"\ndependencies = [\n \"winapi-util\",\n]\n\n[[package]]\nname = \"time\"\nversion = \"0.3.36\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885\"\ndependencies = [\n \"deranged\",\n \"num-conv\",\n \"powerfmt\",\n \"serde\",\n \"time-core\",\n]\n\n[[package]]\nname = \"time-core\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3\"\n\n[[package]]\nname = \"tinystr\"\nversion = \"0.8.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d\"\ndependencies = [\n \"displaydoc\",\n \"zerovec\",\n]\n\n[[package]]\nname = \"tokio\"\nversion = \"1.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed\"\ndependencies = [\n \"bytes\",\n \"libc\",\n \"mio\",\n \"pin-project-lite\",\n \"signal-hook-registry\",\n \"socket2\",\n \"tokio-macros\",\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"tokio-macros\"\nversion = \"2.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 3.0.3\",\n]\n\n[[package]]\nname = \"tower\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4\"\ndependencies = [\n \"futures-core\",\n \"futures-util\",\n \"pin-project-lite\",\n \"sync_wrapper\",\n \"tokio\",\n \"tower-layer\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"tower-layer\"\nversion = \"0.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\"\n\n[[package]]\nname = \"tower-service\"\nversion = \"0.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\"\n\n[[package]]\nname = \"tree-sitter\"\nversion = \"0.25.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"78f873475d258561b06f1c595d93308a7ed124d9977cb26b148c2084a4a3cc87\"\ndependencies = [\n \"cc\",\n \"regex\",\n \"regex-syntax\",\n \"serde_json\",\n \"streaming-iterator\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-c\"\nversion = \"0.24.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a9b2eb57a55fed6b00812912e730b7a275cf4fe98bfd6a5d76263d4438371728\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-cpp\"\nversion = \"0.23.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"df2196ea9d47b4ab4a31b9297eaa5a5d19a0b121dceb9f118f6790ad0ab94743\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-css\"\nversion = \"0.25.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a5cbc5e18f29a2c6d6435891f42569525cf95435a3e01c2f1947abcde178686f\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-fortran\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea5fea41363a9b59666001dc26c4b356d4e164da27c6ce31145e00aba6bf9b16\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-go\"\nversion = \"0.25.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8560a4d2f835cc0d4d2c2e03cbd0dde2f6114b43bc491164238d333e28b16ea\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-html\"\nversion = \"0.23.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"261b708e5d92061ede329babaaa427b819329a9d427a1d710abb0f67bbef63ee\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-javascript\"\nversion = \"0.25.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"68204f2abc0627a90bdf06e605f5c470aa26fdcb2081ea553a04bdad756693f5\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-language\"\nversion = \"0.1.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ca0d1bf6fdd806e43ae5198f82f527056d359def39e54e67a0f478ac09dac081\"\n\n[[package]]\nname = \"tree-sitter-python\"\nversion = \"0.25.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6bf85fd39652e740bf60f46f4cda9492c3a9ad75880575bf14960f775cb74a1c\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-rust\"\nversion = \"0.24.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"439e577dbe07423ec2582ac62c7531120dbfccfa6e5f92406f93dd271a120e45\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"tree-sitter-typescript\"\nversion = \"0.23.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c5f76ed8d947a75cc446d5fccd8b602ebf0cde64ccf2ffa434d873d7a575eff\"\ndependencies = [\n \"cc\",\n \"tree-sitter-language\",\n]\n\n[[package]]\nname = \"typenum\"\nversion = \"1.20.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20\"\n\n[[package]]\nname = \"unicase\"\nversion = \"2.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142\"\n\n[[package]]\nname = \"unicode-ident\"\nversion = \"1.0.24\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\"\n\n[[package]]\nname = \"unicode-width\"\nversion = \"0.1.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af\"\n\n[[package]]\nname = \"url\"\nversion = \"2.5.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed\"\ndependencies = [\n \"form_urlencoded\",\n \"idna\",\n \"percent-encoding\",\n \"serde\",\n]\n\n[[package]]\nname = \"utf8_iter\"\nversion = \"1.0.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\"\n\n[[package]]\nname = \"uuid\"\nversion = \"1.18.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2\"\ndependencies = [\n \"js-sys\",\n \"wasm-bindgen\",\n]\n\n[[package]]\nname = \"version_check\"\nversion = \"0.9.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\"\n\n[[package]]\nname = \"walkdir\"\nversion = \"2.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b\"\ndependencies = [\n \"same-file\",\n \"winapi-util\",\n]\n\n[[package]]\nname = \"wasi\"\nversion = \"0.11.1+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\"\n\n[[package]]\nname = \"wasip2\"\nversion = \"1.0.4+wasi-0.2.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487\"\ndependencies = [\n \"wit-bindgen\",\n]\n\n[[package]]\nname = \"wasm-bindgen\"\nversion = \"0.2.125\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a\"\ndependencies = [\n \"cfg-if\",\n \"once_cell\",\n \"rustversion\",\n \"wasm-bindgen-macro\",\n \"wasm-bindgen-shared\",\n]\n\n[[package]]\nname = \"wasm-bindgen-macro\"\nversion = \"0.2.125\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d\"\ndependencies = [\n \"quote\",\n \"wasm-bindgen-macro-support\",\n]\n\n[[package]]\nname = \"wasm-bindgen-macro-support\"\nversion = \"0.2.125\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd\"\ndependencies = [\n \"bumpalo\",\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n \"wasm-bindgen-shared\",\n]\n\n[[package]]\nname = \"wasm-bindgen-shared\"\nversion = \"0.2.125\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f\"\ndependencies = [\n \"unicode-ident\",\n]\n\n[[package]]\nname = \"web_atoms\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3\"\ndependencies = [\n \"phf\",\n \"phf_codegen\",\n \"string_cache\",\n \"string_cache_codegen\",\n]\n\n[[package]]\nname = \"winapi\"\nversion = \"0.3.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\"\ndependencies = [\n \"winapi-i686-pc-windows-gnu\",\n \"winapi-x86_64-pc-windows-gnu\",\n]\n\n[[package]]\nname = \"winapi-i686-pc-windows-gnu\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\"\n\n[[package]]\nname = \"winapi-util\"\nversion = \"0.1.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\"\ndependencies = [\n \"windows-sys 0.61.2\",\n]\n\n[[package]]\nname = \"winapi-x86_64-pc-windows-gnu\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\"\n\n[[package]]\nname = \"windows-link\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\"\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.60.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\"\ndependencies = [\n \"windows-targets\",\n]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.61.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\"\ndependencies = [\n \"windows-link\",\n]\n\n[[package]]\nname = \"windows-targets\"\nversion = \"0.53.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3\"\ndependencies = [\n \"windows-link\",\n \"windows_aarch64_gnullvm\",\n \"windows_aarch64_msvc\",\n \"windows_i686_gnu\",\n \"windows_i686_gnullvm\",\n \"windows_i686_msvc\",\n \"windows_x86_64_gnu\",\n \"windows_x86_64_gnullvm\",\n \"windows_x86_64_msvc\",\n]\n\n[[package]]\nname = \"windows_aarch64_gnullvm\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3\"\n\n[[package]]\nname = \"windows_i686_gnullvm\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499\"\n\n[[package]]\nname = \"windows_x86_64_gnullvm\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.53.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650\"\n\n[[package]]\nname = \"wit-bindgen\"\nversion = \"0.57.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e\"\n\n[[package]]\nname = \"writeable\"\nversion = \"0.6.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4\"\n\n[[package]]\nname = \"xattr\"\nversion = \"1.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156\"\ndependencies = [\n \"libc\",\n \"rustix\",\n]\n\n[[package]]\nname = \"xtask\"\nversion = \"4.0.1\"\ndependencies = [\n \"flate2\",\n \"serde\",\n \"serde_json\",\n \"sha2\",\n \"tar\",\n \"yaml_serde\",\n]\n\n[[package]]\nname = \"yaml_serde\"\nversion = \"0.10.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"33b729a08a9a6be689bbad3e2bf8015926db54b6622cc89c3a5f7dc174b9e918\"\ndependencies = [\n \"indexmap\",\n \"itoa\",\n \"libyaml-rs\",\n \"ryu\",\n \"serde\",\n]\n\n[[package]]\nname = \"yoke\"\nversion = \"0.8.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5\"\ndependencies = [\n \"stable_deref_trait\",\n \"yoke-derive\",\n \"zerofrom\",\n]\n\n[[package]]\nname = \"yoke-derive\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n \"synstructure\",\n]\n\n[[package]]\nname = \"zerofrom\"\nversion = \"0.1.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272\"\ndependencies = [\n \"zerofrom-derive\",\n]\n\n[[package]]\nname = \"zerofrom-derive\"\nversion = \"0.1.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n \"synstructure\",\n]\n\n[[package]]\nname = \"zerotrie\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf\"\ndependencies = [\n \"displaydoc\",\n \"yoke\",\n \"zerofrom\",\n]\n\n[[package]]\nname = \"zerovec\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239\"\ndependencies = [\n \"yoke\",\n \"zerofrom\",\n \"zerovec-derive\",\n]\n\n[[package]]\nname = \"zerovec-derive\"\nversion = \"0.11.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.117\",\n]\n\n[[package]]\nname = \"zlib-rs\"\nversion = \"0.6.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112\"\n\n[[package]]\nname = \"zmij\"\nversion = \"1.0.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa\"\n" + }, + { + "path": ".release-please-manifest.json", + "content": "{\n \".\": \"4.0.1\"\n}\n" + } + ] + } + ], + "requests": [ + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/trees/main", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/trees/main", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/3495b17d71f6e598798d19dc60a46a949ea2de3c", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/e6f877563b6eac559173203a756e5190982e32bc", + "operation": "" + }, + { + "method": "POST", + "path": "/graphql", + "operation": "query releases($owner: String!, $repo: String!, $num: Int!, $cursor: String) {\n rep" + }, + { + "method": "POST", + "path": "/graphql", + "operation": "query releases($owner: String!, $repo: String!, $num: Int!, $cursor: String) {\n rep" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/tags", + "operation": "" + }, + { + "method": "GET", + "path": "/repositories/1235031738/tags", + "operation": "" + }, + { + "method": "POST", + "path": "/graphql", + "operation": "query pullRequestsSince($owner: String!, $repo: String!, $num: Int!, $maxFilesChanged: Int" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/commits/75a99c840aa53e75a3f14df8dab41979c9efa19c", + "operation": "" + }, + { + "method": "GET", + "path": "/repositories/1235031738/commits/75a99c840aa53e75a3f14df8dab41979c9efa19c", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/commits/809e64b6b05b19c0700954f8496f491f1a126fc3", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/commits/e98a2bd9de77331c9cca68e1831b2fc3faca0e68", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/0134de312e8f52549031adf558a389ee109700d1", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/320cbc6ac3c734475ab1e3e9525cb7b2b972e7fd", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/15ee04024d13926a9421ecd9c73c57d07ff39d3b", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/63a11be926e465b5142721333fb15c8aaecd1da1", + "operation": "" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/git/blobs/b73fbaeda9a26feca5f646159386df3a9815ed00", + "operation": "" + } + ] +} \ No newline at end of file diff --git a/docs/testing/release-pr-162/generator-audit.md b/docs/testing/release-pr-162/generator-audit.md new file mode 100644 index 00000000..3b782964 --- /dev/null +++ b/docs/testing/release-pr-162/generator-audit.md @@ -0,0 +1,81 @@ +# PR #162 release-please generator audit + +Read-only audit, 2026-10-27. Live main: `34eac4f8644adc046093babd84ee1fdbffdae853`; PR #162 head: `95e3830c6997190d2eaaf4147dc6c7352c1880f8`. No repository files or remote state changed. + +## Cause: missing baseline, then historical version override + +- Main's `.release-please-manifest.json` is `4.0.0`. PR #156 merged that version at `7038e66ff8271ffddc511f879cf8d28353a09b2d`, but there is no `v4.0.0` tag or GitHub Release. Latest real tag/release is `v3.0.4`, `ca115690b226384164cf364458a0e3255b8908d3`. +- [Release run 40469954130](https://github.com/rabii-chaarani/codebaseGraph/actions/runs/40469954130) used release-please **17.6.0**. Its logs explicitly show `looking for tagName: v4.0.0`, zero matching releases, `Splitting 150 commits by path`, a manifest-only previous version of `4.0.0`, and 497 parsed conventional commits. +- release-please matches releases/tags against the **exact manifest version**, not simply the latest published version. With no matching tag and no configured cutoff, it collects the whole available history. It then uses manifest `4.0.0` with an empty release SHA as the synthetic previous release, explaining the misleading `v4.0.0...v1.2.2` comparison. +- Historical commit [`6fc7bbf3b3dad629ab2ccb4bcb92d9e23a641865`](https://github.com/rabii-chaarani/codebaseGraph/commit/6fc7bbf3b3dad629ab2ccb4bcb92d9e23a641865) contains `Release-As: 1.2.2`. Version selection checks such a trailer **before** normal semantic bumping and does not reject a downgrade. That old instruction was replayed only because the history boundary was lost. +- PR #156 currently has no labels. The local proposal guard and upstream outstanding-release detection both require `autorelease: pending`, so neither blocked this proposal. This observation is not permission to relabel it or fabricate publication. + +## Smallest recommended generator repair + +Add only this top-level setting to `release-please-config.json`: + +```json +"bootstrap-sha": "7038e66ff8271ffddc511f879cf8d28353a09b2d" +``` + +Repair PR #162's release metadata to **4.0.1** consistently across the manifest, root/wiki/xtask packages, wiki dependency, and Cargo.lock. Do **not** add permanent `release-as` or `last-release-sha` settings, create a `v4.0.0` tag, or change publication authorization. + +Why this cutoff: it excludes the failed 4.0.0 proposal and older trailers from next-version calculation while retaining post-merge fixes. It is only a changelog commit cutoff; it does not claim 4.0.0 was published. In 17.6.0, bootstrap is consulted whenever the manifest's expected release is missing, even after earlier release PRs have merged. Once a matching 4.0.1 tag/release exists, normal lookup wins and bootstrap is ignored. `last-release-sha` instead stays an explicit cutoff and carries a removal/update obligation. + +A `v3.0.4` bootstrap cutoff is **not** equivalent: the unreleased storage breaking change would bump manifest 4.0.0 again to **5.0.0**, unless a separate one-shot override were introduced. The failed-4.0.0 cutoff needs no version override. + +## Actual generator verification (not a simulated version calculation) + +Installed `release-please@17.6.0` in an isolated `/tmp` npm project, then called `Manifest.fromManifest`, `buildPullRequests`, and `GitHub.buildChangeSet` against live main. A fetch guard blocked all REST writes and GraphQL mutations. Authentication was piped to Node stdin, never saved. No create/update/tag/release method was called. + +| Bootstrap | Manifest | Release-As | Generated version | Notes | +|---|---|---|---|---| +| failed 4.0.0 merge `7038e66...` | 4.0.0 | none | **4.0.1** | only post-merge fix #159 | +| last published 3.0.4 `ca115690...` | 4.0.0 | none | **5.0.0** | storage breaking change + #159 | + +For the first scenario, parsed generated contents agree on **4.0.1** in all eight version locations (manifest; root/wiki/xtask package versions; wiki dependency; three lockfile packages). + +Evidence files: +- `/tmp/cbg-pr162-generator-node/bootstrap-failed-4-merge.json` — full generated body/updates and read-only request trace. +- `/tmp/cbg-pr162-generator-node/bootstrap-last-published.json` — comparison case. +- `/tmp/cbg-pr162-generator-node/evidence-summary.json` — parsed version agreement. +- `/tmp/cbg-pr162-generator-node/read-only-generation.cjs` — reproduction, write-blocking guard. + +## Head configuration and post-publication follow-up + +Read the parent's repaired config/manifest/release-file metadata from `/private/tmp/codebasegraph-cod100-release-401` without changing it. With those exact file contents overlaid in memory on live main history, the full 17.6.0 generator proposes **4.0.2**, not a downgrade: the head manifest already records 4.0.1 as current, and #159 remains a patch after the bootstrap cutoff. This is expected. Do not use that run to regenerate the manually repaired current 4.0.1 proposal. + +An explicitly synthetic in-memory future test then supplied a matching 4.0.1 release/source commit, without creating a remote tag/release. With no newer commits the generator produced zero candidates; adding one new fix produced 4.0.2 notes containing only that fix. Matching 4.0.1 release discovery therefore supersedes the old bootstrap cutoff. Full output and request trace: `/tmp/cbg-pr162-generator-node/head-and-future-results.json`; reproduction: `head-and-future-verification.cjs` in the same directory. This verifies selection behavior, not actual future publication. + +## Truthful 4.0.1 release notes + +The automatically generated 4.0.1 body contains only #159 and compares from nonexistent `v4.0.0`. Curate the new 4.0.1 section/body to: + +- Say it supersedes **unpublished** 4.0.0 / PR #156. +- Include the storage feature and `GuardedDatabase` breaking-change text from #153/#156, plus #159 and the artifact-staging correction the parent is investigating. +- Use actual published `v3.0.4` as the comparison base for the public 4.0.1 notes (`v3.0.4...v4.0.1`). Keep the existing historical 4.0.0 section; do not describe it as published. + +Generated config on an unmerged PR is not read by the bot: the action loads config/manifest from **main**. Repairing #162 manually is therefore necessary while main remains unchanged. + +## No supported hold label for the repaired open PR + +17.6.0 has no `autorelease: hold` mechanism. Open PRs are selected by pending/snapshot labels and matching head branch; draft status or extra hold/snooze labels do not prevent updates. `autorelease: snooze` handles **closed** PRs and updates/reopens one when the generated body changes. A fixture using the actual Manifest with a stub write sink verified both extra labels still attempt to overwrite repaired #162 with the old generated 1.2.2 proposal: `/tmp/cbg-pr162-generator-node/no-hold-label.json`. + +Do not remove pending as a substitute: it also breaks trusted release recognition and does not safely prevent same-branch creation/update. While main's config is old, avoid new proposal-triggering main CI or obtain explicit permission for an operational pause. Merely editing/pushing PR #162 triggers PR CI, not this main-push publication path. Report the remaining overwrite risk; do not disable workflows or merge main without authorization. + +## Gates and scope + +Keep release-please `skip-github-release: true`, exact-release-merge successful CI binding, immutable-source version/notes agreement, production policy gate, complete artifact/provenance validation, protected publication environment, crate gate, finalization rules, and non-cancelling concurrency unchanged. The bootstrap fix neither authorizes old 4.0.0 publication nor qualifies new 4.0.1 publication. Parent owns production/artifact corrections and final PR evidence. + +Graph searches found `docs/release.md` and xtask evidence but not release-please config/workflow File nodes; that coverage gap was reported before reading live metadata with `gh api`. Consulted repository wiki memory, `architecture/release-verification`, Scryer Release Verifier responsibilities, and governing rules. Wiki's four-target description is older than live main's two-target docs/workflow; live mutable facts were used. No Linear connection was verified (connection inventory reports pending). Reusable knowledge is warranted (missing manifest-matching tags can replay old Release-As trailers), but memory writes were deferred to the implementation owner because this audit is read-only. + +## Pinned upstream evidence + +release-please 17.6.0 resolves to [`712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1`](https://github.com/googleapis/release-please/commit/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1): + +- [`src/manifest.ts`, L537–727](https://github.com/googleapis/release-please/blob/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1/src/manifest.ts#L537-L727): exact-version baseline; conditional bootstrap; manifest fallback. +- [`src/strategies/base.ts`, L543–570](https://github.com/googleapis/release-please/blob/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1/src/strategies/base.ts#L543-L570): config/trailer precedence before semantic bump. +- [`docs/manifest-releaser.md`, L129–171](https://github.com/googleapis/release-please/blob/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1/docs/manifest-releaser.md#L129-L171): cutoffs and persistent release-as warning; implementation above determines bootstrap's exact condition. +- [`src/manifest.ts`, L970–1122](https://github.com/googleapis/release-please/blob/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1/src/manifest.ts#L970-L1122): open/snoozed PR update behavior. + +Assumptions: user-authorized 4.0.1 supersedes unpublished 4.0.0; no old tag should be fabricated; parent will manually retain unreleased storage notes and validate the complete updated PR. Constants changed: none in repository/remote; isolated test overrides used only the two bootstrap SHAs listed above. diff --git a/docs/testing/release-pr-162/generator-future.json b/docs/testing/release-pr-162/generator-future.json new file mode 100644 index 00000000..488641c0 --- /dev/null +++ b/docs/testing/release-pr-162/generator-future.json @@ -0,0 +1,68 @@ +{ + "version": "17.6.0", + "results": [ + { + "scenario": "actual-head-config-before-publication", + "synthetic": "local head metadata over live main history; matching4.0.1tag does not exist", + "candidates": [ + { + "version": "4.0.2", + "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n## [4.0.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v4.0.1...v4.0.2) (2026-10-27)\n\n\n### Bug Fixes\n\n* **ci:** archive historical Python evidence helpers ([#159](https://github.com/rabii-chaarani/codebaseGraph/issues/159)) ([34eac4f](https://github.com/rabii-chaarani/codebaseGraph/commit/34eac4f8644adc046093babd84ee1fdbffdae853))\n\n---\nThis PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please)." + } + ] + }, + { + "scenario": "future-published-4.0.1-no-new-commits", + "synthetic": "in-memory matching release + source commit; no remote state change", + "candidates": [] + }, + { + "scenario": "future-published-4.0.1-plus-new-fix", + "synthetic": "in-memory matching release + source commit; no remote state change", + "candidates": [ + { + "version": "4.0.2", + "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n## [4.0.2](https://github.com/rabii-chaarani/codebaseGraph/compare/v4.0.1...v4.0.2) (2026-10-27)\n\n\n### Bug Fixes\n\n* post-publication regression fixture ([fffffff](https://github.com/rabii-chaarani/codebaseGraph/commit/ffffffffffffffffffffffffffffffffffffffff))\n\n---\nThis PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please)." + } + ] + } + ], + "requests": [ + { + "method": "POST", + "path": "/graphql" + }, + { + "method": "POST", + "path": "/graphql" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/tags" + }, + { + "method": "GET", + "path": "/repositories/1235031738/tags" + }, + { + "method": "POST", + "path": "/graphql" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/commits/75a99c840aa53e75a3f14df8dab41979c9efa19c" + }, + { + "method": "GET", + "path": "/repositories/1235031738/commits/75a99c840aa53e75a3f14df8dab41979c9efa19c" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/commits/809e64b6b05b19c0700954f8496f491f1a126fc3" + }, + { + "method": "GET", + "path": "/repos/rabii-chaarani/codebaseGraph/commits/e98a2bd9de77331c9cca68e1831b2fc3faca0e68" + } + ] +} \ No newline at end of file diff --git a/docs/testing/release-pr-162/local-checks.log b/docs/testing/release-pr-162/local-checks.log new file mode 100644 index 00000000..9325624d --- /dev/null +++ b/docs/testing/release-pr-162/local-checks.log @@ -0,0 +1,99 @@ + Compiling xtask v4.0.1 (/private/tmp/codebasegraph-cod100-release-401/crates/xtask) + Finished `test` profile [unoptimized + debuginfo] target(s) in 1.14s +──────────── + Nextest run ID f031022c-5224-4ee9-b9e9-fcf5a609bacc with nextest profile: cod100 + Starting 44 tests across 1 binary + PASS [ 0.009s] ( 1/44) xtask::bin/xtask native_tests::shards::tests::empty_shard_never_runs_an_unfiltered_suite + PASS [ 0.010s] ( 2/44) xtask::bin/xtask native_tests::tests::windows_regressions_precede_the_complete_unfiltered_suite + PASS [ 0.010s] ( 3/44) xtask::bin/xtask release::tests::notes_only_include_the_exact_release + PASS [ 0.010s] ( 4/44) xtask::bin/xtask native_tests::tests::partitions_every_test_target_and_keeps_new_integration_targets + PASS [ 0.011s] ( 5/44) xtask::bin/xtask release::tests::notes_reject_missing_duplicate_and_empty_sections + PASS [ 0.013s] ( 6/44) xtask::bin/xtask release::tests::metadata_rejects_inconsistent_versions + PASS [ 0.013s] ( 7/44) xtask::bin/xtask native_tests::tests::captured_cli_survives_cargo_replacing_its_output + PASS [ 0.013s] ( 8/44) xtask::bin/xtask native_tests::shards::tests::selected_exact_filters_execute_the_expected_real_harness_cases + PASS [ 0.017s] ( 9/44) xtask::bin/xtask native_tests::shards::tests::shards_cover_every_listed_case_once_and_bound_windows_arguments + PASS [ 0.071s] (10/44) xtask::bin/xtask release::workflow_tests::recovery_requires_one_target_and_forbids_ci_run_rebuilds + PASS [ 0.008s] (11/44) xtask::bin/xtask tests::archive_contract_rejects_unexpected_entries + PASS [ 0.098s] (12/44) xtask::bin/xtask release::workflow_tests::staged_assets_match_the_supported_native_targets + PASS [ 0.005s] (13/44) xtask::bin/xtask tests::crate_size_validation_enforces_the_registry_limit + PASS [ 0.028s] (14/44) xtask::bin/xtask tests::complete_artifact_set_rejects_mixed_provenance + PASS [ 0.005s] (15/44) xtask::bin/xtask tests::native_capture_requires_unique_source_bound_normal_cli_artifact + PASS [ 0.005s] (16/44) xtask::bin/xtask tests::native_capture_reuses_the_exact_test_profile_and_features + PASS [ 0.005s] (17/44) xtask::bin/xtask tests::native_target_contract_maps_names_and_binaries + PASS [ 0.012s] (18/44) xtask::bin/xtask tests::native_test_failure_cannot_authorize_artifact_production + PASS [ 0.005s] (19/44) xtask::bin/xtask tests::release_identity_validation_is_strict + PASS [ 0.004s] (20/44) xtask::bin/xtask tests::windows_native_tests_forward_bundled_extensions + PASS [ 0.008s] (21/44) xtask::bin/xtask tests::workflow_policy_rejects_automatic_rebuild_recovery + PASS [ 0.008s] (22/44) xtask::bin/xtask tests::workflow_policy_rejects_direct_release_push_trigger + PASS [ 0.009s] (23/44) xtask::bin/xtask tests::workflow_policy_rejects_github_sha_for_release_identity + PASS [ 0.008s] (24/44) xtask::bin/xtask tests::workflow_policy_rejects_missing_ci_success_guard + PASS [ 0.015s] (25/44) xtask::bin/xtask tests::workflow_policy_rejects_missing_crate_publish_retry + PASS [ 0.011s] (26/44) xtask::bin/xtask tests::workflow_policy_rejects_missing_crate_size_gates + PASS [ 0.008s] (27/44) xtask::bin/xtask tests::workflow_policy_rejects_missing_repository_release_gate + PASS [ 0.008s] (28/44) xtask::bin/xtask tests::workflow_policy_rejects_missing_triggering_run_binding + PASS [ 0.008s] (29/44) xtask::bin/xtask tests::workflow_policy_rejects_release_queue_replacement + PASS [ 0.008s] (30/44) xtask::bin/xtask tests::workflow_policy_rejects_unconditional_release_publication + PASS [ 0.015s] (31/44) xtask::bin/xtask tests::workflow_policy_rejects_unvalidated_publishers + PASS [ 0.008s] (32/44) xtask::bin/xtask tests::workflow_policy_requires_ci_completion_release_trigger + PASS [ 0.015s] (33/44) xtask::bin/xtask tests::workflow_policy_requires_publication_revalidation + PASS [ 0.005s] (34/44) xtask::bin/xtask tests::workflow_yaml_validation_rejects_unindented_heredoc_body + PASS [ 0.012s] (35/44) xtask::bin/xtask tests::workflows_reject_removed_platform_targets + PASS [ 0.789s] (36/44) xtask::bin/xtask release::workflow_tests::ci_run_recovery_dry_run_validates_without_authorizing_publication + PASS [ 1.549s] (37/44) xtask::bin/xtask release::workflow_tests::verified_release_survives_main_advancing_and_ignores_other_pending_releases + PASS [ 1.702s] (38/44) xtask::bin/xtask release::workflow_tests::proposal_reports_pending_release_then_proceeds_after_finalization + PASS [ 1.860s] (39/44) xtask::bin/xtask release::workflow_tests::publisher_targets_original_sha_and_is_idempotent + PASS [ 1.992s] (40/44) xtask::bin/xtask release::workflow_tests::publisher_rejects_conflicting_tags_and_does_not_regress_latest + PASS [ 1.963s] (41/44) xtask::bin/xtask tests::installer_rejects_removed_hosts_before_reading_archives_or_writing_destinations + PASS [ 2.381s] (42/44) xtask::bin/xtask release::workflow_tests::ordinary_commit_cannot_authorize_release_and_tagged_retry_still_can + PASS [ 3.820s] (43/44) xtask::bin/xtask release::workflow_tests::verified_release_rejects_failed_ci_and_untrusted_run_identity + PASS [ 3.979s] (44/44) xtask::bin/xtask release::workflow_tests::verified_release_rejects_untrusted_prs_and_removed_history +──────────── + Summary [ 3.993s] 44 tests run: 44 passed, 0 skipped + + Checking typenum v1.20.1 + Checking cfg-if v1.0.4 + Checking bitflags v2.13.0 + Checking libc v0.2.189 + Checking serde_core v1.0.228 + Checking equivalent v1.0.2 + Checking adler2 v2.0.1 + Checking itoa v1.0.18 + Checking simd-adler32 v0.3.10 + Checking hashbrown v0.15.5 + Checking crc32fast v1.5.0 + Checking zmij v1.0.21 + Checking ryu v1.0.23 + Checking libyaml-rs v0.3.0 + Checking memchr v2.8.2 + Checking miniz_oxide v0.9.1 + Checking indexmap v2.7.1 + Checking flate2 v1.1.10 + Checking errno v0.3.14 + Checking cpufeatures v0.2.17 + Checking filetime v0.2.29 + Checking generic-array v0.14.7 + Checking rustix v1.1.4 + Checking block-buffer v0.10.4 + Checking crypto-common v0.1.7 + Checking digest v0.10.7 + Checking sha2 v0.10.9 + Checking xattr v1.6.1 + Checking serde v1.0.228 + Checking serde_json v1.0.150 + Checking tar v0.4.46 + Checking yaml_serde v0.10.7 + Checking xtask v4.0.1 (/private/tmp/codebasegraph-cod100-release-401/crates/xtask) + Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.62s + Compiling xtask v4.0.1 (/private/tmp/codebasegraph-cod100-release-401/crates/xtask) + Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.29s + Running `/private/tmp/codebasegraph-cod100-cargo-target/debug/xtask check-workflows` +workflow policy passed + Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.04s + Running `/private/tmp/codebasegraph-cod100-cargo-target/debug/xtask release-gate` +release gate passed + Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.03s + Running `/private/tmp/codebasegraph-cod100-cargo-target/debug/xtask release-gate --production --confirm release-environment --confirm private-vulnerability-reporting` +release gate passed + Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.04s + Running `/private/tmp/codebasegraph-cod100-cargo-target/debug/xtask verify-release-version v4.0.1` +4.0.1 diff --git a/docs/testing/release-pr-162/nextest.toml b/docs/testing/release-pr-162/nextest.toml new file mode 100644 index 00000000..ccb6d5e1 --- /dev/null +++ b/docs/testing/release-pr-162/nextest.toml @@ -0,0 +1,2 @@ +[profile.cod100] +junit.path = "cod100-junit.xml" diff --git a/docs/testing/release-pr-162/read-only-generation.cjs b/docs/testing/release-pr-162/read-only-generation.cjs new file mode 100644 index 00000000..0911e1ed --- /dev/null +++ b/docs/testing/release-pr-162/read-only-generation.cjs @@ -0,0 +1,35 @@ +const fs = require('fs'); +const {GitHub, Manifest, VERSION} = require('release-please'); +const token = fs.readFileSync(0, 'utf8').trim(); +const requests = []; +const readOnlyFetch = async (url, opts = {}) => { + const method = (opts.method || 'GET').toUpperCase(); + const parsed = new URL(typeof url === 'string' ? url : url.url); + let operation = ''; + if (!['GET', 'HEAD'].includes(method)) { + if (method !== 'POST' || parsed.pathname !== '/graphql') throw new Error(`WRITE BLOCKED ${method} ${parsed.pathname}`); + const payload = JSON.parse(opts.body || '{}'); + if (!payload.query || /\bmutation\b/.test(payload.query)) throw new Error('GraphQL mutation blocked'); + operation = payload.query.slice(0, 90); + } + requests.push({method, path: parsed.pathname, operation}); + return fetch(url, opts); +}; +(async () => { + const github = await GitHub.create({owner: 'rabii-chaarani', repo: 'codebaseGraph', token, defaultBranch: 'main', fetch: readOnlyFetch}); + const scenarios = [ + {name: 'bootstrap-failed-4-merge', overrides: {bootstrapSha: '7038e66ff8271ffddc511f879cf8d28353a09b2d'}}, + {name: 'bootstrap-last-published', overrides: {bootstrapSha: 'ca115690b226384164cf364458a0e3255b8908d3'}}, + ]; + for (const scenario of scenarios) { + const manifest = await Manifest.fromManifest(github, 'main', 'release-please-config.json', '.release-please-manifest.json', scenario.overrides); + const prs = await manifest.buildPullRequests(); + const results = []; + for (const pr of prs) { + const changes = await github.buildChangeSet(pr.updates, 'main'); + results.push({title: pr.title.toString(), body: pr.body.toString(), version: pr.version.toString(), updates: [...changes].map(([path, change]) => ({path, content: change.content}))}); + } + fs.writeFileSync(`./${scenario.name}.json`, JSON.stringify({releasePleaseVersion: VERSION, bootstrapSha: scenario.overrides.bootstrapSha, results, requests}, null, 2)); + console.log('SCENARIO', scenario.name, results.map(r => ({title: r.title, version: r.version, body: r.body, paths: r.updates.map(u => u.path)}))); + } +})().catch(e => {console.error(e.stack || e.message); process.exitCode = 1;}); diff --git a/docs/testing/release-pr-162/verification.json b/docs/testing/release-pr-162/verification.json new file mode 100644 index 00000000..2855ce70 --- /dev/null +++ b/docs/testing/release-pr-162/verification.json @@ -0,0 +1,111 @@ +{ + "work_item": "COD-100", + "pull_request": 162, + "scryer_change": "chg-9sernm", + "user_approval": { + "date": "2026-10-27", + "decision": "make it 4.0.1 and resolve the issues first", + "scope": "Repair open release PR; no merge or publication performed" + }, + "base_main": "34eac4f8644adc046093babd84ee1fdbffdae853", + "original_pr_head": "95e3830c6997190d2eaaf4147dc6c7352c1880f8", + "failed_release": { + "pull_request": 156, + "source_sha": "7038e66ff8271ffddc511f879cf8d28353a09b2d", + "ci_run": 40444108082, + "release_run": 40453997235, + "status": "unpublished; immutable production gate failed; no tag/release/crate4.0.0 observed", + "labels_at_start": [] + }, + "environment": { + "platform": "Darwin aarch64", + "cargo": "1.96.0", + "nextest": "0.9.140", + "release_please": "17.6.0" + }, + "changed_constants": { + "workspace_versions": "1.2.2 proposal / 4.0.0 main -> 4.0.1", + "public_asset_count": "8 -> 4 (two supported targets, one archive and checksum each)", + "bootstrap_sha": "7038e66ff8271ffddc511f879cf8d28353a09b2d (commit floor only; never tag/publication authorization)" + }, + "snapshot_sha256": { + ".github/workflows/release.yml": "56b4530d355685f13da6b690ca28c401f9e3211d7db76d387c63281524fcc2e2", + ".release-please-manifest.json": "f87e6c288df6c2b7ae134915c0a4e9f0828551c9c8d200f64a32743015bdd050", + "CHANGELOG.md": "c83a38e8e2f9a91324ec47784809eeca94f016d51f122f81cfe61a4dc0971978", + "Cargo.lock": "03b13a29495eb408054cb381fd3dee3f029c28cce07ad73998c38ba1667463f1", + "Cargo.toml": "e9c384f697b8c0af11c2e73c269c2cd1711f1be4445a7d0909629b931a2335cc", + "crates/k-wiki/Cargo.toml": "a819729c99aa5927f0b9e796a77031860fe3f3eb5d796d9263e26dadc0cd72b3", + "crates/xtask/Cargo.toml": "b5eb92df487c6ecfe6c17d01b8b1f812ac2ca6bb11e5fb7267763be01ae0e30c", + "crates/xtask/src/release/workflow_tests.rs": "ce8e04c3afd53f9095d5e549a111ab0cb294b32105aac511fa7ba6bfd9b06c2a", + "docs/release.md": "0e871d395f34cbbfb4a1d9095bdbe781b503a7981fca5c0f9f9af5c64e5303b0", + "release-please-config.json": "aee0cc12299ec52e26f56bf7621a7e48a50445f0105041da9fed5eea178f5497" + }, + "checks": [ + { + "command": "cd /private/tmp/codebasegraph-cod100-release-401 && CARGO_TARGET_DIR=/private/tmp/codebasegraph-cod100-cargo-target cargo test -p xtask --locked staged_assets_match_the_supported_native_targets -- --nocapture", + "result": "expected failure before workflow fix; new regression demonstrates complete supported set rejected" + }, + { + "command": "cargo nextest run -p xtask --locked --config-file docs/testing/release-pr-162/nextest.toml --profile cod100", + "result": "passed", + "tests": 44, + "skipped": 0, + "report": "xtask.junit.xml" + }, + { + "command": "cargo fmt --check", + "result": "passed" + }, + { + "command": "cargo clippy -p xtask --all-targets --locked -- -D warnings", + "result": "passed" + }, + { + "command": "cargo run -p xtask --locked -- check-workflows", + "result": "passed" + }, + { + "command": "cargo run -p xtask --locked -- release-gate", + "result": "passed" + }, + { + "command": "cargo run -p xtask --locked -- release-gate --production --confirm release-environment --confirm private-vulnerability-reporting", + "result": "passed" + }, + { + "command": "cargo run -p xtask --locked -- verify-release-version v4.0.1", + "result": "passed" + }, + { + "command": "cargo metadata --no-deps --locked --format-version 1", + "result": "passed" + }, + { + "method": "actual release-please17.6.0 read-only generation with bootstrap failed4.0.0 merge; blocked outbound mutations", + "result": "4.0.1 proposed naturally; all package update versions agree; only post-floor fix159 notes generated", + "report": "generator-4.0.1.json" + } + ], + "limits": [ + "No full product/native matrix or package publish dry-run was run locally; hosted PR CI and exact main-merge CI remain required.", + "Production confirmation arguments reproduce existing configured job; not new verification of owner-controlled settings.", + "Scryer is configured against unrelated original worktree; do not activate passing fingerprints there from this isolated snapshot. JUnit retained for correct-snapshot reconciliation.", + "Current-main generator can overwrite this open PR until the correction merges; no workflow settings/permissions or labels were changed to bypass it.", + "4.0.0 remains untagged/unpublished; no tag,release,crate,merge,workflow-dispatch was performed." + ], + "architecture_claims_changed": false, + "generator_additional_checks": { + "actual_repaired_head_over_live_main": "4.0.2, not downgrade; overlay only, not regeneration of current4.0.1 proposal", + "synthetic_matching4.0.1_release_no_new_commits": "no candidates", + "synthetic_matching4.0.1_release_plus_new_fix": "4.0.2 with only new fix", + "report": "generator-future.json" + }, + "review": { + "model": "openai-codex/gpt-6.1-sol", + "effort": "max", + "independent": true, + "report": "final-review.md", + "result": "No confirmed P0-P3 findings; conditional delivery/qualification risks retained", + "reviewed_snapshot": "10 source/test SHA-256 entries in snapshot_sha256; local HEAD not treated as final" + } +} diff --git a/docs/testing/release-pr-162/xtask.junit.xml b/docs/testing/release-pr-162/xtask.junit.xml new file mode 100644 index 00000000..78cef758 --- /dev/null +++ b/docs/testing/release-pr-162/xtask.junit.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/knowledge/memory/procedural/missing-manifest-release-replays-version-overrides-2026-10-27.md b/knowledge/memory/procedural/missing-manifest-release-replays-version-overrides-2026-10-27.md new file mode 100644 index 00000000..edc0af4f --- /dev/null +++ b/knowledge/memory/procedural/missing-manifest-release-replays-version-overrides-2026-10-27.md @@ -0,0 +1,48 @@ +--- +agent_memory: + version: 1 + kind: procedural + scope: repository + status: active + owner: repository-maintainers + created_at: 2026-10-27T09:07:00Z + last_verified_at: 2026-10-27T09:08:00Z + verified_by: repository-maintainers + review_after: null + supersedes: [] + superseded_by: null + sources: + - kind: executed-evidence + reference: https://github.com/rabii-chaarani/codebaseGraph/tree/39e817427bd9cd8fb65f6ff907599e0b7ff6ec6f/docs/testing/release-pr-162 + content_hash: null + - kind: source + reference: https://github.com/googleapis/release-please/blob/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1/src/manifest.ts#L537-L727 + content_hash: null + - kind: source + reference: https://github.com/googleapis/release-please/blob/712fcf01effd08d7b0e7b1fd3861f2cb388bc8d1/src/strategies/base.ts#L543-L570 + content_hash: null + - kind: contract + reference: https://github.com/rabii-chaarani/codebaseGraph/blob/39e817427bd9cd8fb65f6ff907599e0b7ff6ec6f/docs/release.md + content_hash: null + history: + - from: candidate + to: active + actor: repository-maintainers + at: 2026-10-27T09:08:00Z + reason: Verified against pinned release-please17.6.0 source and executed read-only generator evidence committed at39e8174; independent final reviewer verified causal path and source snapshot. Scoped to version17.6.0 behavior; no publication authority inferred. +description: Bound release-please fallback history without fabricating publication; verify the actual pinned generator before repairing a release proposal. +tags: +- provenance +- recovery +- release +- release-please +- versioning +timestamp: 2026-10-27T09:07:00Z +title: Missing manifest-matching release tags can replay old Release-As trailers +type: agent-memory +--- +When release-please 17.6.0 has a manifest version but cannot find that exact version's tag/release, it can scan all history and replay an old `Release-As` trailer before normal semantic version bumping. The manifest alone is not a commit boundary. Diagnose the missing exact tag and generator logs before treating a downgrade as a cosmetic PR-title error. + +For a maintainer-approved replacement of a failed unpublished release, a `bootstrap-sha` at the failed release merge can serve only as the commit cutoff for subsequent version calculation. It does not prove publication, authorize that old SHA, or replace exact-source CI/production/artifact gates. Verify the pinned generator with outbound mutations blocked. In the observed case, manifest4.0.0 plus the failed4.0.0 merge cutoff generated4.0.1 naturally; a last-published3.0.4 cutoff instead included the breaking change and generated5.0.0. Do not add a permanent `release-as` or `last-release-sha` pin as a cosmetic workaround. + +Bootstrap is ignored once a manifest-matching tag/release is found. Curate replacement notes to retain unreleased features/breaking changes and compare from the actual published baseline. Preserve historical sections and describe failed proposals as unpublished; never fabricate a tag or mark their source as tagged to unblock the bot. Open PR config is not read until it reaches the target branch, and extra hold/snooze/draft labels do not stop updates to a pending open PR in this version. Keep the overwrite window explicit rather than weakening trusted branch/label recognition or changing integration settings. \ No newline at end of file diff --git a/release-please-config.json b/release-please-config.json index 3495b17d..5a539cc2 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -1,4 +1,5 @@ { + "bootstrap-sha": "7038e66ff8271ffddc511f879cf8d28353a09b2d", "packages": { ".": { "release-type": "rust",