docs(plans): record step 4's MR and reconcile its entry
What
Records step 4 of the npm remote observability plan as !2204 (merged) in the plan's Status table, and reconciles step 4's own entry with the MR that row now names.
Filled from a dedicated branch rather than from the step MR itself, because the table takes a single writer while a workstream has steps in flight. With this row the table is complete: 1a as !2075 (merged), 1b as !2076 (merged), 2 as !2187 (merged), 3 as !2071 (merged), 4 as !2204 (merged).
The step's entry described an approach !2204 (merged) rejected
Four passages derived a probe's record outcome from its HTTP status.
## Research Findings concluded that remoteProxyEvent.outcome() already reads
a probe correctly, because it books a zero httpStatus as a failure. That holds
for a probe that got no response and fails for one answered 401, 403 or
404, which S13's taxonomy rules reachable
(docs/specs/S15-npm-remote.md, ### Health probe) and which is exactly
what an auth-gated base URL answers a bare HEAD. A status-derived record would
book a failure on every sweep of such a remote while last_health_status read
healthy throughout.
So the counter's outcome comes from the status and the record's from the
monitor's pass verdict. The correction sits in ## Research Findings at the
finding it corrects, rather than replacing that finding silently, and the
Files, Acceptance and Tests entries now say which signal reads which.
It points at the inference that finding left unstated, not at the clause it
follows, whose two halves both hold.
Four files the lists did not name
internal/format/npm/remote_observe.go: the new non-renderedprobePassedfield, theoutcome()branch that consults it, and the doc-comment relocation that leavesmetrics.mdas the contract's only home.internal/format/npm/remote_metrics.go: theobserveRemoteUpstreamResponsedoc, which named its one caller until this step added the second.cmd/artifact-registry/wire_remote_test.go: the test pinning npm's two monitors as the only two of the six carrying an observer.internal/format/npm/remote_observe_test.go: the probe-shaped fixture inTestRemoteProxyEvent_OmitsAFieldNotInScope, which stops being producible onceoutcome()consults the verdict. The list carries a "no edit" entry forremote_metrics_test.go, so silence about a sibling read as the same claim.
Shared seams now names the two production files against the steps that share them, all of which merge before step 4.
The wire_remote.go and docs/dev/observability.md entries also grew a site
each: the observer goes to both npm monitors rather than one, and the catalog
takes three edits rather than two. The catalog's rows are named by their metric
and event names now instead of by line, since every earlier step moves them.
A second S15 ruling rides !2204 (merged)
## Dependencies named one spec amendment as a prerequisite, and it merged as
docs(specs): S15 supplies an npm-scoped probe observer. It rules only that npm
emits. Which signal the record's outcome reports is a further spec change, and
!2204 (merged) carries it inline: a ruling added to ### Health probe, the S13 dependency
row rewritten a second time, and the "Every settled probe is observed" acceptance
criterion rewritten to require the pass verdict.
The section now records that and says the spec-MR guardrail reaches it, so a reviewer who checks the named prerequisite, finds it merged, and reads the step MR as implementing a settled spec is corrected before they approve. Step 4's Depends on line says the prerequisite covers the first ruling only.
This MR merges before !2204 (merged)
!2204 (merged) carried a hunk dropping the #emitter-coverage anchor from this plan's
## Spec Reference. Step MRs do not edit the plan file and this MR is the
file's single writer for step 4, so the hunk moves here.
That also fixes the merge order rather than risking one. A reference removed
ahead of its target cannot dangle; one removed after it leaves main pointing
at a section that is gone for the window between the two merges.
## Dependencies states the order and the reason, and step 4's
Depends on line names it where a reviewer of !2204 (merged) will look.
!2204 (merged) still needs that hunk removed from its own diff, or the two collide once this branch merges.
This follows the precedent one commit older on this file: d3123f342,
"docs(plans): record step 2's MR and widen its Files list".
Row 4's Step cell also picks up the space that aligns it with its siblings.
No behavior change, so no related issue line and no e2e scenario.