Skip to content

The attention view is inert on any machine that is not M5 or M1 #160

Description

@justin808

Problem

The attention model recognises exactly two machines. normalizeHost in src/server/attention/buildAttentionModel.ts:

const folded = asciiUpper(value.trim());
return folded === "M5" || folded === "M1" ? folded : null;

A record whose host_id is anything else is not merely labelled unknown — its card is dropped:

`Record ${idText(record)} names host ${quoted(...)}, which is neither M5 nor M1; the card is suppressed.`

and the same function decides the payload's dashboard_host, so a dashboard whose AGENT_COORD_MACHINE_ID is not M5 or M1 reports dashboard_host: "UNKNOWN" and emits a dashboard_host_unknown diagnostic on every read.

The consequence for anyone who is not running this specific two-machine setup: the Human Attention view is inert. Every card is suppressed, the page shows the empty state, and the only hint is a diagnostic naming two machine identifiers that mean nothing to them. This package is published under MIT and installed by name, so "M5" and "M1" are, in effect, a private allowlist shipped as product behavior.

Why this is filed rather than fixed in place

The two-host union is the approved design from issue #125 and the 2026-09-04 design, and it is load-bearing in the shared types (AttentionCardHost), the model, the client's render allowlist, and the cross-host "open on M5:" affordance. Widening it is a product decision with a real design question behind it, not a patch.

The design question

What is a host, once it is not a fixed pair? Candidates, roughly in increasing order of work:

  1. Configured allowlist. AGENT_COORD_KNOWN_HOSTS (defaulting to the current pair for compatibility) with the same normalisation and suppression rules. Smallest change; keeps the closed-set guarantee that makes the render allowlist safe.
  2. Any well-formed host identifier, bounded and projected like every other untrusted string, with dashboard_host compared case-folded. Suppression then applies only to records with no usable host at all. Removes the allowlist but requires deciding the identifier's shape and its render bound.
  3. Dashboard-relative only. Keep the local machine id as the only privileged value: a card is "here" or "elsewhere", and "elsewhere" prints the record's projected host string.

Option 1 unblocks other users with the least risk. Option 3 is probably where this wants to end up, because it makes the concept relative rather than enumerated.

Evidence

  • src/server/attention/buildAttentionModel.tsnormalizeHost, the unknown_host suppression path, and dashboardHost.
  • src/shared/attention.tsAttentionCardHost as the literal union.
  • Verified at main 6bdf70726f7accc4ad31e19cda51e56a903fe21d.

Found by the post-merge audit of batch acd-attention-1a-20260906 (tracker #134).

Activity

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions