Expose bridge fields in higher-layer traces

This commit is contained in:
Jan Petykiewicz 2026-04-18 12:58:48 -07:00
commit 286e4915c6

View file

@ -2953,6 +2953,10 @@ pub struct SmpRegionServiceTraceReport {
#[serde(default)]
pub atlas_candidate_consumers: Vec<String>,
#[serde(default)]
pub known_owner_bridge_fields: Vec<String>,
#[serde(default)]
pub next_owner_questions: Vec<String>,
#[serde(default)]
pub candidate_consumer_hypotheses: Vec<SmpServiceConsumerHypothesis>,
#[serde(default)]
pub entries: Vec<SmpRegionServiceTraceEntry>,
@ -2984,6 +2988,10 @@ pub struct SmpInfrastructureAssetTraceReport {
#[serde(default)]
pub atlas_candidate_consumers: Vec<String>,
#[serde(default)]
pub known_owner_bridge_fields: Vec<String>,
#[serde(default)]
pub next_owner_questions: Vec<String>,
#[serde(default)]
pub candidate_consumer_hypotheses: Vec<SmpServiceConsumerHypothesis>,
#[serde(default)]
pub branches: Vec<SmpServiceTraceBranchStatus>,
@ -3620,6 +3628,19 @@ fn build_region_service_trace_report(
"0x00420030 / 0x00420280 city-connection peer probes".to_string(),
"0x0047efe0 placed-structure linked-company resolver".to_string(),
];
let known_owner_bridge_fields = vec![
"[region+0x25e] pending-bonus severity/source lane".to_string(),
"[region+0x276] pending bonus amount".to_string(),
"[region+0x302] completion latch".to_string(),
"[region+0x316] one-shot fallback notice latch".to_string(),
"[region+0x356] localized region name".to_string(),
"[region+0x23a] world-scalar-backed region lane used in notices".to_string(),
];
let next_owner_questions = vec![
"Which persisted owner seam rebuilds or restores [region+0x25e/+0x276/+0x302/+0x316]?".to_string(),
"Which stable region id or class discriminator survives save/load strongly enough to drive 0x004358d0?".to_string(),
"How far can 0x00420030/0x00420280 plus 0x0047efe0 be reused directly before the transient queued-notice family matters again?".to_string(),
];
let candidate_consumer_hypotheses = vec![
SmpServiceConsumerHypothesis {
label: "pending region bonus service path".to_string(),
@ -3746,6 +3767,8 @@ fn build_region_service_trace_report(
.map(|probe| probe.entries.len())
.unwrap_or_default(),
atlas_candidate_consumers,
known_owner_bridge_fields,
next_owner_questions,
candidate_consumer_hypotheses,
entries,
notes,
@ -3784,6 +3807,17 @@ fn build_infrastructure_asset_trace_report(
"0x00448a70 / 0x00493660 / 0x0048b660 route and world follow-on family".to_string(),
"0x004133b0 placed-structure local-runtime refresh outer owner".to_string(),
];
let known_owner_bridge_fields = vec![
"[this+0x248] cached primary-child slot".to_string(),
"[this+0x206/+0x20a/+0x20e] route-entry resolver fields".to_string(),
"[this+0x1e2/+0x1e6/+0x1ea] published anchor triplet".to_string(),
"child list [this+0x75] under the Infrastructure owner".to_string(),
];
let next_owner_questions = vec![
"Do the 0x38a5 compact-prefix/name-pair groups feed the first-child triplet clone lane, the caller-supplied payload-stem lane, or only later route/local-runtime refresh?".to_string(),
"Is cached primary-child slot [this+0x248] the first owner-visible bridge from the side-buffer seam into route-entry rebuild?".to_string(),
"Which child fields or grouped rows absorb the side-buffer payload before 0x00448a70/0x00493660/0x0048b660 become relevant?".to_string(),
];
let candidate_consumer_hypotheses = vec![
SmpServiceConsumerHypothesis {
label: "infrastructure child attach/rebuild path".to_string(),
@ -3949,6 +3983,8 @@ fn build_infrastructure_asset_trace_report(
.map(|probe| probe.overlapping_name_pair_count)
.unwrap_or_default(),
atlas_candidate_consumers,
known_owner_bridge_fields,
next_owner_questions,
candidate_consumer_hypotheses,
branches,
notes,
@ -21765,6 +21801,8 @@ mod tests {
assert_eq!(trace.region_record_triplet_count, 1);
assert_eq!(trace.queued_notice_record_count, 0);
assert!(!trace.atlas_candidate_consumers.is_empty());
assert_eq!(trace.known_owner_bridge_fields.len(), 6);
assert_eq!(trace.next_owner_questions.len(), 3);
assert_eq!(trace.candidate_consumer_hypotheses.len(), 3);
assert_eq!(
trace.candidate_consumer_hypotheses[0].status,
@ -21859,6 +21897,8 @@ mod tests {
let trace = build_infrastructure_asset_trace_report(&analysis);
assert!(trace.side_buffer_present);
assert_eq!(trace.triplet_alignment_overlap_count, 0);
assert_eq!(trace.known_owner_bridge_fields.len(), 4);
assert_eq!(trace.next_owner_questions.len(), 3);
assert_eq!(trace.candidate_consumer_hypotheses.len(), 3);
assert_eq!(
trace.candidate_consumer_hypotheses[0].status,