Skip to main content

CatalogTruncatedEvent

@forge/monorepo


@forge/monorepo / backend/src / CatalogTruncatedEvent

Type Alias: CatalogTruncatedEvent

CatalogTruncatedEvent = EventBase<"catalog.truncated"> & object

Defined in: backend/src/core/events.ts:189

A catalogue did not fit its budget, and what was left out — REQ-045 (#204), task #210, AC-3 and AC-5.

This event is the guarantee. A truncated tool list is invisible from inside a run: the model is not told a tool was withheld, so it never calls it, and the transcript reads exactly like a run where the model chose not to. Every other failure at least looks like a failure; this one looks like a decision. So the names go in the log, in full, and #210's AC-7 is a test that deleting this event fails the build.

Names, not a count. "14 tools were dropped" tells a reader that something happened and nothing about whether it mattered; github_merge_pull_request tells them immediately.

Type Declaration

budgetTokens

readonly budgetTokens: number

catalog

readonly catalog: "tools" | "skills"

Which catalogue. One event rather than two, because the fact is the same fact and a reader asking "what was withheld from this turn" should not have to know there are two mechanisms.

dropped

readonly dropped: readonly string[]

Every dropped tool, by name.

findable

readonly findable: boolean

Whether the model can still get to what was dropped.

find_tools makes a truncated tool catalogue a deferral; without it the same event describes a permanent removal, and a reader cannot tell which from the names alone. There is no find_skills, so a truncated skill catalogue is always false today — which is a fact worth having in the log rather than a field to leave off.

overBudget?

readonly optional overBudget?: boolean

Set when the protected set alone exceeds the budget — a misconfiguration, not the mechanism working.

A deployment in this state believes it capped its context and has not.

residentTokens

readonly residentTokens: number