Skip to content

Sensitivity analysis on GROWTH_AXIS_RELIABILITY_K default (Tier 0 follow-up) #202

@eberrigan

Description

@eberrigan

Parent epic: #197
Originating PR: #2 / add-circumnutation-tier0-kinematics (sub-issue TBD — filed alongside PR #2)
Type: documentation / sensitivity-sweep (no code-correctness blocker)
Priority: low — defer until real low-growth-mutant data becomes available

Summary

The Tier 0 growth-axis reliability gate (PR #2) uses D < GROWTH_AXIS_RELIABILITY_K × sg_residual_xy_local to NaN rotation-dependent traits on tracks where the growth axis is unreliable. The default K = 10 is documented in openspec/specs/circumnutation/spec.md Requirement "Growth-axis reliability gate" and in docs/circumnutation/roadmap.md CC-5 as a heuristic safety factor — there is no specific empirical anchor in the prelim data (Nipponbare plate 001) or in the cited literature that pins K = 10 over K = 5 or K = 20.

This issue proposes a sensitivity sweep on real low-growth / mutant / stressed-plant data once such fixtures become available, to either confirm K = 10 as defensible or recommend a different default.

Why

The Nipponbare reference fixture (PR #2's tests/data/circumnutation_nipponbare_plate_001/) shows 3 of 6 proofread tracks fail the gate (tracks 2, 3, 5 have L/D ratios 18–119, indicating physical wandering or proofreading gaps). This is a sample of N=1 plate; we don't know whether the gate is calibrated correctly across the full distribution of real plant data. Specifically:

  • Too lenient (K = 3-ish): the gate fires only when D approaches sg_residual — only the most unambiguously broken tracks get flagged. Mutants with low but real growth could be mis-classified as gate-clean and emit meaningless rotation traits.
  • Too aggressive (K = 30+): the gate fires for legitimately slow-growing but still-meaningful plants. Loses real biological signal.

K = 10 is the rough middle; the rationale in PR #2's design.md D2 is "at the prelim's typical noise floor of ~2 px, K = 10 means net displacement must exceed ~20 px before rotation-dependent traits are emitted, which is roughly 4 minutes of healthy growth on the Nipponbare plate." This is plausible but not analyzed.

In scope (when this issue is acted on)

  1. Acquire a real low-growth-mutant dataset. Candidates: rice mutants known to have reduced gravitropism / impaired growth; stressed plants from temperature or chemical treatments. Suyash Patil's Nipponbare_0.8PG_GA4vsTZT experiment has 4 plates (MOCK, GA₄, MOCK rep, TZT) — the TZT-treated plate (plate_004) may have suppressed growth.
  2. Run Tier 0 on the candidate fixtures with ConstantsT(GROWTH_AXIS_RELIABILITY_K=...) swept across {3, 5, 10, 15, 30}.
  3. For each K value, report per-track:
    • growth_axis_unreliable flag
    • The 9 trait values (with rotation-dependent NaN'd when flag is True)
  4. Identify the breakpoint where the flag transitions for "borderline" tracks; check whether trait values for tracks at that breakpoint are scientifically meaningful or noise.
  5. If the analysis suggests a different default, propose it in a follow-up OpenSpec change. Update roadmap.md CC-5 and _constants.py accordingly.

Out of scope

Acceptance

  • A short markdown report at docs/circumnutation/growth_axis_k_sensitivity_2026-MM-DD.md (or similar) documenting the sweep, the recommended K (whether 10 survives or is replaced), and the data sources used.
  • If the recommended K differs from 10, a follow-up OpenSpec change updates _constants.py::GROWTH_AXIS_RELIABILITY_K, _constants.py::ConstantsT.GROWTH_AXIS_RELIABILITY_K, roadmap.md CC-5, and any test scenarios pinning the value.

Labels

circumnutation, documentation, follow-up, low-priority

Metadata

Metadata

Assignees

No one assigned

    Labels

    circumnutationPlant circumnutation pipelinedocumentationImprovements or additions to documentation

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions