Skip to content

[finding] Two install-local packages that declare the same job name: the second install silently replaces the first package's job, which stops running, and the door says nothing #21602

Description

@objectstack-fleet

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)

  1. Two install-local packages each declare an enabled body job with the same name. Both os package install runs exit 0.
  2. 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.
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:clipriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions