Skip to content

Discussion: O3 — should drift print 'INFO: N paths suppressed' always-on, --verbose-only, or --no-ailog-suppress-only? #91

@montfort

Description

@montfort

Context

O3 is the sole pending design discussion carried forward from issue #81. The remaining frictions (F1-F8 + new wildcard glob) all shipped as patches in cli-3.7.x and cli-3.8.0; O1 was promoted to designed-feature in fw-4.6.2 docs. O3 needs an empirical signal before deciding.

What O3 is about

devtrail charter drift already prints an AILOG-suppressed: N path(s) block when N > 0 (see cli/src/commands/charter/drift.rs::run). When N = 0, default and --no-ailog-suppress produce byte-identical output because there's nothing to suppress in the first place — no toggle visible.

Sentinel CHARTER-02 telemetry surfaced this as O3: the operator can't tell whether:

  1. The suppression logic ran and found nothing to suppress (innocent — flag had its chance), or
  2. The flag isn't wired correctly (potential dispatch bug between Rust wrapper and bash script).

Three options on the table

Option Behavior Trade-off
(a) Always-on Print INFO: N paths suppressed by AILOG-aware filter on every drift invocation, including N=0. Eliminates ambiguity in 100% of cases. Adds a line of noise to runs where suppression never fires (likely the majority).
(b) --verbose only Default silent; operator opts in to see suppression activity. Preserves minimal default output. Operators who want to debug O3 explicitly ask for it.
(c) --no-ailog-suppress only Always print when the flag is passed; silent otherwise. The flag always says something when invoked explicitly, exposing the dispatch question. Default stays silent.

My current lean is (c) — the flag is rarely used, and when it IS used, the operator wants to know what they bypassed. But this is genuinely a judgment call that benefits from empirical data, not opinion.

What we need to decide

Test in the next Sentinel bundle whether:

  1. The flag's effect is visible enough today when N > 0 (existing AILOG-suppressed block is sufficient), or
  2. The N = 0 ambiguity bites in practice (operator wonders whether the filter ran), or
  3. Some adopters need always-on; others find it noise.

Test scenario (for Sentinel agent or any adopter willing to validate)

Construct ONE Charter where AILOG-aware suppression genuinely fires (N > 0). The shape:

  1. Charter declares file X in ## Files to modify.
  2. Charter's originating_ailogs frontmatter references AILOG-Y.
  3. AILOG-Y's ## Risk section explicitly names file X (e.g., R3 (new, not in Charter): src/foo.go — declared but not touched).
  4. The execution does not modify X (legitimate scope simplification).

Run both:

devtrail charter drift CHARTER-NN                       # expected: AILOG-suppressed block visible
devtrail charter drift CHARTER-NN --no-ailog-suppress   # expected: X listed as declared-omitted drift

Capture:

  • Both outputs verbatim. Confirm the toggle is visible in this case.
  • For at least one Charter where suppression does NOT fire (N=0): run the default and --no-ailog-suppress and capture the (presumably byte-identical) output.
  • Operator's subjective read: when outputs are byte-identical (N=0 case), would you have known the flag had any effect? Would INFO: 0 paths suppressed have helped, been noise, or been irrelevant?
  • Vote on (a) / (b) / (c) with one-sentence rationale.

A telemetry comment on this issue with the captured outputs and the operator's read is enough to break the tie. No code change needed from your side; the change lands in DevTrail once we have one real-world data point.

Why this isn't shipped speculatively

Per principle #12 ("the product's velocity is the velocity of learning") and the v0.2 annotation on principle #6 ("virtud vs ceremonia"): always-on info logs are easy to ship and impossible to remove without breaking adopters who scripted around them. Better to wait one cycle for evidence.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions