Skip to content

[Feature]: Let a project declare optional components absent by choice, so fw doctor stays green and readable #98

Open

Description

@MikeEchoVoid

Problem

A consumer project can deliberately run without some optional components. Here: no embedding service (Ollama: memory is tight on the host), no Playwright (no framework UI tests in a consumer), no TermLink and no cross-host messaging, no framework cron (fw cron install needs root and the two seeded jobs serve the components above).

The framework has no way to record that choice, so fw doctor exits 1 forever:

  • six FAIL lines for the vector index (index, manifest, age, lag, canary, token) plus WARN usage: recall and WARN [host] embed endpoint not reachable. lib/config.sh only offers thresholds (INDEX_MAX_AGE_HOURS, RECALL_FAIL_PCT_WARN...), no switch;
  • WARN Playwright pip package missing;
  • WARN Cron registry present but not generated (the seeded jobs are sidecar-sweep-5m and index-reindex-hourly);
  • WARN Sidecar watcher live but INERT: TermLink absent and WARN [host] TermLink not installed.

MESSAGING_TOOLKIT: 0 (T-4042, thank you) stops the slash commands and scripts, but not the sidecar: the sidecar-autostart SessionStart hook still starts a receiver and two watchers for every session (agents/context/sidecar-autostart.sh); the only opt-outs are the environment variable FW_SIDECAR_AUTOSTART=0, which belongs to the launcher, not to the project, and fw sidecar stop.

A doctor that is always red teaches the operator to stop reading it, and the real failures are lost among the expected ones.

Proposed Solution

  1. One project-level switch per optional component in .framework.yaml, read by fw doctor and fw audit, for example SEMANTIC_INDEX: 0, UI_TESTS: 0, SIDECAR: 0. When off, the related checks print SKIP <name> (disabled in .framework.yaml) and do not count toward the exit code.
  2. MESSAGING_TOOLKIT: 0 also implies no sidecar autostart and no sidecar-sweep-5m job (or SIDECAR: 0 as its own key, documented next to it).
  3. fw cron generate leaves out jobs whose component is off, so fw cron install installs only what is used.
  4. fw upgrade keeps these keys, as it already keeps MESSAGING_TOOLKIT.

Subsystem

Task Management

Scope

None

Alternatives Considered

  • Install everything: Ollama costs memory the host does not have; Playwright and TermLink serve nothing in this project.
  • Live with the red doctor: that is what happens now, and it hides real failures.
  • FW_SIDECAR_AUTOSTART=0 in the launcher: it works for the sidecar only, and the setting then lives outside the project.

Additional Context

1.8.11 (e42aa41), vendored consumer, Linux (Ubuntu 20.04, systemd 245), Claude Code. Found during a review of the installation after upgrading from 1.8.6. Related defects found in the same review (smoke test, cron OK, resolver-loop, turn driver) are reported separately; this request is only about declaring components absent.

Activity

  1. DimitriGeelen commented on Oct 18, 2026

    @DimitriGeelen
    Owner

    [AEF intake] Received — 2026-10-18

    Thank you. This issue has been ingested into the Agentic Engineering Framework's intake as INTAKE-0014. Next step: classification (type, affected area, severity, whether it reproduces on the current release and on bleeding-edge). You will get a comment here at each step: classified → decision → in progress → fixed on bleeding-edge → available for testing → released.

    These status updates are automated, but Dimitri personally looks at every issue and decides what happens to it. Replies on this issue are read.

  2. DimitriGeelen commented on Oct 18, 2026

    @DimitriGeelen
    Owner

    [AEF intake] Classified — 2026-10-18

    Type: enhancement. Area: config and fw doctor. Severity: low. Reproduces: not applicable. No key declares a component absent by choice in lib/config.sh (checked by search). Duplicates: none found. Design question for the maintainer: an opt-out per component, or a suppression list in doctor.

    Awaiting the maintainer's decision.

    These status updates are automated, but Dimitri personally looks at every issue and decides what happens to it. Replies on this issue are read.

  3. DimitriGeelen commented on Oct 18, 2026

    @DimitriGeelen
    Owner

    [AEF intake] Accepted — 2026-10-18

    Tracked as T-4355, prioritised (horizon: now). Next update here: in progress.

    These status updates are automated, but Dimitri personally looks at every issue and decides what happens to it. Replies on this issue are read.

  4. added
    status:acceptedAccepted; linked to an AEF task
    area:doctorArea doctor (from the component fabric)
    and removed
    status:receivedIngested by the AEF intake pipeline
    on Oct 18, 2026
  5. DimitriGeelen commented on Oct 20, 2026

    @DimitriGeelen
    Owner

    [AEF intake] In progress — 2026-10-20

    Work has started under T-4355. Next update here: fixed on bleeding-edge.

    These status updates are automated, but Dimitri personally looks at every issue and decides what happens to it. Replies on this issue are read.

  6. added a commit that references this issue on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:doctorArea doctor (from the component fabric)enhancementNew feature or requestseverity:lowCosmetic or minorstatus:in-progressWork has startedtriagedClassified by the AEF intake pipeline

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions