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

Pick Up the Pieces — catching up on June 12, 2026

Status report written June 13. Source documents are linked inline. Every metric is decoded in the Legend; every verdict cites the file it came from.


TL;DR (read this first)

Yesterday was four chains plus the round-1 shootout closeout. In one breath:

The one decision on the critical path: do you adopt the reach corridor rs 0.40 (which triggers a re-pin of all five baselines), keep the incumbent, or go straight to the phase-varying “R-v2” idea? Everything downstream — including the 46-run fragility campaign baseline — waits on that. Details in § What needs your input.


Legend — runs, metrics, shorthand

The four shootout configs (architecture under test, not tuning):

Run What it is
r0_6dof_path 6-DOF arm, orbit-path guidance. The adopted Mission-1 architecture / incumbent.
r1_7dof_path 7-DOF (redundant) arm, orbit-path guidance + null-space suppression + kernel freeze.
r2_7dof_reactive 7-DOF, the reactive scorer-driven guidance machine (now retired).
r3_7dof_anchor 7-DOF, anchor-mode guidance (scorer judges, path schedules).

Metrics (all reported at the 99th percentile unless noted; p99 = “worst 1% of steps,” the committee-relevant tail):

Metric Meaning Direction Gate
pe_p99 EE (camera) position error lower better < 0.20 m (stretch < 0.15, round-2 bar < 0.1651)
ze_p99 EE pointing-axis error (chord ≈ rad) lower better stretch < 0.001
coverage fraction of target surface inspected higher better ≥ 0.99 (stretch 1.0)
completion time to finish the full helix lower better must complete
derate fraction share of steps with arm gain throttled for poor conditioning lower better round-2: must improve on 0.64–0.80 band
dwell time stuck in near-singular “potholes” lower better
κ (kappa) arm Jacobian condition number σ_max/σ_min lower better
s_min_G / σ₆ smallest singular value of the reduced→full map (the live near-singular driver) higher better

Shorthand: Cliff’s δ = a non-parametric effect size (|δ| ≥ 0.5 = “large,” the pre-registered bar). Levers L1–L4, S, R = candidate round-2 interventions. EVENT vs BROADBAND = whether error concentrates at conditioning spikes or is spread out. Re-pin = the deliberate, recorded act of replacing the frozen baseline logs after an adopted behavior change.


The arc of the day

The work followed a deliberate order — measure → explain → clean → intervene:

  1. Phase 00 (overnight → afternoon): a pre-registered shootout of the four architectures over the full 30-rev pole-to-pole helix, then a ±2% speed sensitivity probe on the top two. Outcome: r0 wins robustly; r1 loses on position error but wins everything else.
  2. CHAIN_10 (early AM): offline forensics — why does ±2% speed swing singularities so violently? — using only the eight logged runs, no new simulation.
  3. CHAIN_11 (Chain A of the deep clean): clean the center-of-mass side, adopt the documented mesh layer, prove it generalizes to two new target satellites.
  4. CHAIN_12 (Chain B of the deep clean): retire the reactive guidance machine entirely.
  5. CHAIN_13 (Phase 00 round 2): “audit-before-adding” — five offline diagnostics, a checkpoint, then lever runs.

Step by step

1. Phase 00 — the configuration shootout

Goal: with no per-config tuning, which of the four architectures wins over the full mission, and is the winner robust to a small schedule perturbation? The rules — ranking order, fragility definition, stretch targets — were pre-registered in phase00_protocol.md before any run.

What happened:

Mechanism story: r0’s conditioning is structurally saturated (throttled ~64%, dwell ~630 s at every speed) — that saturation is why ±2% can’t worsen it, at the cost of slow completion (~1071 s). r1 is marginal and event-driven, hence the cliff. The dwell cliff and non-monotonicity were handed to CHAIN_10.

Two amendments you signed off (recorded in phase00_protocol.md): - Amendment 1: lever L1 (velocity-lag feedforward) applies to both r0 and r1, with a pre-committed bar — an L1-hardened r1 only outranks r0 if its pe_p99 drops below 0.1651 (not merely below the 0.20 gate). - Amendment 2: two new levers join — S (schedule re-timing, 7-DOF) and R (reach corridor, 6-DOF) — and scoring splits per arm. Round 2 executes as CHAIN_13: diagnostics first, lever runs gated on criteria and your explicit release.

The remaining open items were collected for you in round_2_questions.md.


2. CHAIN_10 — why ±2% speed swings singularities (κ forensics)

Goal: explain the dwell cliff using only the eight existing logs — zero new simulation. Four hypotheses (H1 finite-difference numerics, H2 target curvature, H3 reach-phase alignment, H4 dwell amplifier) and their kill/confirm thresholds were pre-registered in chain10_criteria.md before any peak was extracted. The design and plan are in chain10_kappa_forensics_design.md and chain10_kappa_forensics_plan.md; the chain log is CHAIN_10.md.

What happened (verdicts in chain10_kappa_forensics_verdict.md, raw tables in chain10_offline_tables.md):

One-sentence mechanism: a ±2% timetable change moves which orbit-phase band the arm traverses near its extension limit; the marginal 7-DOF’s pothole entry rate swings by orders of magnitude while the saturated 6-DOF barely notices.


3. CHAIN_11 — deep clean, Chain A (COM core + mesh)

Goal: clean the center-of-mass side of the stack so dead signals can’t burn investigation time again, adopt the documented utils/mesh.py geometry layer, and prove the cleaned stack works on satellite meshes it has never flown — without touching EE planning. Criteria pre-registered in chain11_criteria.md; chain log CHAIN_11.md.

What happened:

Still open inside CHAIN_11: task A5 (a --target {GRO,RCM,acrim} knob on run_mission.py) is unchecked.


4. CHAIN_12 — deep clean, Chain B (retire the reactive machine)

Goal: remove the losing reactive guidance architecture so the system tells one targeting story. You signed off the casualty list (“Commence the housecleaning!”). Criteria pre-registered in chain12_criteria.md; chain log CHAIN_12.md.

What happened:


5. CHAIN_13 — Phase 00 round 2: diagnose, then pull levers

This was the evening’s big effort, and the one your memory checkpoint pointed at. Its philosophy: audit before adding. Criteria pre-registered in chain13_criteria.md; chain log CHAIN_13.md.

Block 1 — five offline diagnostics (D1–D5)

First, a harness verification (harness.md) confirmed what the logs do and don’t contain — notably that freeze and hold-last steps are not offline-reconstructible (they depend on stateful caches), while speed and radius_scale are plain sweepable overrides. It also flagged a missing tool: there’s no IK-only joint-path generator producing an offline q_des(s) independent of dynamics.

The diagnostics, scored against bars written before any data, and summarized in the checkpoint chain13_diagnostics_verdict.md:

The checkpoint was adversarially audited by 6 verifier agents (one per section): 0 numerical errors, 1 overreach (an existence proof had been hardened into a universal claim) + 4 precision fixes, all incorporated. It adjudicated Block 2 as r0 → R + L1 + L3 and r1 → L1 only, then stopped: AWAITING USER RELEASE.

A companion math deliverable, posture_proof.md, lays out three pre-registrable, offline-computable bounds (U1 admissibility, U2 Weyl margin consumption, U3 fiber-coordinate reachability) for the oracle-gap question — delivered but not yet computed/adjudicated.

Block 2 — the lever runs (after release)

A PEBKAC note from the day: run_mission was dying at the npz save line on a missing parent directory — two 27-minute sims lost before it was fixed (it now creates the directory).


What worked

What didn’t work


What needs your input (decisions + alternatives)

Ordered by how much they gate other work. The first is on the critical path.

Decision 1 — Adopt the reach corridor rs 0.40? (critical path)

rs 0.40 dominates the incumbent and is robust under ±2%. Adoption triggers the §3b re-pin ceremony (one deliberate re-pin of all five baselines, recorded decision, double reproduction, ground-rule update). This also sets the baseline the fragility campaign will measure. Source: chain13_r_verdict.md. - (a) Adopt rs 0.40 → run the §3b re-pin; rs 0.40 becomes the frozen-baseline candidate. - (b) Keep the incumbent rs 0.55; the verdict stays on record. - (c) Skip the static corridor and go to R-v2 (a phase-varying corridor, designed offline by the parked 6-DOF oracle) — the motivated successor, since reach demand varies pole-to-pole.

Decision 2 — What’s next on the levers (the rest of Block 2)?

Block 2 was adjudicated r0 → R+L1+L3 and r1 → L1 only. R is done (Decision 1). L1-v1 is falsified → needs an L1-v2 redesign targeting the acceleration feedforward. L3 (pointing retune, GO) hasn’t run yet. Sources: chain13_diagnostics_verdict.md, chain13_l1_design_probes.md. - (a) Queue L1-v2 + L3 next (note: L1-v2 likely waits behind the rs 0.40 adoption, since v1 showed inversion/FF tweaks don’t act cleanly while the arm rides the reach floor). - (b) Run L3 alone now; defer L1-v2. - (c) Hold all levers until Decision 1 settles.

Decision 3 — Authorize a new posture-route lever for the 7-DOF?

D3 proved a wall-clear 7-DOF route exists. A lever steering the spare DOF along an oracle-supplied reference posture would attack the actual mechanism — but it is not L2 as registered (route-tracking, not σ-gradient climbing), so it needs a new amendment + criteria first, and the criteria must bound the gap between the oracle’s clean kinematic route and the live system (which carries momentum dynamics). Source: chain13_diagnostics_verdict.md. - (a) Authorize the amendment + criteria, then build it. - (b) Decline — leave the 7-DOF route mechanism unaddressed this chain.

Decision 4 — Re-register the 6-DOF oracle (unlocks R-v2)?

The oracle nailed all 6-DOF runs (15/15) and failed all 7-DOF. Citing its stage-(b) grid now would be a post-hoc subgroup carve-out. A clean 6-DOF-only gate (~30 min offline) would legitimize it as R’s design instrument — but two latent stage-(b) code bugs must be fixed first. Source: chain13_diagnostics_verdict.md. - (a) Register the 6-DOF-only gate (fix the two bugs, re-run the grid). - (b) Leave the oracle parked as the R-v2 idea only.

Decision 5 — Accept L4 NO-GO, or push a further v2?

L4-v2 came back NO-GO (2/5). The 83° thaw jump is still a standing smoothness failure. Any further look needs windows extended past thaw re-entry, registered first. Source: chain13_l4v2.md. - (a) Accept NO-GO; leave L4 out. - (b) Register a further v2 (extended windows) and re-adjudicate.

Decision 6 — Envelope provenance (committee-facing soft spot)

Decide and document what the engineered joint envelope is. The original XML box_limited ranges are task artifacts, not UR3 spec; the engineered envelope is data-derived (healthy-regime support + sin(θ₃) fences). Source: open_questions.md §B. - (a) Mission spec · (b) Datasheet-derived · (c) Engineered (data-derived).

Decision 7 — Fragility campaign baseline + release

Before the 46-run Phase 0 fragility campaign (1 nominal + 3 sources × 3 magnitudes × 5 seeds), the frozen baseline must be re-pinned to the Phase 00 winner and E2’s nominal numbers updated. Suggested release order: nominal cell first (wall-time check), then per-source. Sources: fragility_criteria.md, round_2_questions.md §3. - (a) Re-pin to the Decision-1 winner, then release nominal → per-source. - (b) Hold the campaign until the lever picture (Decisions 1–2) fully settles.

Quick ones (minutes each)


What needs more study (no decision required yet)


Appendix — where everything lives

Chain narratives (tasks/daily_log/Jun12_26/): CHAIN_10.md · CHAIN_11.md · CHAIN_12.md · CHAIN_13.md

Pre-registered criteria (tasks/): chain10_criteria.md · chain11_criteria.md · chain12_criteria.md · chain13_criteria.md · fragility_criteria.md · phase00_protocol.md

Evidence reports (generated_reports/GNC/Jun12_26/): phase00_round1_verdict.md · chain10_codepath_audit.md · chain10_kappa_forensics_verdict.md · config_flag_audit.md · sming_vs_sminj_study.md · surface_path_continuity.md · harness.md · chain13_diagnostics_verdict.md · chain13_attribution.md · chain13_schedule_oracle.md · chain13_h3_closure.md · chain13_r_verdict.md · chain13_l1_design_probes.md · chain13_l4v2.md · hnorm_pilot.md

Math deliverables (generated_reports/math/): threshold_derivation.md · posture_proof.md

Living state: pre_risk.md (consolidated pre-risk source of truth) · open_questions.md (pre-risk ledger) · ONGOING.md · PIN_IT_FOR_LATER.md · ideas.md