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

Config Flag Audit — CHAIN_11 A1 Input

Branch: base-wobble Date: 2026-06-12 Files audited: YAMLs_by_domain/parameters.yaml, YAMLs_by_domain/assets.yaml Method: rg across GNC/, utils/, validation/, analysis/ with leaf-key patterns


1. Summary Counts

Class Count
LIVE 76
VALIDATION-ONLY 4
DORMANT 14
DEAD 18
AMBIGUOUS 0

2. utils/orbit.py Priority Section

Keys consumed by utils/orbit.py (the helix/orbit block):

dotted key consumer (file:line) note
simulation.time.duration utils/orbit.py:17 (via self.time = full_cfg.simulation.time) used in N=int(duration/dt) and helix angle
simulation.time.dt utils/orbit.py:20 self.N = int(duration / dt)
simulation.EPS utils/orbit.py:19 self.EPS = float(full_cfg.simulation.EPS)
guidance.com.orbit.clearance utils/parameter_loader.py:108 orbit.radius = target.radius + clearance (derived before orbit construction)
guidance.com.orbit.path.psi_deg utils/orbit.py:83, 129 helix tilt angle (radians)
guidance.com.orbit.path.n_rev utils/orbit.py:84, 129 total helix revolutions
guidance.com.orbit.path.sample_dt NOT consumed in orbit.py zero consumers found anywhere — DEAD

3. Full Classification Table

simulation.*

dotted key class first consumer (file:line) note
simulation.time.duration LIVE utils/orbit.py:17 via self.time
simulation.time.dt LIVE utils/orbit.py:20 also parameter_loader.py:89
simulation.EPS LIVE utils/orbit.py:19 also target_finder.py:87
simulation.target LIVE utils/parameter_loader.py:82 selects target block from assets
simulation.robot LIVE utils/parameter_loader.py:81 selects robot block from assets
simulation.logging.stride DEAD zero consumers; VISIBILITY_MARK_STRIDE=5 hardcoded in guidance_rollout.py

constraints.*

dotted key class first consumer (file:line) note
constraints.com.v_max LIVE GNC/com_guidance.py:61 velocity saturation
constraints.com.F_max LIVE GNC/com_controller.py:170 force saturation
constraints.base.torque_max LIVE GNC/breve_controller.py:328 tau_b saturation; also parameter_loader.py:132
constraints.base.omega_max DEAD zero consumers in GNC or utils
constraints.arm.v_max DEAD zero consumers in GNC or utils
constraints.arm.a_max LIVE GNC/breve_controller.py:640 arm accel saturation
constraints.arm.joint_limits.enforce LIVE GNC/com_controller.py:46 CHAIN_5 clipping knob

controller.com.*

dotted key class first consumer (file:line) note
controller.com.use_reference DEAD zero consumers
controller.com.gains.K LIVE utils/parameter_loader.py:139 packed into gains.K_c
controller.com.gains.D LIVE utils/parameter_loader.py:139 packed into gains.D_c
controller.com.gains.I LIVE utils/parameter_loader.py:139 packed into gains.I_c
controller.com.velocity_correction_alpha LIVE GNC/com_controller.py:389
controller.com.integral.enable LIVE GNC/com_controller.py:72
controller.com.integral.limit LIVE GNC/com_controller.py:74
controller.com.integral.disable_error LIVE GNC/com_controller.py:331
controller.com.startup.enable LIVE GNC/com_guidance.py:42
controller.com.startup.time_scale LIVE GNC/com_guidance.py:43
controller.com.feedforward.alpha LIVE GNC/com_controller.py:163
controller.com.feedforward.force_max LIVE GNC/com_controller.py:163
controller.com.feedforward.startup.enable LIVE GNC/com_controller.py:153
controller.com.feedforward.startup.time_scale LIVE GNC/com_controller.py:155
controller.com.speed_derating.enable DORMANT GNC/base_guidance.py:121 (comment) explicitly noted “inert config” at line 121; active gate moved to controller.base.conditioning.enable (TASK_2/T4)
controller.com.terminal_settle_time DEAD zero consumers

controller.base.*

dotted key class first consumer (file:line) note
controller.base.enable LIVE utils/parameter_loader.py:140
controller.base.gains.K LIVE utils/parameter_loader.py:142 packed into gains.K_b
controller.base.gains.D LIVE utils/parameter_loader.py:142 packed into gains.D_b
controller.base.posture.enable LIVE GNC/breve_controller.py:416
controller.base.posture.joint6_only LIVE GNC/breve_controller.py:453
controller.base.posture.initial_full_arm LIVE GNC/breve_controller.py:444 CHAIN_5
controller.base.posture.initial_gain_scale LIVE GNC/breve_controller.py:446 CHAIN_5
controller.base.posture.gains.K LIVE GNC/breve_controller.py:440
controller.base.posture.gains.D LIVE GNC/breve_controller.py:441
controller.base.gamma_regularization.enable LIVE GNC/breve_controller.py:505
controller.base.gamma_regularization.clip_velocity LIVE GNC/breve_controller.py:511
controller.base.gamma_regularization.v_max LIVE GNC/breve_controller.py:512
controller.base.gamma_regularization.damping LIVE GNC/breve_controller.py:506
controller.base.gamma_regularization.floor LIVE GNC/breve_controller.py:508
controller.base.conditioning.enable LIVE GNC/breve_controller.py:314
controller.base.conditioning.sigma.low LIVE GNC/breve_controller.py:309 (via sigma opts)
controller.base.conditioning.sigma.high LIVE GNC/breve_controller.py:309
controller.base.conditioning.sigma.floor LIVE GNC/breve_controller.py:309
controller.base.damping LIVE GNC/breve_controller.py (damping mode) string mode for velocity damping
controller.base.accel_feedforward.enable DORMANT placeholder for cancelled CHAIN_2 base accel FF; explicitly “inert” per decisions.md; gate=false, no code path reads it

controller.arm.*

dotted key class first consumer (file:line) note
controller.arm.enable LIVE utils/parameter_loader.py:144
controller.arm.axis_only_attitude LIVE GNC/breve_controller.py:231
controller.arm.roll_damping_scale LIVE GNC/breve_controller.py:290
controller.arm.gains.position.K LIVE utils/parameter_loader.py:148 packed gains.K_ep
controller.arm.gains.position.D LIVE utils/parameter_loader.py:148 packed gains.D_ep
controller.arm.gains.position.I LIVE utils/parameter_loader.py:148 packed gains.I_ep; used in integral branch
controller.arm.gains.orientation.K LIVE utils/parameter_loader.py:150 packed gains.K_eo
controller.arm.gains.orientation.D LIVE utils/parameter_loader.py:150 packed gains.D_eo
controller.arm.gains.orientation.I DORMANT utils/parameter_loader.py:150 (packed) packed but only used when arm.integral.include_attitude=true (currently false)
controller.arm.gains.posture.K DEAD zero consumers; arm posture uses base.posture.gains, not arm.gains.posture
controller.arm.gains.posture.D DEAD same as above
controller.arm.integral.enable LIVE GNC/breve_controller.py:219
controller.arm.integral.include_attitude LIVE GNC/breve_controller.py:227 gate for orientation integral
controller.arm.integral.limit LIVE GNC/breve_controller.py:244
controller.arm.integral.leak LIVE GNC/breve_controller.py:241
controller.arm.integral.scale_gate LIVE GNC/breve_controller.py:235
controller.arm.accel_feedforward.enable LIVE GNC/breve_controller.py:393 arm FF (different from base)
controller.arm.desired_twist.enable LIVE GNC/breve_controller.py:124
controller.arm.desired_twist.v_max LIVE GNC/breve_controller.py:596
controller.arm.null_space.enable LIVE GNC/com_controller.py:49 Stage C 7-DOF
controller.arm.null_space.damping DEAD YAML comment: “not read yet” (reserved for finite-d law P4)
controller.arm.null_space.freeze_floor DEAD zero consumers in GNC or utils

config_sampling.*

dotted key class first consumer (file:line) note
config_sampling.seed LIVE utils/sampling.py:20 RNG seed
config_sampling.default.step_size LIVE utils/sampling.py:41 fallback step size
config_sampling.default.num LIVE utils/sampling.py:43 fallback sample count
config_sampling.j_plus.enable DEAD zero consumers; j_plus block is reached via condit.j_plus by name, enable flag not checked
config_sampling.j_plus.damping LIVE utils/robot.py:208 Tikhonov regularization lambda
config_sampling.j_plus.soft_floor LIVE utils/robot.py:188 J+ conditioning threshold
config_sampling.j_plus.hard_floor LIVE utils/robot.py:185 hard abort threshold
config_sampling.j_plus.inv_norm_max LIVE utils/robot.py:197 norm guard
config_sampling.j_plus.step_size LIVE utils/robot.py:378 (via p.step_size) sampling step
config_sampling.j_plus.num LIVE utils/robot.py:378 (via p.num) sample count
config_sampling.gamma.enable DEAD zero consumers; gamma block reached by name, enable flag not checked
config_sampling.gamma.step_size LIVE utils/robot.py:378
config_sampling.gamma.num LIVE utils/robot.py:378
config_sampling.gamma.floor DEAD zero consumers (only j_plus block has floor logic in robot.py)

guidance.com.*

dotted key class first consumer (file:line) note
guidance.com.orbit.clearance LIVE utils/parameter_loader.py:108 builds orbit.radius
guidance.com.orbit.path.sample_dt DEAD zero consumers anywhere
guidance.com.orbit.path.psi_deg LIVE utils/orbit.py:83 helix tilt
guidance.com.orbit.path.n_rev LIVE utils/orbit.py:84 revolution count
guidance.com.window_size DEAD zero consumers; base_guidance uses guidance.base.window_size
guidance.com.tracking.desired_speed LIVE GNC/guidance/ee_guidance.py:89 also com_guidance.py:123, guidance_rollout.py:123
guidance.com.tracking.lookahead_time LIVE GNC/guidance/ee_guidance.py:356
guidance.com.tracking.search_window LIVE GNC/com_guidance.py:198
guidance.com.tracking.smoothing.enable LIVE utils/parameter_loader.py:126 builds smoothing.alpha
guidance.com.tracking.smoothing.time_scale LIVE utils/parameter_loader.py:125 builds smoothing.alpha
guidance.com.gains.tracking LIVE GNC/com_guidance.py:181
guidance.com.gains.progress LIVE GNC/com_guidance.py:182
guidance.com.gains.feedforward LIVE utils/parameter_loader.py:121 builds a_ff_max

guidance.rollout.*

dotted key class first consumer (file:line) note
guidance.rollout.stride DEAD hardcoded as VISIBILITY_MARK_STRIDE=5 in guidance_rollout.py:17
guidance.rollout.store_frames DEAD zero consumers

guidance.base.*

dotted key class first consumer (file:line) note
guidance.base.window_size LIVE GNC/base_guidance.py:38
guidance.base.axis_threshold DEAD zero consumers

camera_guidance.targeting.*

dotted key class first consumer (file:line) note
camera_guidance.targeting.enable LIVE GNC/guidance/ee_guidance.py:649
camera_guidance.targeting.update_period_steps LIVE GNC/guidance/ee_guidance.py:339
camera_guidance.targeting.lookahead.use_com_time LIVE utils/parameter_loader.py:99 also ee_guidance.py:355
camera_guidance.targeting.lookahead.time LIVE utils/parameter_loader.py:102 also ee_guidance.py:358
camera_guidance.targeting.reach.reachable_arm_radius LIVE utils/parameter_loader.py:173 builds r_reach
camera_guidance.targeting.reach.reach_ratio LIVE utils/parameter_loader.py:174
camera_guidance.targeting.startup.time LIVE utils/parameter_loader.py:93 builds steps_effective
camera_guidance.targeting.startup.steps LIVE utils/parameter_loader.py:94
camera_guidance.targeting.max_step.p DEAD zero consumers; old position step cap, superseded by traj_cfg.goal.step_max
camera_guidance.targeting.max_step.z DEAD zero consumers
camera_guidance.targeting.pointing.reselect_cos DEAD zero consumers
camera_guidance.targeting.reselect.score_margin LIVE GNC/guidance/ee_guidance.py:510
camera_guidance.targeting.reselect.min_hold_steps LIVE GNC/guidance/ee_guidance.py:324
camera_guidance.targeting.camera.angle_max LIVE utils/parameter_loader.py:180 builds rad_max, cos_max
camera_guidance.targeting.camera.depth.far LIVE GNC/guidance/target_finder.py:321
camera_guidance.targeting.camera.depth.max LIVE GNC/guidance/target_finder.py:329
camera_guidance.targeting.camera.depth.min LIVE GNC/guidance/target_finder.py:323
camera_guidance.targeting.camera.depth.near LIVE GNC/guidance/target_finder.py:321
camera_guidance.targeting.camera.fov LIVE utils/parameter_loader.py:182 also target_finder.py:206
camera_guidance.targeting.camera.high_res.enable LIVE utils/parameter_loader.py:178 selects resolution
camera_guidance.targeting.camera.low_resolution LIVE utils/parameter_loader.py:179
camera_guidance.targeting.camera.tsdf_resolution LIVE utils/parameter_loader.py:178
camera_guidance.targeting.scoring.mode LIVE GNC/guidance/target_finder.py:40 ScoringMode enum
camera_guidance.targeting.scoring.sampling.n_rays LIVE GNC/guidance/target_finder.py:129
camera_guidance.targeting.scoring.sampling.n_query LIVE GNC/guidance/target_finder.py:158
camera_guidance.targeting.scoring.sampling.n_targets LIVE GNC/guidance/target_finder.py:95
camera_guidance.targeting.scoring.sampling.radius_scale LIVE utils/parameter_loader.py:187 builds camera_radius
camera_guidance.targeting.scoring.sampling.seed LIVE GNC/guidance/target_finder.py:99 open3d RNG seed
camera_guidance.targeting.scoring.weights.dist LIVE GNC/guidance/target_finder.py:343
camera_guidance.targeting.scoring.weights.angle LIVE GNC/guidance/target_finder.py:343
camera_guidance.targeting.scoring.weights.off_centre LIVE GNC/guidance/target_finder.py:343
camera_guidance.targeting.scoring.weights.kong LIVE GNC/guidance/target_finder.py:474 EXPONENTIAL/WEIGHTED weight key
camera_guidance.targeting.scoring.weights.novelty LIVE GNC/guidance/target_finder.py:474
camera_guidance.targeting.scoring.weights.motion LIVE GNC/guidance/target_finder.py:474
camera_guidance.targeting.scoring.weights.stability LIVE GNC/guidance/target_finder.py:474
camera_guidance.targeting.scoring.weights.area LIVE GNC/guidance/target_finder.py:474
camera_guidance.targeting.scoring.weights.anchor LIVE GNC/guidance/target_finder.py:474
camera_guidance.targeting.scoring.weights.manipulability LIVE GNC/guidance/target_finder.py:474
camera_guidance.targeting.scoring.weights.stability_length LIVE GNC/guidance/target_finder.py:413
camera_guidance.targeting.scoring.weights.anchor_length LIVE GNC/guidance/target_finder.py:432

camera_guidance.trajectory.*

dotted key class first consumer (file:line) note
camera_guidance.trajectory.default_goal_uses_desired_base LIVE GNC/guidance/ee_guidance.py:276
camera_guidance.trajectory.goal.pos.time_scale LIVE utils/parameter_loader.py:161 builds goal.pos.alpha
camera_guidance.trajectory.goal.pos.rate_max LIVE GNC/guidance/ee_guidance.py:790
camera_guidance.trajectory.goal.axis.time_scale LIVE utils/parameter_loader.py:162 builds goal.axis.alpha
camera_guidance.trajectory.goal.axis.rate_max LIVE GNC/guidance/ee_guidance.py:804
camera_guidance.trajectory.goal.axis.angle_max LIVE utils/parameter_loader.py:163 builds cos_max, sin_max
camera_guidance.trajectory.goal.step_max LIVE GNC/guidance/ee_guidance.py:533 per-step p_ce cap
camera_guidance.trajectory.goal.quintic.enable DORMANT quintic_pose.py exists but is never imported; gate=false
camera_guidance.trajectory.goal.quintic.v_max DORMANT same gate: quintic_pose.py not imported
camera_guidance.trajectory.goal.quintic.a_max DORMANT same gate
camera_guidance.trajectory.goal.quintic.t_min DORMANT same gate
camera_guidance.trajectory.orbit_path.enable LIVE GNC/guidance/ee_guidance.py:97 CHAIN_5
camera_guidance.trajectory.orbit_path.mode LIVE GNC/guidance/ee_guidance.py:103 OrbitPathMode enum
camera_guidance.trajectory.orbit_path.smooth_window LIVE GNC/guidance/ee_guidance.py:95 savgol smoothing
camera_guidance.trajectory.orbit_path.max_step LIVE GNC/guidance/ee_guidance.py:95 per-step surface path cap
camera_guidance.trajectory.orbit_path.ff_route DEAD CHAIN_10 audit: discarded at sole call site; key is read into config but no code branch uses it
camera_guidance.trajectory.orbit_path.progress_sync LIVE GNC/guidance/ee_guidance.py:101 CHAIN_5
camera_guidance.trajectory.orbit_path.aim_floor_rate LIVE GNC/guidance/ee_guidance.py:105 CHAIN_6 P3 monotone clock (0.0 = OFF)
camera_guidance.trajectory.orbit_path.aim_lead_max LIVE GNC/guidance/ee_guidance.py:106 CHAIN_6 P3 (0.0 = OFF)
camera_guidance.trajectory.orbit_path.aim_during_initial LIVE GNC/guidance/ee_guidance.py:109 CHAIN_5
camera_guidance.trajectory.orbit_path.detours.enable DORMANT GNC/guidance/detour_planner.py detour_planner.py imported only in validation/ (d2_full_helix_setdiff, detour_predict_calibration, k1_initial_aim_predict, test_detour_planner); gate=false; no live GNC import path
camera_guidance.trajectory.orbit_path.detours.predict_stride DORMANT validation only same gate as detours.enable
camera_guidance.trajectory.orbit_path.detours.cluster_radius DORMANT validation only same gate
camera_guidance.trajectory.orbit_path.detours.min_cluster_tris DORMANT validation only same gate
camera_guidance.trajectory.orbit_path.detours.split_extent DORMANT validation only same gate
camera_guidance.trajectory.orbit_path.detours.n_waypoints DORMANT validation only same gate
camera_guidance.trajectory.orbit_path.detours.ramp_margin DORMANT validation only same gate
camera_guidance.trajectory.orbit_path.detours.coverage_target DORMANT validation only same gate
camera_guidance.trajectory.orbit_path.detours.max_rounds DORMANT validation only same gate

uncertainty.*

dotted key class first consumer (file:line) note
uncertainty.enable LIVE GNC/uncertainty_model.py:27 risk phase master switch
uncertainty.seed LIVE GNC/uncertainty_model.py:28
uncertainty.camera_pose.pos_std LIVE GNC/uncertainty_model.py:33
uncertainty.camera_pose.angle_std LIVE GNC/uncertainty_model.py:33
uncertainty.state.pos_std LIVE GNC/uncertainty_model.py:36
uncertainty.state.vel_std LIVE GNC/uncertainty_model.py:36
uncertainty.actuation.force_std LIVE GNC/uncertainty_model.py:38

assets.yaml — robots.*

dotted key class first consumer (file:line) note
robots.UR3.name LIVE utils/robot.py:19 name check assertion
robots.UR3.relative_path LIVE utils/parameter_loader.py:71 builds robot_path
robots.UR3.I_body LIVE utils/parameter_loader.py:131 builds omega_dot_max
robots.UR3.base_frame LIVE utils/robot.py:40 pinocchio frame ID
robots.UR3.cam_frame LIVE utils/robot.py:39 pinocchio frame ID
robots.UR3.joint_torque_limits LIVE utils/parameter_loader.py:75 builds constraints.tau_max
robots.UR3.joint_velocity_limits LIVE utils/parameter_loader.py:75 builds constraints.theta_dot_max
robots.UR3.mass LIVE utils/parameter_loader.py:119 v_dot_max = F_max / mass
robots.UR3.n_DOF LIVE utils/robot.py:34 assertion vs pinocchio model
robots.UR3.joint_limits.lower LIVE GNC/com_controller.py:258 CHAIN_5 clipping envelope
robots.UR3.joint_limits.upper LIVE GNC/com_controller.py:258
robots.UR3_7.* DORMANT all fields identical in structure to UR3.*; only loaded when simulation.robot: UR3_7; gate = simulation.robot config key
targets.GRO.name LIVE utils/parameter_loader.py:65 loaded when target=GRO (default)
targets.GRO.path LIVE utils/parameter_loader.py:171 builds mesh_path
targets.GRO.radius LIVE utils/parameter_loader.py:108 orbit.radius = radius + clearance
targets.RCM.* DORMANT only loaded when simulation.target: RCM
targets.acrim.* DORMANT only loaded when simulation.target: acrim

key justification
simulation.logging.stride Hardcoded as VISIBILITY_MARK_STRIDE = 5 in guidance_rollout.py:17; config key ignored
guidance.com.orbit.path.sample_dt Zero consumers; orbit sampling is time-driven via simulation.time.dt, not this key
guidance.com.window_size base_guidance reads guidance.base.window_size; this sibling under com is never accessed
guidance.rollout.stride See logging.stride above — same constant
guidance.rollout.store_frames Zero consumers
guidance.base.axis_threshold Zero consumers
controller.com.use_reference Zero consumers
controller.com.terminal_settle_time Zero consumers
constraints.base.omega_max Zero consumers; saturation uses omega_dot_max (derived from I_body/torque_max)
constraints.arm.v_max Zero consumers
controller.arm.gains.posture.K Zero consumers; arm posture code (breve_controller.py:440) reads base.posture.gains.K, not arm.gains.posture.K — likely a copy-paste artifact
controller.arm.gains.posture.D Same as above
controller.arm.null_space.damping YAML comment explicitly says “not read yet”
controller.arm.null_space.freeze_floor Zero consumers
config_sampling.j_plus.enable Block is accessed by name (condit.j_plus); flag never checked
config_sampling.gamma.enable Same as j_plus.enable
config_sampling.gamma.floor Zero consumers; j_plus has soft_floor/hard_floor but gamma block has no floor logic
camera_guidance.targeting.max_step.p Superseded by camera_guidance.trajectory.goal.step_max; zero consumers
camera_guidance.targeting.max_step.z Same
camera_guidance.targeting.pointing.reselect_cos Zero consumers
camera_guidance.trajectory.orbit_path.ff_route CHAIN_10 audit confirmed: FD tangent discarded at sole call site (confirmed zero GNC consumers)
key annotation suggestion
controller.com.speed_derating.enable Add # Legacy: gate moved to controller.base.conditioning.enable (TASK_2/T4); this flag is inert
controller.base.accel_feedforward.enable Add # Dormant: CHAIN_2 cancelled; placeholder in case base accel FF revived
controller.arm.gains.orientation.I Add # Dormant: only active when arm.integral.include_attitude=true (currently false)
camera_guidance.trajectory.goal.quintic.* Add # Dormant: quintic_pose.py never imported; enable=false; G1 v3 design put on hold
camera_guidance.trajectory.orbit_path.detours.* Add # Dormant: CHAIN_3 detour tasks cancelled; detour_planner.py imported in validation/ only; enable=false
robots.UR3_7.* Add # Dormant: only loaded when simulation.robot: UR3_7
targets.RCM.* / targets.acrim.* Add # Dormant: only loaded when simulation.target is overridden

6. CONTROLLER VERIFICATION (Jun 12, before any purge) — 4 verdicts REFUTED

Every DEAD claim was independently re-checked before the A1 purge. Corrections:

Key Audit said Verified Evidence
controller.arm.null_space.freeze_floor DEAD LIVE utils/robot.py:314 (R1 kernel freeze) + 12 validation consumers
constraints.base.omega_max DEAD LIVE GNC/breve_controller.py:489 (state saturation)
constraints.arm.v_max DEAD LIVE GNC/breve_controller.py:492 (state saturation)
guidance.rollout.stride DEAD VALIDATION-ONLY analysis/pre_run_loader.py loader_smoke override-test key (6 refs)

The remaining 15 DEAD verdicts were confirmed (zero consumers via dotted-path AND bare-leaf sweeps, incl. the getattr hazard check: jp/g_reg field enumerations show j_plus.enable / gamma.enable / gamma.floor are never read; g_reg is controller.base.gamma_regularization, NOT config_sampling.gamma).

A1 purge executed on the verified 15 only. Lesson recorded: audit agents’ DEAD verdicts require controller verification before deletion — one wrong verdict (freeze_floor) would have deleted the R1 freeze knob.