Skip to content

UX polish: annotate AILOG-suppressed paths inline in drift WARNING block #93

@montfort

Description

@montfort

Context

Surfaced as a secondary observation by Sentinel CHARTER-06 telemetry while validating O3 (issue #91). Not bundled with the O3 fix in fw-4.7.1 / cli-3.8.1 — flagged here for separate validation before changing.

Observation

When devtrail charter drift runs with default suppression and N>0, the same path appears in two separate output blocks:

WARNING: Declared in Charter but NOT modified (1 files):
  - internal/core/eventbus/subscriber.go        ← shows up here

  Action: either complete the work, or document in AILOG ...

INFO: Modified but NOT declared (3 files, scope expansion):
  - .devtrail/charters/CHARTER-06.telemetry.yaml
  - go.mod
  - go.sum

  Action: ...

AILOG-suppressed: 1 path(s)
  - internal/core/eventbus/subscriber.go [documented in AILOG-2026-05-03-034]   ← AND here

OK all declared-omitted paths are documented in AILOGs — drift accepted.

The reader sees a WARNING, scrolls to the bottom, finds the AILOG-suppressed block, and mentally cross-references to discover the warning was OK'd. The final OK ... — drift accepted. line resolves the ambiguity for the top-to-bottom reader, but it requires reading the entire output to know the WARNING was ultimately benign.

Proposed change

Annotate suppressed paths inline at first appearance in the WARNING block:

WARNING: Declared in Charter but NOT modified (1 files):
  - internal/core/eventbus/subscriber.go [suppressed: AILOG-2026-05-03-034]

  Action: either complete the work, or document in AILOG ...

The trailing AILOG-suppressed: block can stay (gives a count + per-path summary at end), or be replaced by the inline annotation. A forward-looking --inline-suppressed-tags flag is overkill — pick one shape.

Why not bundled with O3

  1. Risk of scripted-pipeline regression. Adopters may have CI / monitoring that parses the WARNING block ("how many declared-but-not-modified paths"). Adding [suppressed: ...] to each line breaks naive grep -c ' -' patterns. Adopters who do use such patterns likely want the inline annotation, but we should confirm with at least one before changing.
  2. Surface distinct from O3. O3 fix is --no-ailog-suppress + N=0 only. This is default-mode + N>0. Different code paths, different test surface.
  3. The current shape works for top-to-bottom readers. The OK ... — drift accepted. final line tells the reader the WARNING was benign. The friction is "cognitive load to scan the whole output", not "wrong information". Friction worth fixing, but not urgent.

What we need to decide

Empirical signal from at least one adopter cycle would tell us:

  • (1) Whether the cognitive load is real friction or just an aesthetic note.
  • (2) Whether any adopter has scripted the WARNING block parsing.
  • (3) Whether the inline annotation should replace the trailing AILOG-suppressed: block (less duplication) or complement it (preserves count summary at end).

If the next telemetry bundle from Sentinel (or any adopter) confirms (1) as friction and (2) as low risk, this is a 1-hour patch: change commands/charter/drift.rs::run to post-process the WARNING block of the bash script's stdout, appending [suppressed: <ailog-id>] to lines whose path is in suppressions.

Originating discussion

Issue #91 closing comment, Sentinel CHARTER-06 telemetry, section "Mild secondary observation from the N>0 case (A)".

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions