Skip to content

RLCR feedback: batch review discovery at COMPLETE + unify triage rules to collapse single-finding tails (5 new patterns) #230

Description

@ZziTaiLeo

RLCR Loop — Methodology Analysis (Pure Process)

Scope: one review-and-converge loop for a multi-surface self-service feature with
security-sensitive flows (authentication, credential lifecycle, session management,
destructive account operations) spanning an API layer, a web UI, and operational
scripts. Third loop in this project lineage. All examples generalized.

Loop Shape (the load-bearing numbers)

  • 10 rounds (R0–R9) + a finalize pass. Exit reason: complete.
  • Mainline convergence: R0–R2 (3 rounds). R0 executed the entire plan in one
    shot (all planned tasks), then two rounds closed acceptance gaps. Verdict reached
    COMPLETE at R2.
  • Review tail: R3–R9 (7 rounds). After the plan was verifiably done, seven
    consecutive review-only rounds each surfaced and fixed one to two newly found
    code-level defects, severity descending overall (P1/P2 → … → P3).
  • Every review finding was a true positive with a concrete failure scenario; I
    found no false positives and no thrash/circling. Re-reviews confirmed each fix.

What Worked (kept brief — methodology was largely healthy)

  • No plan-level serial discovery. R0 front-loaded the whole plan instead of
    discovering tasks round-by-round. This is the prior lessons landing.
  • Zero goal drift. The immutable goal/AC set held for 10 rounds; every deferral
    was pre-approved and justified; each review contract explicitly said "no new
    mainline, fix-only." Scope discipline was excellent.
  • Directive feedback. Reviews shipped step-by-step fix plans, not just
    complaints, so fixes landed on the first try in the tail. Summaries were uniformly
    well-structured (work / files / validation / remaining / lesson-delta).
  • Reviewer honesty. When the sandbox blocked test execution, the reviewer said so
    and fell back to control-flow review rather than claiming a green run.

Prior-Lesson Absorption

  • Loop-1 lesson (front-load an evidence acceptance spec): partially absorbed. ACs
    were explicit and evidence-oriented, but R0 still self-declared a reversibility
    check "passed" with no checked-in reproducible artifact; the reviewer found no
    evidence and reopened it. The spec named what to prove but the self-audit did not
    enforce "evidence must be a committed, re-runnable artifact, not a claim."
  • Loop-2 lesson (give the pre-review audit a correctness-family checklist):
    absorbed but under-scoped.
    An in-plan security/correctness audit task existed and
    did catch an issue family early (several must-fixes closed in R0). But its
    checklist covered only the auth-enumeration / atomicity / guard family. The entire
    7-round review tail lived in families the checklist never enumerated — see below.

New Patterns (not covered by either prior report)

  1. Serial discovery migrated from the plan layer to the review layer. Prior loops
    fixed serial mainline discovery; this loop shows serial review discovery
    instead — each pass found one defect, exhausted, then the next pass found the next.
    7 of 10 rounds were single-finding review rounds.
    Improvement: at the moment mainline hits COMPLETE, run one broad multi-lens
    review pass
    (security / resource-exhaustion / UI product-completeness /
    ops-script safety as separate parallel lenses) before entering the incremental
    review loop, to surface the whole descending-severity chain at once instead of
    one-per-round.

  2. Asymmetric finding-triage is the structural cause of the long tail. The loop
    has a queue: audit-discovered low-severity items were parked with revisit
    triggers. But review-discovered items were all force-classified "blocking —
    clear every severity to zero." So identical low-severity hardening was queued when
    the audit found it yet consumed a whole round when the reviewer found it (two such
    items were queued, later re-surfaced as blocking). The tail ran down to a cosmetic
    display-fallback because nothing could be queued.
    Improvement: apply one triage rule to both sources. Define an exit
    threshold (mainline COMPLETE + zero P0/P1) and let P2/P3 review findings be
    queued-with-trigger just like audit findings, rather than each mandating a round.

  3. Component-rewrite cascade with no whole-component re-review gate. One
    security-sensitive component was redesigned mid-loop; the next two review rounds
    each found a different latent defect in that same component (three separate
    rounds touched it). The diff-scoped single-issue review never stepped back to
    re-scan the rewritten unit holistically.
    Improvement: after any round that redesigns a component, gate the next
    review as a whole-file re-review of that unit, not a fresh diff scan — latent
    siblings surface together.

  4. Acceptance-directive ambiguity caused a mini-bounce (R0→R1→R2). A concurrency
    AC was reopened twice because the R0 directive ("two independent sessions/clients")
    read equally as a low-layer helper test or a public-endpoint test; the implementer
    took the cheaper interpretation, and the reviewer had to re-specify the exact seam
    (public endpoint + its side effects) in R1.
    Improvement: acceptance-test directives should name the exact seam and the
    side effects to assert
    (endpoint + state mutation + revocation), closing the
    "cheaper-interpretation" gap in one round.

  5. New-surface families were absent from the in-plan audit's coverage list. The
    tail was dominated by families the audit never listed: throttling correctness,
    unbounded in-process growth, UI end-to-end completeness of a recovery flow, and
    destructive operational-script safety.
    Improvement: extend the pre-review audit checklist beyond auth-correctness to
    include resource-exhaustion, UI-flow completeness, and ops/deploy-script
    safety
    as standing families whenever a change touches those surfaces.

Round-to-Value Ratio

Absolute quality is high and the exit was clean. But 70% of rounds were the
single-finding tail, and the last two rounds fixed genuinely minor edges. The loop's
weakness is not correctness — it is discovery batching and triage symmetry: a
front-loaded broad review plus one consistent queue rule would likely have collapsed
seven tail rounds into two or three, at equal final quality.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions