pluto
PLUTO-169
EVO-12 deploy-skew guard FAST-FOLLOW (dormant, flag-OFF + Q3-held): (a) APP manifest-oracle — replace interim KNOWN_SEGMENTS with a prebuild codegen that walks src/app and emits a BUNDLED TS route-pattern module (Vercel-safe, rot-free, not a hand-allowlist); shared cross-fleet helper coordinated w/ coder-mars + coder-ayudarg per pm-llmmsgsrv. (b) DAEMON skew-suppression — nw-venus updates applog daemon to consume detail.isSoftNav/routeResolves + deploy-timing window so a stale-build soft-nav of a valid route downgrades ERROR->WARN and does NOT DM; audit-pluto specs the daemon-side predicate. Both are flag-ON PREREQUISITES (part of the Q3-enable gate), not live bugs. Canonical predicate: downgrade ONLY when RSC-soft-nav AND path in build-time route manifest; hard-nav/curl/bot ALWAYS page.
Backlog normal
cpcoder-pluto-cc
Questions
No questions.
Activity
-
Predicate is 3-SIGNAL (brainstorm correction): RSC-soft-nav AND manifest-match AND build-id-MISMATCH. The 2-signal form (RSC+manifest) silences real data-misses on valid dynamic routes. Pluto's interim daemon deploy-timing window is a LOSSY proxy for the missing build-id signal → the sound form depends on PLUTO-170 (deploymentId). Manifest oracle must fail-TOWARD-error on load-fail.
-
Daemon-side predicate spec RECEIVED from audit-pluto (queued for nw-venus lane): INPUT detail.routeResolves + isSoftNav + tier; daemon state latestDeployTs (Vercel list_deployments READY) + SKEW_WINDOW~10min. PREDICATE: (1) routeResolves=FALSE -> PAGE (primary gate; genuine dead-link/typo/retired route, un-windowed); (2) routeResolves=TRUE -> artifact: 2a softNav+in-deploy-window->SUPPRESS (deploy-skew), 2b hardNav->SUPPRESS (redirect-render over-fire, the /administrar phantom), 2c softNav+outside-window->PAGE (real valid-route data-miss, Elazar-tunable). FAIL-SAFE: missing deployTs -> never suppress via 2a. HARD PREREQ: full-path manifest-oracle routeResolves (coarse first-segment would wrongly suppress /administrar/garbage dead-sublinks) -> flag-ON gate. Signal-3=build-AGE timer (Pluto=Hobby, no build-id). Open arm: authed redirect-only render (/administrar->/docentes) phantom-page vector under flag-ON, neutralized by routeResolves=FALSE rule, needs one authed-session probe. audit writing manifest-oracle acceptance tests. Enable-readiness set: [manifest-oracle full-path + daemon predicate + Elazar Q3 ratified + authed-redirect arm checked].
-
Manifest-oracle ACCEPTANCE TEST SPEC attached (audit-pluto, flag-ON gate evidence). Helper: routeResolves(pathname:string):boolean, full-path, x-pathname query/hash-stripped. Invariants: INV-1 no-false-resolve (unserved path->false->PAGE; HARD, case C), INV-2 no-false-reject (served->true), INV-3 source-of-truth drift-guard walks src/app at test-time, asserts oracle==served set (HARD; prevents KNOWN_SEGMENTS-style rot). Case table A static routes->true; B dynamic [param]->true only with non-empty slot (one filled+one empty each); C CRITICAL dead-subpath /administrar/garbage /administrar/docentes/nope /practicas/123/nonexistent /admin/zzz ->false (why coarse first-segment can't ship); D unknown top-level /admindd etc->false; E retired routes->false (stale-bookmark surfacing); F normalization trailing-slash/case-sensitive/empty-pathname->false + (PM add) boundary-contract assertion that x-pathname is query/hash-stripped at the helper. Accepted shape = codegen-at-build static route table + drift guard (Vercel won't trace .next manifest into lambda). Gate: flag-ON BLOCKED until A-F + INV-1/2/3 green. Test FILE stub deferred to audit until coder lands the helper signature. Coder helper dispatch held until Elazar Q3 clears.
-
Synthesis alignment (bs-mqnaes0gbfm pm-venus FINAL close): the daemon PRIMARY GATE = page only when routeResolves=FALSE is now the ratified fleet predicate (§1) — covers skew AND redirect-over-fire in one rule. Pluto's 169 daemon spec already = this. no-silence invariant (§3) is per-app on 'does WARN surface'; Pluto check = applog-pull 30-min digest includes WARN 404 (audit-pluto verifying). Shadow telemetry split to PLUTO-171 (flag-independent, ships ahead). Signal-3 §5: Pluto=Hobby build-recency timer; OPEN non-blocking fast-follow (audit-venus) = Next-native deploymentId->x-deployment-id MAY work on Hobby (would upgrade timer->build-id, non-breaking) = the reframed PLUTO-170.
-
Signal-3 CONVERGENCE (Q3, audit-venus FF1b live Hobby evidence): VERCEL_DEPLOYMENT_ID IS present server-side on Hobby — build-id skew detection is NOT plan-blocked, only dead today because next.config doesn't SET deploymentId. 1-line add (next.config deploymentId=VERCEL_DEPLOYMENT_ID) could enable precise build-id → dissolves recency-timer + ≤10min lossy window + the whole Q3 accept-lossy-vs-Pro question fleet-wide (Q3 collapses to 'enable the guard', no Pro upgrade). Pluto: build-id = likely-active branch in the pluggable signal-3; timer = fallback only if 2/2 fails. GATE before §4 locks (audit-pluto, queued after PTD:187904d + digest-verify): (i) does x-deployment-id reach Pluto not-found boundary pre-render under Next 16.1.6; (ii) Hobby asset-routing side-effect from setting deploymentId (= blocker on shipping the 1-liner, it changes ALL-request routing). next.config change ships ONLY after gate-ii clears; reconcile vs audit-venus lead verdict. Shadow telemetry (PLUTO-171) independent.
-
no-silence VERIFIED for Pluto (audit-pluto): WARN-tier 404 surfaces in applog-pull@pluto digest. Basis: pull filters level ONLY (no category/action exclusion), APPLOG_DIGEST_LEVELS=warn = flag-OFF 404 tier, routes APP=pluto->pm-pluto-cc. Pluto Q3 = FIRM-SOFT (Hobby + warn-surfaces-via-digest), no make-warn-surface gap pre-flag-ON. Caveat (lodged, not a gap): digest groups-by-signature -> flood = one [warn] page_not_found xN aggregate per 30min, count preserved. Downgrade-not-silence honored.
-
§4 CANONICAL refinement (LOCKED fleet-wide, coder-venus gap-fix): downgrade is NOT blanket on routeResolves=TRUE -- that would silence a genuine CURRENT-BUILD data-miss (stale in-app link to a deleted record), violating Elazar's 404=our-bug->DM+email. CANONICAL PREDICATE: guard = RSC-soft-nav AND routeResolves(manifest-match) AND signal-3; signal-3 = PROVEN SKEW (build-id MISMATCH) -> downgrade WARN+digest; build-id MATCH = real data-miss on current build -> STAYS ERROR/PAGES; FAIL-TOWARD-ERROR (no positive skew proof -> pages); bare-timer fallback only where build-id header empty (lossy <=10min, downgrades BOTH skew + real data-miss = strictly worse, why build-id is the target). QUERY RULE: readout keys on DETAIL fields ONLY (skewSuspected/classifiedReason/tierLevel) NEVER action (labels diverge per app). Principle LOCKED now (gate-independent); impl build-id-vs-timer pends audit-venus 2/2 + Pluto gate-i (Next 16.1.6). Pluto 169 daemon predicate to encode this exactly.
-
FF1b 2/2 VERDICT (audit-pluto, doc-grounded, reconciled w/ audit-venus). build-id skew detection FEASIBLE + Hobby-viable, NO Pro dependency (framework-level deploymentId, stable since 14.1.4). GATE-i: x-deployment-id REACHES not-found pre-render (mismatch handling is client-side, server renders normally, client origin build-id arrives as inbound header; server build=VERCEL_DEPLOYMENT_ID confirmed) — RESIDUAL: Next 16.1.6 headers() SURFACING it into the SC render is doc-unproven (Next filters some internal headers) -> needs canary probe echoing headers().get('x-deployment-id'). GATE-ii: NO asset-routing effect (?dpl cache-bust only), BUT app-wide behavior change -> any build-id MISMATCH forces FULL-PAGE HARD RELOAD on next nav (loses useState; URL+localStorage survive) = deploy-window UX blast radius -> NOT a 1-liner, needs deploy-window UX review + canary. KEY: app-side compare is REDUNDANT for RECOVERY (Next self-heals via hard reload) -> our compare = precise-skew TELEMETRY/SUPPRESSION only, not the fix -> strengthens PLUTO-171 shadow-telemetry-first, lowers deploymentId urgency. TWO pre-ship gates queued: (1) headers()-exposure canary probe, (2) hard-reload UX validation. Recommend: keep recency-timer as live default per-app until both clear. audit-venus owns platform asset-retention leg.
task
2026-06-21 by wi-cli-venus
6w ago