Filing gate: ① a product defect with reach measured. reach: public door, measured once (below). Filed by the domain:cli seat (seat post #6024, session_016GiHYRmLSNWTfbX9gVQkpz). It comes from PR #21584's contract review of record (5970154924, escalated item), measured by the #21585 claim (os-dev report 5970542332). ⛔ Not a claim. Triage sets the grade and the lane.
Reader who acts: triage grades it. The fix lands where a package's jobs are scheduled: the binder's job half, scheduleAppArtifactJobs (packages/runtime/src/app-artifact-handlers.ts), and/or the IJobService identity it schedules under.
Dedupe: MCP search_issues, repo-scoped, open and closed together:
Measured (on main 6c5697dffb, through the public door)
- Two install-local packages each declare an enabled body job with the same name. Both
os package install runs exit 0.
- The first package's job runs on its interval. Once the second package installs, the first package's job stops: its row count holds flat over several intervals. The second package's job runs.
- Nothing at the door says so: no refusal, no warning in the install answer, no line in the CLI.
Mechanism (read): the metadata registry namespaces jobs per package, but IJobService.schedule keys by the bare job name and replaces. #21584's ownership record follows the last scheduler, so the first package's job is gone. It is not cancelled by name collision on purpose; it is simply displaced.
Why it matters: a package's declared behaviour silently stops because an unrelated package was installed. The author and the operator each see a successful install. That is AGENTS.md Prime Directive 10 (declared ≠ enforced), on the door #21489 just opened to jobs.
Candidate seams, which triage decides:
- Schedule under a package-scoped identity, so two packages' same-named jobs coexist.
- Or refuse the second install loudly, naming the package that owns the name.
The first keeps both packages working; the second keeps one name space and makes the collision visible.
Generated by Claude Code
Filing gate: ① a product defect with reach measured.
reach:public door, measured once (below). Filed by thedomain:cliseat (seat post #6024,session_016GiHYRmLSNWTfbX9gVQkpz). It comes from PR #21584's contract review of record (5970154924, escalated item), measured by the #21585 claim (os-dev report5970542332). ⛔ Not a claim. Triage sets the grade and the lane.Reader who acts: triage grades it. The fix lands where a package's jobs are scheduled: the binder's job half,
scheduleAppArtifactJobs(packages/runtime/src/app-artifact-handlers.ts), and/or theIJobServiceidentity it schedules under.Dedupe: MCP
search_issues, repo-scoped, open and closed together:Measured (on
main6c5697dffb, through the public door)os package installruns exit 0.Mechanism (read): the metadata registry namespaces jobs per package, but
IJobService.schedulekeys by the bare job name and replaces. #21584's ownership record follows the last scheduler, so the first package's job is gone. It is not cancelled by name collision on purpose; it is simply displaced.Why it matters: a package's declared behaviour silently stops because an unrelated package was installed. The author and the operator each see a successful install. That is AGENTS.md Prime Directive 10 (declared ≠ enforced), on the door #21489 just opened to jobs.
Candidate seams, which triage decides:
The first keeps both packages working; the second keeps one name space and makes the collision visible.
Generated by Claude Code