AntFleet

Anatomy · d8976a54-1

Mode-switch trigger described inconsistently between docs and goals

mediumdocs-gapclosed in d49ad28
repo 53606958·PR #2·reviewed 1 week ago·closed 1 week ago

The vulnerable code

.claude/skills/heartbeat.md:27-27

27- FeeLocker > 5 DIEM → `claim-diem` due (scheduled at 12h but check if it ran)

The reasoning

Opus

Mode-switch trigger described inconsistently between docs and goals

mediumdocs-gaphigh
  • .claude/skills/heartbeat.md:27
  • memory/goals.json:22-26
  • wiki/flywheel.md:99
  • identity/SOUL.md:28
heartbeat.md says switch on 'total DIEM claimed ≥ 100' (a cumulative claimed metric), goals.json field is `buildModeOnTotal` (ambiguous: claimed? accumulated? current FeeLocker balance?), and flywheel.md says '100 DIEM total accumulated'. The milestone `accumulate-100-diem` description says 'Claim and stake 100 DIEM total on Venice AI'. These are four subtly different metrics (claimed-ever, currently-held, staked, accumulated). For an autonomous decision rule that flips the agent's entire spending posture, this ambiguity is dangerous: a heartbeat check could trigger build mode based on one definition while the SOUL/flywheel reasoning assumed another, prematurely depleting the agent's compute budget.

Recommendation

Define a single canonical metric (e.g., `currentStakedDIEM` or `lifetimeClaimedDIEM`), name it precisely in goals.json modeThresholds, and reference that exact field in every skill and wiki page that mentions the threshold.

GPT-5

Inconsistent reference path for MintDiemPresaleVault.sol across docs

mediumdocs-gaphigh
  • .claude/skills/build.md:31
  • memory/goals.json:23
Two different paths are provided for the same contract reference. One includes a repository prefix (liquid-protocol-v0/), the other does not. This will cause confusion for implementers following the build plan or browsing techRef, slowing work or causing mistaken edits in the wrong location.

Recommendation

Standardize the path in both places. If the contract lives in an external repo, include the full repository path (or a URL) consistently; if it is vendored locally, remove the external prefix and ensure the file exists here. Consider replacing paths with clickable links to the canonical source.

The agreement

Both frontier models flagged this within the same line range. AntFleet's unanimous gate fired — the finding posted on the PR. Closed in d49ad28.

The fix

27- FeeLocker > 5 DIEM → `claim-diem` due (scheduled at 12h but check if it ran)

Closure

Closed 1 week ago

SHA: d49ad285ecca6f6aeb180756fcc9bd7c00be8347

View closure receipt on GitHub →

Tweet thread template

tweet 1 of 8154 / 280

Two frontier models reviewed PR #2 on 53606958. Both found this bug: medium docs-gap: Mode-switch trigger described inconsistently between docs and goals

tweet 2 of 8119 / 280

The vulnerable code (.claude/skills/heartbeat.md:27-27): (full snippet at https://www.antfleet.dev/anatomy/d8976a54-1)

tweet 3 of 8280 / 280

What Opus saw: "heartbeat.md says switch on 'total DIEM claimed ≥ 100' (a cumulative claimed metric), goals.json field is `buildModeOnTotal` (ambiguous: claimed? accumulated? current FeeLocker balance?), and flywheel.md says '100 DIEM total accumulated'. The milestone `accumula…

tweet 4 of 8280 / 280

What GPT-5 saw: "Two different paths are provided for the same contract reference. One includes a repository prefix (liquid-protocol-v0/), the other does not. This will cause confusion for implementers following the build plan or browsing techRef, slowing work or causing mistak…

tweet 5 of 897 / 280

Both flagged the same line range. AntFleet's unanimous gate fired — the finding posted on the PR.

tweet 6 of 893 / 280

The fix landed in commit d49ad28: (view diff at https://www.antfleet.dev/anatomy/d8976a54-1)

tweet 7 of 881 / 280

AntFleet reviews every PR with two frontier models. Only unanimous findings post.

tweet 8 of 877 / 280

Full anatomy + reasoning + diffs: https://www.antfleet.dev/anatomy/d8976a54-1

Paste into X composer one tweet at a time. X has no multi-tweet intent API.