Doctoral Research · Space Robotics Inspection with a Free-Flying Space Manipulator
A Doctoral Research Journal Aerospace Engineering

CHAIN_10 verdict — why is singularity so schedule-sensitive?

Date: Jun 12, 2026. Criteria: tasks/chain10_criteria.md (pre-registered before any extraction). Evidence: generated_reports/GNC/chain10_offline_tables.md (8 runs, top-10 κ peaks each, peak-vs-control effect sizes) + generated_reports/GNC/chain10_codepath_audit.md. Chain: tasks/daily_log/Jun12_26/CHAIN_10.md. Every replay self-check measured exactly 0.0 relative difference (the offline κ replay is bitwise-faithful to the controller’s).

Legend

Runs and metrics as in generated_reports/GNC/phase00_round1_verdict.md (Legend there). Speed triples are written nominal / −2% / +2%. New shorthand: phase = fraction of the inspection path completed (0 = start, 1 = done); hot band = a narrow phase interval where a run’s κ peaks cluster; Cliff’s δ = rank-based effect size, peaks vs matched calm windows (pre-registered “large” bar: |δ| ≥ 0.5); entries = how many times a run crossed into the near-singular regime (σ₆ < 0.025).

Verdicts, one per pre-registered hypothesis

H1 (FD-tangent numerics) — KILLED, by code audit, before any statistics

Criteria text: “H1 killed if the code audit shows dx inert in the adopted config…” The finite-differenced tangent is discarded at its only call site (ee_guidance.py:620, bound to _), and the ff_route knob that promised consumers is a dead config key (zero matches in GNC). Inert in all configs. No tangent noise can reach any command. (Housekeeping alert raised on the dead key.)

H2 (target curvature, offline component) — KILLED

Criteria text: “Killed offline if peak-located curvature is indistinguishable from control.” Measured: path_curv Cliff’s δ at peaks is between −0.90 and +0.10 on every run — never near the +0.5 confirm bar, mostly indistinguishable or lower than calm windows. Aiming at curvy geometry is not what makes κ spike. (Technical note: discretely, the FD-tangent ripple and the path curvature are the same quantity — the tables’ fd_ripple and path_curv columns are duplicates by construction; both were documentation-only after H1’s kill.) The T6 geometry falsifier (RCM/AcrimSat) is no longer needed for H2 as registered; it remains available as a broader schedule-sensitivity-vs-target-shape probe if the user wants it.

H3 (reach-phase alignment) — UNRESOLVED as registered; strong qualitative support

Criteria text: “H3 confirmed if reach-margin minima co-locate with the top-10 κ peaks (overlap beyond chance) AND the ±2% arms shift the co-location phase in the predicted direction.”

Disposition: H3 graduates to the leading hypothesis with a named follow-up: replace the crude reach_b proxy with the true arm-extension margin (shoulder-frame reach or a strided s_min_G replay — the factor with the historical +1.0 correlation) and re-run the correlator. That is a one-driver re-run of the committed harness, not a new chain.

H4 (dwell amplifier) — SEED verdict (the pre-registered alternative)

Criteria text: “H4 amplifier verdict if entries within ±20% across arms while duration grows >3×. Seed verdict if entry count itself moves >2×.”

Measured on the r1 trio (nominal/−2%/+2%): entries 23 / 14 / 2 — the entry count moves >10×, far beyond the 2× seed threshold. Mean episode length also collapses (≈19 s / 16 s / 1.6 s). At this operating point the schedule changes how often the system falls into potholes (and how fast it escapes), not merely how long an unchanged set of falls lasts. The CHAIN_6 dwell fixed point remains real as a mechanism (it explains long episodes when they happen, e.g. r0’s 6–8 entries totalling ~630 s ≈ 100 s/episode), but the ±2% sensitivity is seed-dominated. Bonus structure: r3 (anchor hybrid) has the MOST entries (33) and nearly the least dwell (185 s) — it falls in often but escapes immediately; entry count and total dwell are not interchangeable summaries.

Pointing-error split (the Jun-12 driver, user’s derivation-review question) — EVENT-dominant on the 7-DOF

Criteria text: “EVENT verdict if the ze-error mass inside peak windows exceeds control windows with Cliff’s δ ≥ 0.5; BROADBAND verdict if the dwell-free run shows ze p99 > 3× the 6-DOF level with δ < 0.2.”

Measured ze_err δ on r1: +0.48 / +0.58 / +0.94 (nominal / −2% / +2%) and +0.64 on r3. Two of three r1 arms clear the 0.5 bar; nominal misses it by 0.02 (reported, not rounded away). The “dwell-free” +2% run is the most event-concentrated of all (δ = 0.94): its residual pointing error lives almost entirely inside its startup-band κ peaks — NOT broadband. Implication for derivation_7dof.md: scrutinize the near-singular handling (kernel freeze / derate interplay) before the reconstruction math — the broadband- formulation-bias hypothesis is disfavored. The 6-DOF anti-correlation (δ = −0.54/−0.86/−0.18: its pointing is better at its κ peaks, which occur while crawling) is consistent with pointing error being a dynamic event phenomenon, not a conditioning-state phenomenon.

The night’s one-sentence mechanism story

A ±2% timetable change moves which orbit-phase band the arm traverses near its extension limit; the 7-DOF, living marginally close to that manifold, sees its pothole entry rate (and with it dwell, throttling, and pointing transients) swing by orders of magnitude, while the saturated 6-DOF barely notices — numerics (H1) and surface curvature (H2) are exonerated, and the dwell loop is the episode-lengthener, not the sensitivity’s source.

Follow-ups (named, not started)

  1. H3 closure: swap reach_b → true extension margin (s_min_G strided replay) in validation/kappa_peak_forensics.py; re-run (minutes, offline).
  2. CHAIN_6 κ p50 re-derivation (the +42%/+49% bookkeeping flag): the committed harness replays κ bitwise; running it over m7_on_s45_freeze.npz + the s441 arm closes the discrepancy — blocked only on those logs’ key layout (they predate the Phase 00 saver).
  3. Geometry falsifier (T6, USER-GATED): optional after H2’s offline kill; reframed as a generalization test (does the hot-band structure depend on the target?).
  4. Round-2 velocity-lag-feedforward design input (lever “L1” in tasks/phase00_protocol.md — the desired-twist feedforward meant to remove the speed-proportional tracking lag, applied to both configs per protocol amendment 1): the pe non-monotonicity and the event-driven pointing both point at transient events, not steady lag — the feedforward should be designed (or at least evaluated) against the startup/hot-band events, not only the cruise regime.

Regen commands

/Users/antoniahoffman/miniforge3/envs/new-pin-env/bin/python /Users/antoniahoffman/Code/Inspection_Simple_2/validation/chain10_probe.py
/Users/antoniahoffman/miniforge3/envs/new-pin-env/bin/python /Users/antoniahoffman/Code/Inspection_Simple_2/validation/test_chain10_peaks.py
/Users/antoniahoffman/miniforge3/envs/new-pin-env/bin/python /Users/antoniahoffman/Code/Inspection_Simple_2/validation/kappa_peak_forensics.py