Skip to content

Extension loading narrates failures and logs everything else; on success the console hears nothing #829

Open

Description

@David-Noble-at-work

Ruled 2026-09-05. Extension loading narrates failures and logs everything else that is
of interest in debugging, diagnostics and troubleshooting. The console, through the narrator, hears
from loading only when something went wrong.

Today

Loading narrates its success — the module-selection inventory, two lines on every invocation:

[star] [+] scripting runtime (ambient): 28 of 28 modules contribute 141 of 141 methods
[star] [+]   full      appnet(1) archive(2) commands(7) ...

It is emitted through the one narrator (starlarkbridge.Runtime.reportSelection,
runtime.go:489, Status.Note), and it is the only narration star produces before argv is parsed,
because extensions must be discovered to register their commands before cobra can parse. So it is
the one line --silent cannot reach (#828). It is also, by 2.8's own test, diagnostics narrating
because the diagnostics API does not exist yet (TODO(#507), runtime.go:455).

Failures already reach the console: Warning: failed to load Starlark commands: <extension>: <command>: <cause>.
This issue changes the success path, and makes the failure path deliberate rather than incidental.

The rule

Event Destination
An extension fails to load — parse error, missing run, unresolvable load(), bad spec narrate, once, with extension, command, file and cause
A config schema fails to register narrate
Search paths walked, and which existed log
Extensions discovered per path; one shadowing another by name, and which won log
Commands registered, and their cobra paths log
Config paths registered log
The module-selection inventory — admitted, partial, refused, per module log
Timing of discovery and load log

"Log" is the diagnostics stream: DEBUG through the slog tee once #507 gives it a destination.
Nothing on that list is user-facing progress; every item is what a person reads when a command is
missing, a shadow surprised them, or star started slowly.

Interim, before #507

Gate the inventory on --verbose. -v exists on the root, and this is the same user-visible
contract as the end state. Whatever the destination, move the emit to PersistentPreRun, after
flags are known: -v has the mirror-image pre-parse problem the banner has with --silent.

Done when


Epic: #449 · Feature: #504 — related: #828 (the symptom), #507 (the API), #506 (severity as the mechanism), #502 (the tee)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Epic:EventingEventing, narration, and the control planetaskImplementation work item

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions