Repository navigation
Conversation
|
The PR is ready at 21794fe. The code looks right to me. Not blocking: the new I did not run the layering, fallow or unit suites or No checks have reported on this head, so nothing has run against the gates this PR changes. The PR has merge conflicts with main, and the head does not descend from the base tip, so the diff also shows unrelated main commits such as the limrun #3504 changes. Before merge, rebase or retarget the base so CI runs the layering, fallow and unit gates, then remove the dead |
21794fe to
ab48059
Compare
|
Base retargeted to |
|
Final head |
ab48059 to
7937155
Compare
Size Report
Startup median (7 runs, lower is better):
|
|
This PR is ready at 7937155, and the earlier conflict from 21794fe is fixed. Not blocking, and you can take or leave these: the retargeted line at .device-evidence/CHECKLIST.md:104 should point at execution/interaction/internal/tests/interaction-capture-disclosure.test.ts, where the press/no-capture test lives, and row 23 of docs/adr/0023-end-state-hop-trace.md:92 should name packages/daemon/src/resources/device/device-claim-admission.ts, since the old path was already stale at base. The code looks right to me, but I did not build or run the tests, so the byte-identical daemon bundle and the unit-core and test-name parity claims are unverified. Required evidence is in place, and there are no conflicts. The CI failures look unrelated to this PR. The Repo Guards R11 failure lists the same 63 escape specifiers in 39 files at base 87969a2 and at head (by my own scan of relative specifiers, which can miss multi-line imports), so this PR moves files but adds no escapes. The Mutants jobs fail on code this diff does not touch. The Ownership budget fails because docs/agents is already 40002 bytes at base, over the 40000 cap, and this PR adds 15 bytes through two path retargets. I saw no Typecheck & Package log, so I cannot confirm the PR body's claim that its failure is inherited from 11b. Before merge, the base branch (refactor/daemon-package) needs to bring docs/agents back under 40000 bytes with about 17 bytes of headroom for this PR, and clear its R11 and typecheck failures. |
7937155 to
5e88063
Compare
|
Re-ran on the current 11b tip (reset to
|
5e88063 to
75d7641
Compare
|
Re-run on 11b |
75d7641 to
43a8978
Compare
|
Re-run on 11b base |
Daemon-root-relative mapping applied by codemod (git mv plus every importer repo-wide, package-subpath and vi.mock specifiers, the package exports map, markdown docs, and repo-path literals included), with the repository-wide format sweep the rewritten lines require. The folder under the daemon root becomes the layer declaration; the manifest still carries the claim until the gate commit retires it. 659 moves over 669 tracked package files (10 cross-layer test-support leaves stay identity in the top-level __tests__/support/), 2,906 relative-spec rewrites in 585 files, 534 repo-path literal rewrites, 640 package-subpath rewrites, 16 exports-map keys, and markdown retargets confined to paths whose files exist at head.
The five layer folders now carry the claim the manifest carried: the first path segment under the daemon root is the file's layer, an unknown segment or a production file at the zone root fails, and the edge rule over core < resources < execution < sessions < server is unchanged. The manifest JSON and its drift check retire with this commit — the folder is the declaration, so ownership moves with the file and cannot decay into fiction separately from the tree. The rule derives its root from the shared DAEMON_SOURCE_ROOT constant and refuses an empty input set, so a stale scan filter cannot pass it silently.
The row cited src/daemon/device-claim-admission.ts, stale since the package extraction; it now names the file's home in the resources layer. The other src/daemon/ citations in the ADRs name files the tree no longer carries at all and keep their historical spelling. (cherry picked from commit 563b382)
…tale The probe walked src/daemon/session-teardown.ts, a path the package extraction had already orphaned; it now resolves through packages/daemon/src/sessions/, where the move put the teardown owner. The non-vacuity pins (closure size, materialized-path-registry membership) carry over unchanged. (cherry picked from commit 7937155) (cherry picked from commit 5d943ca) # Conflicts: # src/__tests__/daemon-composition/session-teardown-import-closure.test.ts
…audit scope The route-handler and interaction-facade fallow entries follow their files into the sessions/execution layers. The atomic-publish ownership probe reads its judged sources through new URL(...) relative to the test, so its specifiers follow the move by hand. The daemon-shaped test-support file the move brought into the audit diff joins the per-file test-support exemption: every consumer is test-tree code --production analysis cannot see. (cherry picked from commit 687b53d) (cherry picked from commit 977fbd7)
Ownership probes and eager-closure walks that read daemon modules by path follow them into their layer folders: the replay ownership scan's synthetic probe locations move one folder deeper, and the daemon- shaped test-support fallow entry settles on the one file the move actually brought into the audit diff. (cherry picked from commit 41fa23b, minus the lease.test.ts plugin-manifest hop: the 11b lineage removed that probe's file body, so nothing follows the move there) (cherry picked from commit 665850c)
Dead oxlint override for a file deleted before this stack, the vacuous device-lane fixture pin (now asserts the fixture exists, at its path in this tree), the R81 helpers that never needed to leave their module, and the closure-probe hops that follow the interaction routes and replay probes into their layer folders. (cherry picked from commit baebba2; the ime-capture fixture pin tracks its 11b home under packages/platform-android/src/fixtures/) (cherry picked from commit 5e88063) # Conflicts: # oxlint.config.ts
|
The code is in good shape at 43a8978. The earlier clean review at 7937155 still holds, and the layer folders now declare the layers. The 41 checks at this head show none failing. The PR conflicts with its base, refactor/daemon-package. I did not build or run any gate, so the byte-identical bundle, the 655/655 test-name parity, the R81 bite proofs and the green gate list are your claims, and I did not read the codemod commit 49e3d0f in full. The base branch refactor/daemon-package was rewritten to 28949e4, and it adds three production daemon files outside the layer folders: handlers/session-device-status-response.ts, settle-observation-capture.ts and device/device-claim-conflict.ts. Please re-stack onto 28949e4 by re-running the layer codemod, so these files land in layer folders before R81 runs again. The conflicts in .device-evidence/CHECKLIST.md, .fallowrc.json, AGENTS.md, docs/adr and device-claim-conflict.ts also need to be resolved in that re-stack. Then please share a green R81 run on the new head. Not blocking: the R81 success message in report() at scripts/layering/check.ts:440 hardcodes 'core < resources < execution < sessions < server' (the header comment at check.ts:57-61 does the same). You could print One question on simplicity. The layer folder is now the declaration inside the package, and daemon-layers.ts owns it well. But the 16 named facade subpaths now include the folder, for example |
43a8978 to
a9cdd53
Compare
|
Re-run on 11b base |
What
Every daemon file in
packages/daemon/srcmoves under a layer folder —{core,resources,execution,sessions,server}/— keeping its sub-structure inside the layer (e.g.device/device-claim-admission.ts->resources/device/device-claim-admission.ts). Tests and test support follow their source module one-to-one. R81 stops reading the manifest and derives the layer from the first path segment under the daemon root;scripts/layering/daemon-layer-manifest.jsonand its drift check are deleted in the same PR.src/daemon.tsand thedist/src/internal/daemon.jsoutput are unchanged.Re-run on 11b tip
28949e4a8(refactor/daemon-package, #3546) per coordinator: reset onto the tip, re-ran the move codemod with daemon rootpackages/daemon/src, no hand-resolved moved files. R81 derives its root from 11b'sDAEMON_SOURCE_ROOTconstant (scripts/layering/tracked-sources.ts) — nopackages/daemon/src/orsrc/daemon/literal filters remain in the rule or its caller — and refuses an empty input set, so a stale scan filter fails loudly instead of passing vacuously. The teardown-closure probe keeps 11b's constant-deriveddaemonRootwith only thesessions/hop added.Mapping
669 tracked files under the package src root, 669 mapped, 10 identity (cross-layer
__tests__/support/leaves), 659 moved: core 117, resources 49, execution 138, sessions 229, server 107, root__tests__/19.vi.mocktargets, then physical colocation) -> single-layer direct-import closure -> highest-rank direct layer. Two tests with zero daemon imports land incore/__tests__/.__tests__/support/(10 identity files). R81's scan treats test-tree files as layerless (isProductionSourceFileexcludes__tests__/); planting shared support intocore/would claim a layer it does not own. The root__tests__/is test-only, so the folder-derivation gate still rejects any unlayered production path at the daemon root.affected/modelin-memory fixture graphs are retargeted by hand to stay self-consistent (their internal relative specs describe fake trees, not real paths, so the codemod cannot resolve them).Line counts
git mv, 2,906 relative-spec rewrites in 585 files (from,import(),require(),vi.mock), 640 package-subpath rewrites (@agent-device/daemon[/testing]/…), 16 exports-map keys moved with their files, 534 literal rewrites, 87 markdown hits over 16 files. The./testing/*wildcard needs no change: it maps./src/*.tsand follows every file automatically.Evidence
check:quick(lint + typecheck),check:layering(R81 over the moved graph; 9/9 rule tests),check:di-seams,check:gate-manifest,check:production-exports,check:agent-guidance(docs/agents 39,963 <= 40,000 bytes, no trim needed), eager-closure-budgets + test-file-size ratchet (886 cases), depgraph suites (34) — all green. Heavy gates under the host lock:check:affected --run,check:fallow,check:package— green.dist/src/internal/daemon.jsis byte-identical to the base build at28949e4a8(baseline rebuilt from the clean base and from the moved tree; both builds deterministic and equal). Per-file test names: all 659 moved files, extractedtest(...)/it(...)names identical to the base tree (static extraction overgit show basevs head).core -> sessionsstatic import = 1 violation; production file at the daemon root = 1 violation; empty input set = 1 violation. All three caught; the registered test file pins all three permanently.session-authority-overlay.ts(the R75 ratchet measures the pre-move tree through that constant pair). All non-glob.fallowrc.jsonfileentries name tracked paths (#3550s pruning absorbed the session-test-harness exemption, and the react-native split entry follows its file into the execution layer); no glob for the retiredsrc/__tests__/test-utils/replay-script-source.ts(the file no longer exists in this lineage).Owner review items applied
.device-evidence/CHECKLIST.md: the press/consumed-no-capture pointer now namessrc/__tests__/daemon-composition/interaction/interaction-capture-disclosure.test.ts— that test's live home at this base (11b moved it out of the package; the earlier suggestionexecution/interaction/internal/__tests__/interaction-capture-disclosure.test.tswas its home on the old base).docs/adr/0023-end-state-hop-trace.mdrow 23 namespackages/daemon/src/resources/device/device-claim-admission.ts; ADR 0022's R75 handler-surface sentence names the live{sessions,execution}/handlers/**roots. Othersrc/daemon/citations in the ADRs name files the tree no longer carries at all and stay historical.