Skip to content

[finding] plugin-auth: after #14724 the 'no email service registered' info line becomes reachable on every routes-less host — a level chosen when the line was effectively unreachable, now facing a new audience #14814

Description

@claude

Filed by the domain:services PM seat (session session_01AUF1NoViznQK32gqpK8wS8, GitHub os-sales) out of the seat collection of PR #14810 (card #14724). Unassigned, ungraded — recording only; triage owns domain:*, type and priority. ⛔ Does not block PR #14810, which lands on its own; the #14724 ruling (14724#issuecomment-5518030363) deferred this deliberately and the dev left the line untouched as instructed.

The observation

auth-plugin.ts reports an absent mail transport at ctx.logger.info('Auth: no email service registered — transactional mail disabled') — origin/main:756, and :775 at PR #14810's head 358319608 (same level, byte-identical modulo a two-space de-indent; verified both sides).

Before #14724 that line sat inside the if (this.options.registerRoutes) gate, so on a routes-less embedding it never ran. #14724 moves the composition block out of that gate — correctly, that is the whole point of the card. The side effect worth recording: the line's audience changes from "hosts that mount auth routes" to "every host", and the routes-less population is every tenant environment (artifact-kernel-factory.ts:728 constructs AuthPlugin with registerRoutes: false by design).

So the level info was chosen for a site that, for this population, was unreachable. That is not an argument that info is wrong — it is an argument that it was never chosen against this audience.

The three options, as the dev framed them

This seat's reading, offered not decided

A, weakly. The level is only load-bearing when the absence is a defect, and the requireEmailVerification: true branch already carries error for exactly that case — so B would raise volume across the whole tenant population to restate something the error branch already says when it matters. Against that: nobody has reported missing this line, so the pull is unmeasured and the reachability change is a prediction about future hosts rather than observed demand. Widening boot-noise surface without pull is the thing to be suspicious of, and that suspicion cuts toward A.

⛔ I am not acting on this. An execution seat does not grade, and the ruling already deferred it once.

Dedup

list_issues over every open finding (2 at 03:2xZ: #14811 os explain catalog entries, #13562 metadata index vocabulary) — neither is this. Deterministic listing rather than search_issues, whose free-text false zeros are #14743. Related but distinct: #13398 (the standing ruling that fences option C).


Generated by Claude Code

Activity

  1. huangyiirene commented on Sep 3, 2026

    @huangyiirene
    Collaborator

    Triage — graded and ruled: A, keep info. domain:services · priority:p3; finding removed. Closing as not planned, with an explicit reopening criterion below.

    Verified

    ✅ auth-plugin.ts:756 — ctx.logger.info('Auth: no email service registered — transactional mail disabled'), level as reported.
    ⚠️ My grep for the routes-less population was head-truncated and did not surface artifact-kernel-factory.ts:728. ⛔ Recorded as not re-verified by me, not as absent — the card's claim stands on its own measurement, and it is not load-bearing for the ruling either way.

    The ruling

    A. The dev offered it "weakly" and was right to; the weak form is the correct strength, and it still decides.

    1. ⭐ The level is only load-bearing when the absence is a defect, and that case already has error. The requireEmailVerification: true branch escalates exactly when missing mail locks users out. B would raise volume across every tenant environment to restate, at lower severity, something the error branch already says when it matters.
    2. The pull is unmeasured, and the card says so. Nobody has reported missing this line; the reachability change is a prediction about future hosts, not observed demand. ⛔ Widening boot-noise surface on a prediction is the move to be suspicious of — and a routes-less host that deliberately supplies no transport is a legitimate configuration, not a misconfiguration to nag about.
    3. ✅ C stays fenced on its face, per the [Decision] plugin-sharing's refused-backfill report lands at warn where AGENTS.md puts it at error — and the card that was supposed to carry the level is CLOSED #13398-class ruling: a site reporting through a published sink shape may not be raised to error. Recorded as the card recorded it — for completeness, not as a live option.

    ⇒ Ruling A means no work, so this does not belong in the queue. ⛔ A card whose disposition is "change nothing" left sitting pm:queue is indistinguishable from one nobody has looked at.

    ⭐ Reopening criterion — so this is a decision, not a dismissal

    Reopen and take B if either of these is observed rather than predicted:

    • a support or dogfood incident where a routes-less tenant environment's absent transport went unnoticed because the line was info; or
    • a measured count of tenant environments that intended a transport and shipped without one.

    Either turns the unmeasured pull into a measured one, which is the only thing this ruling rests on. ⛔ Do not reopen on the reachability argument alone — that is already priced in above.

    Note

    ✅ The card is right that this ⛔ does not block PR #14810, and the dev was right to leave the line untouched as the #14724 ruling instructed. Deferring it once and then filing it rather than acting is why it could be ruled in one pass instead of arriving as an unexplained diff.

    ✅ Dedup method accepted — deterministic list_issues over open finding rather than search_issues (#14743). Fifth card this shift to route around that defect.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions