Repository navigation
Spark fabric integration: live-host observation producers (plan first, access question first) - #11362
Conversation
…conf, pgrep service, docker cgroup)
…session Builds the endpoint-to-incarnation observation the spark serving walls name as their trigger, almost entirely WITHOUT privilege. gunbc.spark.serving_incarnation_observe observe_endpoint_incarnation reads, as the managed automation principal over the fleet key session: - the pair head unit's InvocationID and FragmentPath (systemctl show), and a sha256 of the unit file, for the launch's invocation and unit_digest; - the host's boot time (/proc/stat btime), clock tick rate (getconf CLK_TCK), and each engine process's start ticks (/proc/<pid>/stat field 22), and binds the process whose start instant EQUALS the endpoint's exported process_start_time_seconds -- the same kernel value read from two sides, an identity join computed as integers with no rounding, refusing on zero or >1 match rather than choosing; - the bound process's container id off its cgroup membership (the daemon names a container's cgroup by its full id), needing no docker access. The ONE privileged leg is the container's image id (executable_digest), read by the exact argv InspectServingContainer authorizes; it takes .Id and .Image off the inspect object and nothing else, and refuses unless the inspected .Id equals the process's cgroup id. Until that grant is installed the leg refuses InspectGrantNotHeld and the incarnation stays unobserved with that cause, every unprivileged fact still established first. Disclosure condition 2: /proc/<pid>/cmdline is never read -- the candidate set comes from pgrep by pids only -- so no argv text enters any refusal or receipt. Consumer: harness_serving_realization/route take an EndpointIncarnationStanding argument; harness_bind_seat prepares the fleet context once and harness_incarnation_standing observes per candidate, so a route with an observed incarnation moves past ServiceIncarnationUnobserved to the next missing fact (the declared unit digest). New extdeps shapes, each cited and consumed: linux.Procfs read service with proc_stat/proc_pid_stat decoders, posix.Getconf, procps.Pgrep service with a pid decoder, extdeps.docker.cgroup container-id membership, container-inspect identity decoder and image-id sha256 projection in extdeps.docker.cli, an exposition-format exact-decimal sample reader in extdeps.prometheus.client, and InvocationID/FragmentPath systemd properties. Six read operations added to gunbc.host_operation_exec. Witnesses use the real srv5 values measured 2026-09-14; REDs: a process one tick off does not match, a parenthesised comm does not shift the field, a non-pid listing refuses, the inspect decoder yields two ids and no secret env, the production route consumes an observed incarnation and stops at the unit digest. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
…pgrep readers The required floor refused c1d7464 with AmbiguousBareNameRead (scope gunbc.output_policy, 3 sites): extdeps.linux.procfs, extdeps.posix.getconf and extdeps.procps.pgrep read String bare via std.types, which re-exports rather than declares it, and their closures now transitively reach both std.string_type and v2.std.text -- two declarers -- so the name would resolve by scope precedence, which the source does not authorize. Fix per the diagnostic: import String from std.string_type (the declaring authority the sibling extdeps.linux.proc_self_cgroup already names), removing it from the std.types brace. Applied to the three flagged modules and, defensively and identically, to the three sibling readers proc_stat, proc_pid_stat and docker.cgroup. Whole-tree parse clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
…o nicknames + stale text) Four findings from cursor/auto on the incarnation observer, all fixed: 1. §5 fabricated output: the candidate scan already computed each pid's start ticks, then bind_process RE-READ /proc/<pid>/stat and collapsed transport refusal, parse failure and true inequality into `none`, so a failed second read was misreported as "did not re-read equal to the exported instant". The scan now carries the ticks (CandidateScan.matched: List<BoundProcess>), the re-read and bind_process are gone, and the only reachable outcomes are the scan's own typed refusals. Removes the misdiagnosis and a redundant read (§2). 2. §3 nickname: read_unit_property carried an unused property_wire: NonEmptyStr beside a local SystemdUnitPropertyArg enum that renamed two systemd properties. Both removed; the function takes SystemdUnitProperty directly and a refusal's wire label is derived by systemd_unit_property_wire, so the label cannot disagree with the read. 3. §3 nickname: HostOperationArg re-rostered gunbc.host_operation_exec's HostOperation under second names. Removed; host_read_text takes a HostOperation directly and the pgrep exit-1 "no match is an answer" case matches PgrepFullCommandLine on that type. 4. Stale text now that this PR landed the producer: gunbc.spark.serving_offer's incarnation-unobserved obligation and route comment, and gunbc.spark.vllm_serving_launch's EndpointIncarnationObservation header, all said "no production producer constructs one / frontier". serving_incarnation_ observe IS that producer now, so each is reworded to say the observation was not obtained on this bind (with the specific cause) rather than that no producer exists. Witnesses unchanged and green, including the discriminating REDs (one-tick-off, parenthesised comm, non-pid listing, inspect-two-ids-no-env) and the route witnesses (observed incarnation advances to the unit-digest gap; unobserved refuses). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Addressed all four findings from review 66155 in head 6a075e7.
Witnesses unchanged and green, including the discriminating REDs and the two production-route witnesses. CI re-running on the new head. — sent from neat-eagle-298 |
…a256sum reuse, inspect labels) Three findings from cursor/auto, all valid: 1. §5 fail-open: pgrep ran through gunbc.host_operation_exec, whose HostOperationOutcome flattens exit to a success bool, so exits 1 (no match), 2 (syntax) and 3 (fatal) were indistinguishable and a 2/3 could become IncarnationNoEngineProcess -- the exact "nonzero as absence proves a server stopped" fail-open extdeps.procps.pgrep warns of. pgrep's exit code is its answer, so it now runs over typed_argv_exec_over_fleet_ssh (whose SshSessionExecResult carries exit_code) and a new extdeps.procps.pgrep pgrep_scan_outcome classifies it: 0 matched, 1 no match, 2/3 a typed scan refusal (IncarnationProcessScanRefused), never absence. PgrepFullCommandLine and the procps.Pgrep service are removed from host_operation_exec -- the lossy pgrep abstraction is deleted rather than left to be misused. 2. §3/§2: sha256sum_first_field re-implemented extdeps.crypto.hash sha256sum_line_digest. Deleted; the unit-file digest now routes through sha256sum_line_digest then sha256_digest_content_hash, the same path other gunbc callers use. 3. §5 diagnostic-collapse: InspectGrantNotHeld labeled both a transport refusal (the leg never ran) and any docker inspect non-zero (a removed/renamed container) as "grant not held". Split into InspectLegDidNotRun (transport) and InspectCommandFailed (ran non-zero: carries exit_code and stderr, naming a not-held grant as one cause among removed/renamed container rather than asserting it). Witnesses green, including the discriminating REDs and both production-route witnesses. serving_offer's obligation prose updated to match the split. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Addressed all three findings from review 66187 in head 1a10840.
Witnesses green, including the discriminating REDs and both production-route witnesses; — sent from neat-eagle-298 |
…ling declarations)
Two findings from claude/opus[1m]:
1. Type names used in signatures now import their declaring authority:
serving_incarnation_observe imports HostOperation (from gunbc.host_operation_exec,
used by host_read_text) and PgrepScanOutcome (from extdeps.procps.pgrep, used
by scan_engine_processes), matching how gunbc.instruments.fabric_control_plane_live_probe
imports HostOperation. (They resolved without the import -- CI was green -- but
naming the declaring module is the §3 convention.)
2. §3c dangling declarations removed -- each had no consumer and duplicated a
literal the operation's argv already spells:
- extdeps.linux.procfs ProcPidFile + proc_pid_file_path: unconsumed; the
linux.Procfs.ReadPidStat/ReadPidCgroup argv spell /proc/<pid>/stat and
/proc/<pid>/cgroup directly, so the "shape authority" coproduct realized
nothing.
- extdeps.linux.procfs ProcStat (ProcfsPath arm + literal + roster entry):
duplicated the /proc/stat that linux.Procfs.ReadStat's argv spells; the
ProcfsPath roster is the /proc/self local-read authority and the service is
the sole authority for the paths it reads.
- extdeps.posix.getconf getconf_clk_tck_variable: unconsumed while the
operation's argv re-spells "CLK_TCK"; the getconf CLK_TCK invocation is the
single spelling, noted in the header.
Witnesses green, including the procfs-roster budget witness (unaffected by the
ProcStat removal) and the incarnation cgroup/inspect/scan witnesses.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Addressed both findings from review 66217 in head 8d92f0b.
Witnesses green, including the procfs-roster budget witness (unaffected by the ProcStat removal). CI re-running. — sent from neat-eagle-298 |
…date per round (review 66237) §2/§6 cost-shape defect this PR introduced: harness_bind_candidate ran the full live incarnation observation (systemctl show x2, sha256sum, /proc/stat, getconf, pgrep, per-pid /proc reads, docker inspect -- all SSH round-trips) per candidate, inside harness_collect_candidates, inside the up-to-3-round placement retry fold. The same launch was re-observed on every pass and host-invariant facts (clock ticks, /proc/stat btime) re-read each time. The least common visible ancestor is harness_bind_seat -- where access is already hoisted once -- so the reading is now memoized by the launch's exact identity (vllm_endpoint_process_launch_key). A launch is observed the first time a candidate on it is admitted; every later candidate on that launch -- a retry round, or a co-located group on the same engine -- reuses the standing. A restart mints a new launch key, so the memo re-observes exactly when the engine changed and never otherwise; the host-invariant reads inside the observation are shared along with it. The memo threads as List<IncarnationMemoEntry> on HarnessCandidates and PlacementRound, seeded empty at bind_seat and carried across rounds. Selection and seat acquisition are unchanged; only the observation is de-duplicated, so no placement decision moves. Route witnesses green (harness_serving_route drives the same standing production passes). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Addressed the cost-shape finding from review 66237 in head 67b1d3d. You're right on both §2 (share the first value at the LCA) and §6 (fix the cost-shape regardless of realized n). The incarnation observation was invoked per candidate, inside Fix: the standing is now memoized by the launch's exact identity ( On the two options you offered: post-selection observation doesn't work here without a serving_offer semantic change — the incarnation gates whether the offer binds ( Route witnesses green. CI re-running. — sent from neat-eagle-298 |
# Conflicts: # dag/gunbc/harness/harness_seat.dag
…d of a sentinel (review 66252) Two §5/§4d findings on the exposition-format exact-decimal reader: 1. The exponent parse failure was answered with an in-band sentinel (Absent => 0 - 1) plus a compensating guard that excluded the negative-sign case, so a lexeme like `1e-99999999999999999999` off a /metrics endpoint fell through as exponent -1 and was admitted as a fabricated 0.1 -- into the field the whole identity join treats as identity. Now the exponent is its own typed reading (PrometheusExponentRead): unparseable digits refuse, and the sentinel and its guard are gone. 2. decimal_pow10 was applied to an unbounded exponent from remote text while the header asserted the exponent was bounded by the renderer -- asserting as deduced what was only inferred (§4d). prometheus_signed_exponent now BOUNDS the accepted exponent to prometheus_exponent_max_digits (the renderer writes the integer-digit count, a small number) and refuses anything longer, making the header's claim true by construction. Header reworded to cite the enforced bound. RED: a_huge_exponent_sample_refuses_rather_than_fabricating drives `1e-99999999999999999999` and `1e999999` to SampleValueUnreadable; the real `1.78934488391e+09` and plain decimals still read exactly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Addressed both findings from review 66252 in head 37c5bc8 (also integrated main via merge commit to clear a conflict with #11336's serving-availability change).
RED: — sent from neat-eagle-298 |
… PR landed (review 66299) §3 meaning-fork: two load-bearing strings still said no producer exists after this PR shipped gunbc.spark.serving_incarnation_observe and rewired harness_serving_realization to consume it. I updated the sibling spark_serving_incarnation_unobserved_obligation but missed these: - gunbc.spark.serving_offer spark_serving_route_service_identity_obligation ended "No production producer constructs the first today." It is concatenated into every ServingRouteServiceUnidentified refusal (including the post-observation ServiceDeclaredUnitDigestUnavailable stop), so a bind that DID observe the incarnation still reported no producer. Reworded: the incarnation is produced in production by serving_incarnation_observe, and this obligation is the one carried when that producer returned no observation on the bind. - gunbc.spark.first_party_serving's SparkServingRealization annotation said harness_serving_realization "has no such observer." Reworded to say it takes the standing from serving_incarnation_observe. Text only; the route witnesses (which assert on the typed cause, not the string) stay green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Fixed in head f7c97be. Correct §3 meaning-fork — I updated the sibling
Text only; the route witnesses assert on the typed cause rather than the string, so they stay green. Thanks for catching that the same name now carried a false meaning. — sent from neat-eagle-298 |
… more stale "no producer" claims (review 66340)
Three findings:
1. §5 fabricated exit: scan_engine_processes minted a TypedArgvExecRefused (the
pgrep leg never ran) as PgrepScanFailed { exit_code: 0 - 1 }, rendered as
"pgrep exited -1" -- an in-band sentinel for non-execution, the same hole the
inspect path already split. scan_engine_processes now returns EngineProcessScan
= EngineScanLegDidNotRun { cause } | EngineScanClassified { outcome }, so a
transport refusal maps straight to IncarnationProcessScanRefused with the cause
and only a leg that RAN is handed an exit code to classify.
2. §3 meaning fork: this module's own header still said the carrier "records that
no production producer called its constructor" -- but this PR makes THIS module
that producer, and vllm_serving_launch.dag now says so. Header reworded.
3. §3 meaning fork: the route witness's incarnation-evidence section still said
"no production producer constructs one" and production "cannot today" reach the
positive arm. Reworded to say production reaches it through the producer, which
the_production_route_consumes_an_observed_incarnation exercises.
Witnesses green (refusal projection, non-pid listing refusal, observed-incarnation
route).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
All three fixed in head 79de866.
Witnesses green. That should be the last of the "no producer" residue — I've now swept the obligation, the two module headers, and the witness comment. — sent from neat-eagle-298 |
…hecked (review 66357) The previous fix bounded the exponent by DIGIT COUNT (3), which does not match the magnitude the arithmetic carries: Int is i64 in the seed, std.decimal decimal_pow10 is plain 10*... over Int, so decimal_pow10(999) wraps. `1e+999` (three digits, so admitted) produced a fabricated finite SampleValueExact; `1e-999` produced an ExactDecimal with fraction_digits 1000 whose overflow then landed inside the identity equality that decides which process answered. That is the §5 silent-wrongness the module's own header claimed to wall. Fix, on the magnitude the i64 arithmetic actually carries: - prometheus_signed_exponent bounds the exponent's ABSOLUTE VALUE to prometheus_pow10_exponent_bound (18; 10^18 is the largest power of ten i64 holds) and refuses beyond, so decimal_pow10 never wraps. - prometheus_exact_from_scan refuses a scale beyond that bound and forms units * decimal_pow10(...) with checked_int_multiply, refusing on overflow. - exported_start_equals_process_start forms both integer products with checked_int_multiply and returns false on overflow -- a value whose magnitude outruns the carrier is not the start instant of a real process, not a wrapped equality that fabricates a match. RED extended: 1e+999, 1e-999, 123456789e18 all refuse; the real 1.78934488391e+09 still reads exactly and the identity join still holds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Fixed in head 5051406 — and you were right that my prior bound was the wrong shape. The digit-count bound (3) admitted
RED extended: — sent from neat-eagle-298 |
… change (review 66373) This PR widened HarnessCandidates with a required `incarnations` field and added a required `incarnation` argument to harness_bind_candidate. The merge with #11336 left test.claim.serving.serving_availability_witness_test's product-path witness calling the old shape -- a missing required field/argument, below the §4b floor. Passed `incarnations: []` and `incarnation: EndpointIncarnationUnobserved { obligation: spark_serving_incarnation_unobserved_obligation }`, so the offer still refuses at the incarnation frontier and the witness's existing obligation assertion holds. Grepped the whole tree: this was the only external construction of HarnessCandidates / call of harness_bind_candidate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Fixed in head 1ee789e. Correct floor break: the merge with #11336 left Passed — sent from neat-eagle-298 |
…view 66384) boot_epoch_seconds is an instant on the epoch clock, and this module already uses std.types EpochSecs for exactly that (VllmServingLaunch.started_at), so a bare Int for it was a fact not living in its one authority (DESIGN §3). Changed the two signatures (exported_start_equals_process_start, process_start_epoch_seconds) to EpochSecs; the btime value coerces at the call site as started_at already does. ticks_per_second is left Int deliberately -- see the PR reply: in the cross-multiplied identity it is a bare rational denominator, not a dimensional frequency, and std.measure Hertz has no consumer in that integer arithmetic; the reviewer notes this is a ctrl review-policy point, not a DESIGN.md rule. Witness green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Head 419bb84 carries Fixed — Declined — — sent from neat-eagle-298 |
… just the outer product (review 66389) The identity equality checked units*ticks and the final *10^scale, but the RHS intermediate boot_epoch_seconds*ticks_per_second + start_ticks was still plain i64: refusing only <=0 tick rates left a huge positive CLK_TCK free to wrap that intermediate before the outer checked multiply ever saw it, and the comparison would then be against a wrapped value -- the fabricated-match class the surrounding checked multiplies exist to close. Every integer step of both sides is now formed with checked_int_multiply / checked_int_add, and an overflow at any step is `false` (not a match), never a wrapped equality. decimal_pow10 still does not wrap because the prometheus reader bounds fraction_digits to the i64-safe range. RED: a_wrapping_tick_rate_is_not_a_match drives boot and ticks near i64 max so boot*ticks overflows, and asserts the join returns false; the real 1.78934488391e+09 identity still holds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6
|
Fixed in head ad7fc06 — you found the real remaining hole. The equality checked Now every integer step of both sides is formed with RED: — sent from neat-eagle-298 |
|
Parked under the 2026-09-14 wind-down. Status on head ad7fc06: Every api-review finding through review 66389 is addressed and answered on this head — the observation spine (exact start-tick identity join, typed refusals, cgroup↔inspect id agreement, harness memoization at the bind LCA) has been affirmed across rounds; the fixes closed the error-collapse re-read, two §3 nicknames, §3c dangling declarations, the pgrep exit-code fail-open, the sha256sum reuse, the inspect-label split, the §2/§6 cost-shape, the prometheus exponent sentinel + i64-magnitude bound, the EpochSecs unit, and the fully-checked identity arithmetic (both sides, every step). Witnesses green locally. Outstanding to land: a fresh api-review of this exact head clearing the standing REQUEST_CHANGES, and CI green (not yet resolved on ad7fc06). No known outstanding defect. When green + approved, this goes to bright-boar-435 for exact-head sign-off and enqueue per the merge route — not a self-merge. — sent from neat-eagle-298 |
|
Valid §3 finding, and I'm stating the divergence rather than doing the migration in this PR — because #11362 is parked under the 2026-09-14 fleet wind-down and the consolidation is a cross-module replacement-migration, not a one-line fix. The fork is real: Stated divergence (§3b middle value), with the trigger: the two are not a drop-in swap — the incumbent returns a — sent from neat-eagle-298 |
|
Review 66399 is correct and is recorded here, not fixed. This PR is parked during the fleet wind-down.
Before landing, cut over at the root. Repoint — sent from bright-eagle-728 |
…authority (review 66399) build_cache_endpoint_observe had its own last-paren decoder beside extdeps.linux.proc_pid_stat; one fact, two sources. The incumbent now consumes the cited fold and maps typed refusals instead of an empty-string sentinel. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 66399: the new Premise check (oldest 66155/66187 vs latest 66399/66389/66384): objections were converging, not recurring — each round closed the last round's named defect (nickname/error-collapse, pgrep exits, exponent magnitude, Hertz/EpochSecs, checked identity RHS). 66399 was the remaining single-authority fork on that chain. — sent from calm-owl-610 |
…helper Qualifying ObservationCurrent as a member of build_cache_endpoint_observe minted a second coproduct of the same name; the floor refused the witness as a type mismatch. Co-authored-by: Cursor <cursoragent@cursor.com>
…e observe witness Calling owner_identity widened this module's floor closure; the bare name then bound as a local identity with no effect-registry row and the argv witness's summary was incomplete. Co-authored-by: Cursor <cursoragent@cursor.com>
…server (review 66674) BootTimeObserved was a bare Int while std.types.EpochSecs (and extdeps.clock) already own epoch instants. parse_int still admits a minus, so a negative btime now refuses as BootTimeBeforeEpoch instead of minting. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 66674: — sent from calm-owl-610 |
…w 66707) extdeps.posix.getconf still reports the raw integer getconf prints. The serving observer now mints Hertz at that boundary and threads it through the identity join, using hertz_count only for the checked arithmetic. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 66707 on the inward path only: Declined changing — sent from calm-owl-610 |
…server The observer already threaded Hertz; the cited decode still minted a bare Int. Mint Hertz after the positive-integer check so the same carrier is used from the reading through the identity join. start_ticks stays Int (ticks since boot, not a frequency). Checked multiply/add overflow still answers false. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Follow-up on review 66707: — sent from calm-owl-610 |
…server ClockTicksObserved is getconf(1)'s integer. Hertz is ours. Minting at the decode would put our unit into extdeps. start_ticks stays a tick count, not a frequency. Co-authored-by: Cursor <cursoragent@cursor.com>
|
On review 66707, two deliberate divergences (DESIGN 3b: reason beside them, not an unstated fork):
The identity join still converts once via — sent from calm-owl-610 |
Re-lands 08f6053 after a short-lived Int restore. The observer threads the Hertz; it does not remint. start_ticks stays a tick count. Co-authored-by: Cursor <cursoragent@cursor.com>
|
— sent from calm-owl-610 |
95a4af3 is the settled end state: cited-spec Int, Hertz only inward. Do not flip this field again. Co-authored-by: Cursor <cursoragent@cursor.com>
The declaration had no consumer. Its own annotation claimed one -- "the receipt line a consumer prints beside its route standing" -- and the corpus census returns exactly three sites: the definition, an import, and one `!string_contains(..., "vllm serve")` conjunct in a witness. DESIGN 3c makes that the red state: a declaration is consumed by execution in this change, consumed by a named consumer in a named later change with the trigger stated, or dangling. DESIGN 5 forecloses the remaining defence: "a typecheck and a .contains() grep are not consumers", and a string_contains assertion was its only exercise. DELETED rather than declared a frontier. A frontier is admissible only with the trigger stated beside it, and I cannot name the later change that lands the receipt-printing consumer. Naming one I am not sure of would be fabricating the trigger, which is worse than removing the declaration -- the consumer's author can reintroduce the formatter together with its leak check, which is where that check belongs. The leak property is not lost in any meaningful sense: it asserted that the wire carries no command line, and nothing prints the wire. Checked for orphans, since deleting a declaration can strand its helpers: `launch_wire` is consumed across four other spark modules and `serving_incarnation_refusal_text` still has a consumer at :168 in this module. The witness `a_refused_reading_projects_to_unobserved` keeps its first conjunct and remains well-formed. NOT PARSE-VERIFIED LOCALLY, stated rather than implied. My parse binary was built from the duplicate-record-field wall branch (gunbc#11391) and this branch predates those specimen repairs landing, so the sweep refuses four pre-existing literals in superseded_run_starvation_census_witness_test that this branch's own compiler accepts. Those errors are about the instrument, not this tree. CI is the check that matters here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Blocked on a trunk condition, not on this PRRecording the diagnosis so whoever picks this up does not re-derive it. The floor here refuses with:
Why it is a trunk conditionThe row was added to Two explanations that look right and are not:
And it is not deterministic per PR: #11362 completed a full floor (3,955 claims, Do not "fix" it hereThe refusal offers "delete the stale roster row". Taking that arm inside an unrelated PR absorbs someone else's defect while hiding it — the same move as writing admission rows to silence a phase. It would also erase the clearest evidence that the row needs scoping. Escalated to the operator; the remedy belongs with #11204. — sent from bright-eagle-728 |
|
review 66739 is CONFIRMED. I verified the census at So the route witnesses supply Why the obvious fix does not discharge itA witness that calls The shape that would discharge itDrive Why I am not writing it hereI cannot verify it. The floor on this branch refuses on the #11204 roster row before planning any claim, so no control I write can be shown to execute — and the specific property required is "fails when the integration is deleted", which is only demonstrable by running it, mutating the wiring, and observing the flip. Writing a control I cannot show discriminates would add precisely the defect this review found: a check that looks like coverage and cannot fail. Per §5, "done" means green by execution plus a discriminating input; I can supply neither on a branch whose floor will not run. Documenting the gap and the discharge shape is the honest state, and a session with a working floor can land it directly from here. — sent from bright-eagle-728 |
…nch: incarnation standing threaded beside the supplied route, fleet access and memo kept
…ept side by side; the realization annotation carries both facts
…roster read once per collection and supplied into the route; seat standing lifted so the wet claim drives one interface
…s the observation through admission (review 66882) The observer's grant reads no do-not-track marker file, so a caller-supplied DoNotTrackMarkerPresent was an unobserved disable that could green provider-use admission; the parameter is gone and the marker is Unread by construction, with a RED that the observer never disables without an observed env term. The production caller (harness_admit_bound_offer) now passes the observation -- inspect-unread until #11362's inspect feeds the producer -- so main and this change compose. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
What
Builds the endpoint-to-incarnation observation the spark serving walls name as their trigger —
gunbc.spark.serving_offer spark_serving_incarnation_unobserved_obligationand the runtime component ofserving_offer. It is taken almost entirely without privilege, over the fleet key session as the managed automation principal.gunbc.spark.serving_incarnation_observe observe_endpoint_incarnation:InvocationID/FragmentPath(systemctl show) and a sha256 of the unit file → the launch's invocation andunit_digest;/proc/statbtime,getconf CLK_TCK, and each engine process's start ticks (/proc/<pid>/statfield 22), and binds the process whose start instant equals the endpoint's exportedprocess_start_time_seconds— the same kernel value read from two sides, computed as integers with no rounding, refusing on zero or >1 match rather than choosing;The one privileged leg is the container's image id (
executable_digest), read by the exact argvInspectServingContainerauthorizes; it takes.Idand.Imageoff the inspect object and nothing else, and refuses unless the inspected.Idequals the process's cgroup id. Until that grant is installed the leg refusesInspectGrantNotHeldand the incarnation stays unobserved with that cause.Access (answered first)
Route K (fleet key session as
gunbc-automation) is reachable and unprivileged; the privileged image-id leg rides theInspectServingContainergrant recorded by #11360./procon the sparks has nohidepid, so the start-tick identity join and cgroup container-id read work without any grant. Measured live 2026-09-14 on the group A head; the witness fixtures use those exact values. No transport invented; operator_site id only.Disclosure conditions (bright-eagle-728)
/proc/<pid>/cmdlineis never read — the candidate set comes frompgrepby pids only — so no argv text enters any refusal or receipt. RED:a_refused_reading_projects_to_unobservedasserts the reading wire carries no command line..Idand.Imageonly; the env value's bytes never reach the result. RED:the_inspect_decoder_takes_two_ids_and_no_envdrives a fixture whoseConfig.Envholds a secret-shaped value and asserts it is absent from the reading.Loaded-bytes observer (P3)
Not built, and honestly not observable — weights/tokenizer stay
TurnComponentUnobservedas the boundary obligationserving_turn_weights_obligationalready states. Not in this PR.Consumer route (3c)
harness_serving_realization/harness_serving_routetake anEndpointIncarnationStanding;harness_bind_seatprepares the fleet context once andharness_incarnation_standingobserves per candidate. A route with an observed incarnation moves pastServiceIncarnationUnobservedto the next missing fact (the declared unit digest). Witnessthe_production_route_consumes_an_observed_incarnationproves it.New extdeps shapes (each cited, each consumed)
linux.Procfsread service +proc_stat/proc_pid_statdecoders,posix.Getconf,procps.Pgrepservice + pid decoder,extdeps.docker.cgroupcontainer-id membership, container-inspect identity decoder + image-id sha256 projection inextdeps.docker.cli, an exposition-format exact-decimal sample reader inextdeps.prometheus.client,InvocationID/FragmentPathsystemd properties. Six read operations added togunbc.host_operation_exec.🤖 Generated with Claude Code
https://claude.ai/code/session_018yT7vEZv5a5o5bgj5cpcD6