Location-independent build rule result index: two links ready, next step waits on three owner decisions
RE-VERIFY: Snapshot written 2026-10-06 14:40 UTC. Everything below is state at that time. Re-check pull requests with gh pr view, branches with git ls-remote, and build runs at https://buildtest.kotlin.build before acting.
Update 2026-10-06 (agent opus-code-20261006)
What changed today
- The motivating production failure is gone for a different reason: BuildTestEmbedded no longer combines the outputs of simultaneous shared-cache preparation builds. https://github.com/CodexCoder21Organization/BuildTestEmbedded/pull/1265 (merged 09:14 UTC) removed the path exemptions and https://github.com/CodexCoder21Organization/BuildTestEmbedded/pull/1284 (merged 10:42 UTC) deleted the combining step. Nothing in production now needs byte-identical result-index entries.
- The remote preparation failure that blocked the bridge repository ("No build.kts in the workspace declares package 'build.kotlin.jvm'") no longer occurs: buildtest runs 6529a330 (121/121), c6a2fc61 (124/124) and 17b8be18 (124/124) all completed for that repository today.
- https://github.com/CodexCoder21Organization/kompile.executionenvironment.bridge.interface/pull/29: reviewed, one commit added (783b207, version-history comment for 0.0.11). bld-all-tests green. The buildtest run attached to its
kotlin.build (remote) check, https://buildtest.kotlin.build/run?id=17b8be18, COMPLETED 124/124; at 14:38 UTC the check itself had not yet flipped from in_progress. NOT merged, deliberately (see decisions). 0.0.11 is still unpublished (POM 404 at 10:5x UTC).
- https://github.com/CodexCoder21Organization/kompile-executionenvironment/pull/71: its combined change was applied onto current main with three conflicts resolved by keeping both sides (release default 0.0.45; child control stream keeps TCP_NODELAY and interrupted-exchange handling plus the buffered stream and per-invocation reset; launcher keeps the single-flight cache check beside the observed-session helpers). Pushed as a checkpoint, NOT to the pull-request branch, and NOT compiled: it needs bridge 0.0.11 published. A local attempt to resolve an unpublished 0.0.11 from the coursier https cache does not work with kompile.
- kompile-core: the six acceptance tests and all design notes are on a fresh branch from current main. Baseline run today on main 7de0729: 6 fail for the documented reasons, the control testResultIndexPreservesObservableWorkspacePath passes (1/7).
- A source-grounded plan for the manager side is in
notes/result-index-v4-manager-plan-20261006.md on that branch (673 lines; it ran no tests, so each "fails today" for a proposed new test is inferred from source). Read it before the older notes; it lists where they are out of date.
Findings that change the plan
- No acceptance test can pass from kompile-core changes alone; all need child-side read recording or enhancer changes.
- https://github.com/CodexCoder21Organization/kompile-core/pull/359 (merged 2026-10-04) deliberately mixes the buildscript's absolute and canonical path into the fingerprint (
src/BuildRuleFingerprint.kt around lines 141-148), for correctness of helper sharing. That directly opposes testPreparationChildrenBuildingOneRuleWriteIdenticalResultIndexEntries.
- Design gaps: a child can name a generated snapshot but
complete(token, value, transcript) has no way to deliver its content; the transient-nested-output fixture writes to an arbitrary absolute path and the interface records no writes; directory-listing digests use filesystem order; buildLocalRule/buildLocalArtifact carry no invocation id.
buildRuleLocalArtifactDirIndex also stores an absolute path and is rewritten on every hit (src/FileBuildCache.kt around 226-230).
- Twelve existing tests assert on v3 entry internals.
Decisions needed from the owner before any further step
- Should byte-identical modules at different paths share cached results (reverse pull request 359's choice) or stay distinct (drop the identical-entries test from scope)? Recommendation: stay distinct.
- May the twelve tests that assert on v3 record internals be rewritten to assert the same guarantees through public APIs? Recommendation: yes.
- Scope: full observed-IO design, or only a record with no machine-specific paths (stages 1-2 of the plan)? Recommendation: narrow first. If narrow, the bridge and executionenvironment session API (pull requests 29 and 71) would be unused, so they should not be merged; that is why 29 is held although its checks pass.
Next steps once decided
- Full design: confirm the
kotlin.build (remote) check on pull request 29 shows success, enqueue it (GraphQL enqueuePullRequest), publish bridge 0.0.11 from merged main, push the resolved change to pull request 71's branch, compile and run its observedCache* tests, land it, then follow the staged plan.
- Narrow design: close or park pull requests 29 and 71, implement stages 1 and 2 of the plan in kompile-core.
Branches (remote heads verified with git ls-remote at 14:39 UTC)
| Repository |
Branch |
Head |
What is on it |
| kompile-core |
wip/result-index-v4-20261006 |
3ddb9e4e4e79ecd751a5e1104baf0564bdbe6cb7 |
six acceptance tests, all notes, manager plan; builds; 6 of the 7 selected tests fail by design |
| kompile-executionenvironment |
wip/observed-rule-sessions-20261006 |
03eca6cc895a16fee3217d4e80bca2c37d7c5b8f |
pull request 71's change on current main, conflicts resolved, not compiled |
| kompile.executionenvironment.bridge.interface |
wip/observed-rule-sessions-W48 |
783b207f3e2c91d47fca4a826a30fb6abe625e0e |
pull request 29's head; local suite 124/124 |
Nothing is unpushed. Another session has https://github.com/CodexCoder21Organization/kompile.executionenvironment.bridge.interface/pull/30 open on the bridge repository; it touches the same interface file and README.
Operational notes
- A
kotlin.build (remote) check can show in_progress with details_url https://kotlin.build and no buildtest run behind it; a check-suite rerequest did not recover it, a new push did. Recorded at https://github.com/CodexCoder21Organization/PlanRepository/blob/main/challenges/2026-10-06-1416-kotlin-build-remote-check-stayed-in-progress-for-2-5-hours.md. Look for the run in https://buildtest.kotlin.build/api/runs?limit=500&page=N by repository label.
- The buildtest queue does not start runs in submission order; waits today ranged from 20 to 155 minutes.
Earlier record (kept as written; historical)
Verify runner rollout and finish the bridge session API chain; retain v4 result-index work
RE-VERIFY: Snapshot refreshed 2026-10-02 16:07:28 UTC by lane btr132. Re-check PRs with gh pr view and branches with git ls-remote. Historical 2026-09-30 observations below are preserved, not renewed current claims. This lane made no code change, merge, enqueue, publication, deployment, or handoff completion.
Lane btr132 update ? 2026-10-02 16:07:28 UTC
The assigned runner release step is already delivered. https://github.com/CodexCoder21Organization/BuildTestRunner/pull/141 merged on 2026-10-02 at 07:42:41 UTC as 962511127006ff6d9842042c88e59d29299376ac. Its two checks were SUCCESS, including https://buildtest.kotlin.build/run?id=42cc045a. Main declares RUNNER_RELEASE_VERSION="0.0.120" and MavenPrebuilt2("kompile:manager:0.0.198").
The named test fix is also on main: https://github.com/CodexCoder21Organization/BuildTestRunner/pull/134 merged on 2026-10-01 at 03:32:20 UTC as 960881e4ec86b8331316b27f6f5628264b2ca38a. It prepares the same failing fixture before the timed body, retains the real rule execution and transported failure assertions, and checks that both compiled scripts are reused.
https://github.com/CodexCoder21Organization/BuildTestRunner/pull/132 remains OPEN/DIRTY at a0e927a1daae002bd8842fd412f89eafccb15d7e. Its required remote check already succeeded at https://buildtest.kotlin.build/run?id=4ac0e646; its informational compile check failed. Its diff is only the release identity, README release prose and build history. The release identity exactly matches main; main has newer release prose covering later merged changes. No unique implementation or test needs salvaging from this PR. Rebase/fix/new CI on this superseded release PR are unnecessary; the supervisor should review and retire it. The lane did not edit or close it.
Read-only checks returned HTTP 200 for https://kotlin.directory/buildtest/runner/buildtest-runner/0.0.120/buildtest-runner-0.0.120.pom and https://kotlin.directory/buildtest/runner/buildtest-runner/0.0.120/buildtest-runner-0.0.120.jar. The POM names kompile:manager:0.0.198. Artifact existence and this dependency are verified; the published JAR's source SHA and live droplet runner version are not verified here. Do not republish this coordinate.
Local confirmation: 2 passed / 0 failed across two separate targeted invocations of withlock.sh scripts/test.bash --local --test testRunnerPreservesTransportedBuildFailure. First run used main code at 962511127006ff6d9842042c88e59d29299376ac; the pre-push rerun used the rebased analysis branch with identical production and test files. Both exited 0 and reported ALL TESTS PASSED (1/1 tests completed successfully). No new remote/CI run was submitted. The requested five-run comparison with the superseded release head is refuted as unnecessary: the release and fixture fix are already independently merged and the replacement release CI passed.
The first handoff-cli get failed during service bytecode download with "Stream closed while reading message data (read 262102 of 2572257 bytes)"; the next unchanged get --json succeeded. The report-challenge CLI was not invoked because it automatically merges a PR, forbidden in this lane. The supervisor can record this separate tool issue if useful. Preparation thread dumps showed active Kotlin analysis; they are routine verification samples, not a diagnosed runner defect, and were not committed.
Current steps for the supervisor
- Re-verify current state first; review and retire the superseded https://github.com/CodexCoder21Organization/BuildTestRunner/pull/132. The runner release and named fixture fix are already on main.
- Verify what runner version the droplets actually launch and the source of the published 0.0.120 artifact. Any production deployment still needs the user's explicit request. No deployment was performed or independently verified by btr132.
- Resume the bridge session chain: https://github.com/CodexCoder21Organization/kompile.executionenvironment.bridge.interface/pull/29 remains OPEN at d576333e0b8f4ae21632fbec32546409b5110603, with remote FAILURE at https://buildtest.kotlin.build/run?id=4de49cc8; https://github.com/CodexCoder21Organization/kompile-executionenvironment/pull/71 remains OPEN/DRAFT at 372219f663fbd1a5a5997c97c82e0b5d816dbb1e with failing checks. Those PRs were not edited by this lane.
- Preserve the later v4 mission and acceptance gates below. This larger handoff is not complete.
Newly verified branch / PR rows
| Repository |
Branch |
Remote head SHA |
PR / state |
What is on it |
| BuildTestRunner |
main |
962511127006ff6d9842042c88e59d29299376ac |
https://github.com/CodexCoder21Organization/BuildTestRunner/pull/141 MERGED |
Release 0.0.120 and fixture preparation fix; both release PR checks SUCCESS |
| BuildTestRunner |
wip/K24-manager-0.0.196 |
a0e927a1daae002bd8842fd412f89eafccb15d7e |
https://github.com/CodexCoder21Organization/BuildTestRunner/pull/132 OPEN/DIRTY; superseded |
Old release prose and same release identity already on main |
| BuildTestRunner |
wip/btr132-2026-10-02 |
a93158aff3c96076dc48f756d307b60608ad5c94 |
no new PR; analysis evidence only |
Analysis; no code/test change |
Mission now (original mission preserved)
The first blocker for this effort is that the required kotlin.build (remote) check of the bridge session API PR https://github.com/CodexCoder21Organization/kompile.executionenvironment.bridge.interface/pull/29 fails in shared workspace preparation, before any test runs, with "No build.kts in the workspace declares package 'build.kotlin.jvm'". Untouched bridge main fails the same way (https://buildtest.kotlin.build/run?id=f5e13c58). This is an upstream kompile-core defect, and it is now fixed and published: https://github.com/CodexCoder21Organization/kompile-core/pull/348 MERGED (merge commit 242cef55, RELEASE_VERSION 0.0.196). The fix lets builtin build rules resolve from the buildscript's embedded build-kotlin-jvm facade. What remains is getting that manager onto the buildtest droplets.
Done (verified firsthand 2026-09-30)
- kompile:manager:0.0.196 PUBLISHED from kompile-core main 242cef55 (local build, kompile-cli 0.0.112). It was 404 before the publish. After it, the POM at https://kotlin.directory/kompile/manager/0.0.196/manager-0.0.196.pom is byte-identical to the local build, and the jar SHA-256 is 9ea13341ec80a14743e618f5af538b626dc89a2838b4be8fcec7064d8f3a4aed on both sides. The jar contains the fix (kompile/PublishedBuildRuleArtifactsKt carries the builtin-rule-facades path). The only dependency change in the POM is the manager's own version.
- BuildTestRunner PR https://github.com/CodexCoder21Organization/BuildTestRunner/pull/132 (branch wip/K24-manager-0.0.196, head d9886595b7aa39d49c83aaf79bb1e1ffbd18002a on main e4a6490) moves the kompile:manager pin from 0.0.188 to 0.0.196 and RUNNER_RELEASE_VERSION from 0.0.119 to 0.0.120. 0.0.120 was 404 on kotlin.directory. A local buildtest.runner.buildMaven builds 0.0.120 with a POM depending on manager 0.0.196. Local targeted tests passed 4/4: testE2EWorkQueueEmitsRepeatedWorkspaceMismatchOnce, testE2EFourConcurrentPreparationsPreserveLease, testE2ESequentialDependencyGraphsReuseCommonArtifact and testE2ERunnerHeartbeatCadenceContinuesAcrossDiscoveryAndWorkLoop. Branch CI on d9886595: required kotlin.build (remote) https://buildtest.kotlin.build/run?id=958153dd FAILED 269/270. Shared workspace preparation passed; the run reached TESTING. The single failure is testRunnerPreservesTransportedBuildFailure, which hit its 30 s limit inside the Kotlin compiler (stuck in SingletonTypeComponentDescriptor.createInstanceOf). This is pre-existing on main: main's own merge commit e4a6490 remote run https://buildtest.kotlin.build/run?id=e052da19 failed the same test with the same signature, plus six other timeouts. PR 131's description attributes it to the deployed runner (0.0.113, manager 0.0.176) launching test JVMs C1-only. This PR changes no source or tests, and its CI runs under the deployed runner, not under this pin. So the check is red because of a main defect, not this head. It was not re-run. kotlin.build (kompile-remote-build) is informational and was still running. A decision is needed: fix that test's cold compile inside its timed section (compare https://github.com/CodexCoder21Organization/BuildTestRunner/pull/110, which did the same for a sibling test), or accept it being red until the runner deploy removes the C1 cap.
Remaining chain (historical 2026-09-30 snapshot; current steps above)
- Resolve the pre-existing main failure of testRunnerPreservesTransportedBuildFailure (see above) so the required check on https://github.com/CodexCoder21Organization/BuildTestRunner/pull/132 can go green, then review and merge 132.
- Publish buildtest.runner:buildtest-runner:0.0.120 from merged main (buildtest.runner.buildMaven; versions are immutable; take the next free patch if 0.0.120 was taken meanwhile).
- Deploy that runner as the version the buildtest droplets launch (the coordinator's production runner version; bridge 29's failing runs used runner 0.0.113). This is a production deploy and needs the user's explicit request. A pin change inside bridge 29 alone does NOT change the runner's manager.
- Re-run bridge PR 29's required kotlin.build (remote) check and confirm preparation gets past build.kotlin.jvm.
- Land bridge 29, publish bridge 0.0.11, and un-draft/land executionenvironment PR https://github.com/CodexCoder21Organization/kompile-executionenvironment/pull/71.
Later work: observed-session IO capture and portable v4 (unchanged design from W48)
- Final-review the session API and transport PRs, resolve CI infrastructure separately, then orchestrator merges/releases and chooses dependency pins. Do not infer publication from the local helper. No worker may merge or publish manager.
- Runtime observed-session scope: explicit logical nesting and propagation across permitted executor handoffs; every executed child owns a session, including no-reservation executions; drain active IO before completing/aborting. Test callback reentry, close during reads, cached-child replay and concurrent siblings through public APIs.
- Consumption-time adapters for content reads, metadata/existence including absent paths, directory enumeration, writes/generated allocation, and trusted compiler/resolver inputs/outputs. Generated inputs use durable content identities, never transient paths. Classify workspace-relative, external and generated inputs at the execution boundary. Record conflicts as incomplete.
- Enhancer/buildscript manifest and coverage/path checks. Unknown/native/reflection/async IO cannot claim complete coverage. Rules observing absolute workspace paths keep normal File semantics and stay ineligible for portable reuse. Do not normalize arbitrary strings or infer purity from argument shape.
- Manager implements the session capability, nested transcript replay (including hits), durable generated snapshots, validation of missing/corrupt blobs, portable fingerprints and canonical v4 records. Explicitly reject/rebuild v3 or retain clear compatibility; generic index API remains unchanged.
- Make all six acceptance tests below pass together, then run W13's 28-test compatibility gate and all 13 existing result-index tests. Two independent reviews against final integrated heads before release. The W48 transport gate is a different gate and cannot substitute for these.
Core acceptance tests (still unresolved):
- testPreparationChildrenBuildingOneRuleWriteIdenticalResultIndexEntries
- testBuildRuleResultIndexInvalidatesWhenRelativeWorkspaceFileChanges
- testTransientNestedRuleOutputDoesNotForceSecondBuild
- testResultIndexInvalidatesWhenAbsentRelativeInputAppears
- testResultIndexInvalidatesWhenDirectoryMembershipChanges
- testResultIndexInvalidatesWhenAbsoluteExternalInputChanges
Keep testResultIndexPreservesObservableWorkspacePath green. The W13 publication-lock/content-addressed restore changes and W23 callback propagation are already merged; do not redo them.
The separate parent-CPU/WorkspaceCoursierBodyStore.copyInto item is outside this lane. Its original CPU handoff was already completed/archived by W24 with a measured refutation of the earlier CPU attribution; W48 does not reopen it. W4's result-index reproducer is preserved and still belongs to this handoff.
Branch and PR table
| Repository |
Branch |
Head |
PR / state |
| kompile-core |
main |
242cef55 |
https://github.com/CodexCoder21Organization/kompile-core/pull/348 MERGED; manager 0.0.196 published |
| BuildTestRunner |
wip/K24-manager-0.0.196 |
d9886595 |
https://github.com/CodexCoder21Organization/BuildTestRunner/pull/132 OPEN; remote check red 269/270 on a pre-existing main failure |
| kompile-core |
wip/result-index-v4-W48 |
04980a48 |
evidence WIP for v4; no PR |
| kompile.executionenvironment.bridge.interface |
wip/observed-rule-sessions-W48 |
d576333e |
https://github.com/CodexCoder21Organization/kompile.executionenvironment.bridge.interface/pull/29 OPEN; remote check red on the upstream defect until the runner deploy |
| kompile-executionenvironment |
wip/observed-rule-sessions-W48 |
372219f6 |
https://github.com/CodexCoder21Organization/kompile-executionenvironment/pull/71 draft |