docs(specs): align the S32 virtual metrics with the code
What
The S32 ### Metrics table now names the labels that the Step 17 code emits:
- All six
oci_virtual_*rows label byoci_virtual_operation, notoperation. resolutions_totallabels byresolution_outcome, notoutcome.- A new paragraph names the two label-free S16 token-cache families:
gitlab_artifact_registry_oci_remote_token_cache_entries(Gauge) andgitlab_artifact_registry_oci_remote_token_cache_store_refusals_total(Counter). - A new
## Resolutionsbullet records why the labels have scoped names. - Two
### Wide eventssentences name thepositionsfields an entry omits:outcomewhen the position reached no verdict, andkindon askipped_soft_deletedentry or on a position whose observed kind is neitherhostednorremote. - The
positions_consultedrow says the metric counts list width: every live position the resolution walked, the excluded and health-gated ones included. The winner's depth iswinner_positionon the wide event. - The fourth seam change's
## Dependenciesclause and the### Wide eventswinner-path paragraph say the slice builds the winner-pathpositionsrecords. It uses seam wrappers, a secondvirtual.EligibleUpstreamspass, and the per-resolution health memo. TheCollecthalf stays a foundation change.
The wide event's operation field does not change. It is an event field, not a metric label.
Why
The metrics cardinality audit pins each label's value set by name across the whole service. The bare operation and outcome labels already pin other vocabularies. The Step 17 code therefore emits oci_virtual_operation and resolution_outcome, and a /validate-step run flagged the spec-vs-code mismatch as a blocker. The plan books this amendment in ## Dependencies.
The positions_consulted row used to say the metric shows a winner that sits deep in the list. The histogram has no repository label, so it cannot show that. The Step 17 code counts list width, as the Maven family on !3014 (merged) does.
Merge order
Merge this MR before the S32 Step 17 MR, or together with it. A scraped label cannot change after it ships, so Step 17 must not ship labels that the spec contradicts.
Notes
- The plan scopes the rename to "all three families", but the spec table has six rows. This MR renames all six, so every row names one label. The plan correction goes to the S32 batch
docs(plans)MR, !2941 (merged). - The S30 and S31 rows for the same family keep the old rationale. Their spec authors own the change.
- Open item:
collection_requests_totalkeeps the bareoutcomelabel. Its values (success,absent,unsupported,failed,malformed) cannot join the pinnedoutcomeset. No code emits the collection families yet. The spec author picks a scoped name before a collection route lands. - No
docs/user/or e2e scenario impact: the change covers operator metrics in a spec.
Related to #291 (closed)