Skip to content

[factory] Dependency-park comment ignores its own dedup marker and reposts every sweep #310

Description

@khaliqgant

Summary

The dependency-park comment carries a stable dedup marker and posts anyway on every sweep, so a parked issue accumulates identical comments indefinitely.

Observed

AgentWorkforce/cloud#3046, three byte-identical comments from agent-relay-code[bot]:

2026-08-21T04:41:49Z
2026-08-21T06:17:00Z
2026-08-21T08:03:46Z
<!-- factory-dependency-park:v9z64o --> Factory parked this issue because declared
dependencies are unresolved. Blocked by: AgentWorkforce/cloud#3032,
AgentWorkforce/cloud#3043, AgentWorkforce/cloud#3045, AgentWorkforce/relayfile#379

Same marker hash (v9z64o), same blocker list, same text.

Why this is a bug and not just noise

The marker is built as factory-dependency-park:${stableHash(signature)}, which only makes sense as a deduplication key — a stable hash of the park signature exists precisely so a repeat park can recognise its own prior comment and skip. It is being computed and emitted, but evidently not read back before posting.

Consequences:

  • A long-parked issue accrues one identical comment per sweep. At the observed cadence that is roughly a comment every 1.5–2 hours, indefinitely, for as long as the dependency stays unresolved.
  • It writes to GitHub on every sweep for no state change, which is avoidable API traffic on the App's budget.
  • It buries genuine human discussion under repeated bot text, on exactly the issues that are blocked and most need a human to read them.

Expected

Before posting, search the issue's existing comments for the same factory-dependency-park:<hash> marker. If a comment with the identical hash is already present, skip. If a comment with a different park hash is present, the blocker set has changed — update that comment in place, or post once and leave a single current park comment rather than a growing list.

Tests

  • must-not-fire: parking the same issue twice with an unchanged blocker set produces exactly one comment. Must fail before the change.
  • must-fire: parking with a changed blocker set surfaces the new set — either as an edit or a single replacement comment — so a genuinely different park is never silently swallowed by dedup.
  • the marker hash is stable across processes and restarts, so dedup survives a container roll.

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