You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Needs attention: keep a list of what needs a person and notify on the Mac #58
When the factory needs a person, it says so on this Mac at once and keeps a list of what is open, instead of leaving it in the ledger and the log.
Acceptance criteria
An Attention service in apps/server/src/factory/ keeps the open attention items. Each item has an id, kind, repo, issue (or none), run (or none), message and first-seen time. These raise an item:
every attention event the pass writes to the ledger;
a run that enters stuck or needs-info;
a machine config that fails to load;
a pass that errors three times in a row.
Every way in has a way out. An item clears when its condition clears:
the run leaves stuck or needs-info, or is stopped or abandoned;
the config loads;
a pass succeeds;
the repo leaves the config.
A test proves each clear.
A new item posts one macOS notification. The notification names the repo and issue (or "factory"), and clicking it opens the issue URL or, for a machine item, nothing. An item that stays open is never notified again, including across a server restart: open items are kept in <base>/factory/attention.json. A test proves no repeat after restart.
The notification goes through process.ts, running osascript with the text passed as argv (on run argv). The text is never placed inside the AppleScript source. A test with an issue title containing quotes, backslashes and " & do shell script " proves the argv form.
notify: false in the machine config turns the notification off and keeps the list. A missing osascript (not macOS) logs once and does not fail the pass.
stuck and needs-info already comment on the GitHub issue, and so reach GitHub notifications. Machine items (config, pass errors) have no surface at all today, which is the main gap.
Port the wording of softfac's ATTENTION lines where the same condition exists (rawphp/softfac@bf273a1, docs/lifecycle.md).
Reference
Design: factory/docs/design.md in this repo.
Upstream's AGENTS.md applies. Run only the tests and typechecks for the paths you touch (vp test run <path>, vp run --filter t3 typecheck), never the repo-wide checks.
Edit no upstream file that is not listed in factory/SEAMS. A new seam needs a line in factory/SEAMS and a reason in the PR body.
Activity
rawphp commentedon Oct 16, 2026
Factory status: pr-open
test: a failed launch clears earlier items and a hung notifier stops …
fix: a failed launch clears earlier items and a hung notifier stops n…