Status: Non-normative architecture note
Target: Additive gabp/1 extension, expected as a repository minor release in the 1.x line
Purpose: Preserve the reasoning, terminology, and build order for attention-aware execution gating across GABP,
Lib.GAB, GABS, and game integrations such as RimBridgeServer. Although stored here for now, this note is intended as
shared cross-repository working memory rather than protocol-only specification text.
Normal request and tool errors already cover one important case: a bridge calls something, the mod fails it in-band, and the bridge receives that failure directly in the response.
That is not enough for AI-driven game automation.
In practice, a tool can return a success result while the game:
- logs an important error immediately after the response is sent
- transitions into a state that invalidates the agent's assumptions
- disconnects, stalls, or enters a long event after the bridge thinks the action succeeded
- produces repeated warning or error lines that matter operationally but should not be dumped verbatim into the model
When that happens, an AI agent often continues with its plan because the last direct request-response pair looked successful. The result is stale-state wandering: the agent can perform many follow-up reads or writes against a game state that is no longer trustworthy.
This note records the design direction chosen to address that failure mode.
The design must solve all of the following problems at once:
- Important game-side information must reach the bridge quickly enough to affect the next decision.
- The bridge must not depend on raw asynchronous notifications alone, because the host may not inject them into the model's active reasoning loop in time.
- The system must not flood the bridge or the model with raw logs during error bursts.
- The system must preserve causality when possible. A later burst of spam must not erase the association between an action and the important state change it triggered.
- Tool vendors should not need to hand-build protocol logic for every tool. Most integrations should get the mechanism "for free" from shared runtime layers.
- Define a first-class concept for important game-side information that can block further execution.
- Keep the feature additive within
gabp/1. - Separate low-volume control signals from high-volume diagnostics.
- Let the game-side integration decide what matters, because it has the most context.
- Let the bridge enforce a predictable execution gate once important state is open.
- Keep the API burden on Lib.GAB consumers low.
- Provide a build order that can be implemented and tested incrementally without losing the reasoning behind the design.
- Replacing ordinary GABP request or tool errors.
- Turning attention into a generic streaming log transport.
- Making every warning block execution.
- Standardizing every diagnostic detail in the protocol.
- Making rich output schemas a prerequisite for attention support.
- Requiring a new wire major version such as
gabp/2.
The feature should be named around attention or execution gating, not around generic "error support".
Reasons:
- GABP already supports normal request errors.
- Raw logs are diagnostics, not control signals.
- The new behavior is specifically about game-side information that can invalidate an agent's assumptions and therefore should influence execution ordering.
Using a distinct concept keeps three semantics separate:
- Request failure: the specific method call failed in-band.
- Diagnostics: logs, operation journals, and detailed debugging evidence.
- Attention: important state that the bridge should surface and potentially gate on before allowing more game-bound calls.
This feature should be treated as an additive 1.x extension, informally discussed as GABP 1.5.
That means:
- the wire version stays
gabp/1 - the change is additive and backward compatible at the protocol level
- schema and spec assets remain in the
1.0tree unless the repository later chooses a different1.xpublication layout - repository releases advance by SemVer minor version
This repository's current versioning policy already allows new optional fields, methods, event channels, and
capabilities within gabp/1. Attention fits that model.
The architecture splits the problem into two planes.
The control plane carries low-volume, summarized, actionable state:
- an attention item opened
- an attention item changed meaningfully
- an attention item cleared
- the bridge should block further game-bound execution until the item is acknowledged
This plane is small, bounded, and intended to drive behavior.
The diagnostics plane carries or exposes high-volume evidence:
- raw log entries
- operation journals
- detailed error context
- stack traces
- correlated history
This plane is not what should directly drive model behavior. It exists so the bridge or agent can inspect details after attention has been surfaced.
The bridge should never need to treat raw log lines as the primary control signal. It should consume a compact attention state and only fetch diagnostics when needed.
GABP standardizes the minimal cross-implementation contract:
- how attention capability is discovered
- how a bridge can fetch current attention state
- how a bridge can acknowledge attention
- how attention changes can be emitted as events
Lib.GAB should hide protocol and runtime mechanics from most tool vendors:
- registering any core attention methods or event channels
- buffering current attention state
- coalescing and sequencing updates
- exposing helper APIs for opening, updating, and clearing attention
- making opt-in execution gating possible without changing every tool implementation
The game integration layer, such as RimBridgeServer, decides semantics:
- what should count as attention
- what severity is blocking
- whether the current game state should be treated as invalidated
- how many details should be included in the summary
- which diagnostics tools remain usable while attention is open
The bridge layer, such as GABS, enforces behavior:
- subscribe to attention events when available
- cache the latest open attention state per game
- block further game-bound calls when a blocking attention item is open
- expose bridge-facing ways to inspect and acknowledge the item
Blocking only mutating calls is not sufficient.
If important game-side information says the current state is no longer trustworthy, the model should not continue issuing many read calls either. The bridge should gate all game-bound calls for that game while blocking attention is open, except for an explicit allowlist.
Typical allowlisted calls will include bridge diagnostics such as:
- inspecting current attention
- acknowledging current attention
- checking basic bridge or game connection status
- reading diagnostics intentionally chosen by the game integration
Attention events should still be pushed asynchronously for low-latency visibility.
However, the authoritative control mechanism is the bridge-side gate at the next game-bound call boundary. This avoids depending on the AI host to immediately inject asynchronous notifications into the model's active plan.
Important information should be captured early and stored in a bounded state machine, but rendered to the model late and compactly.
That means:
- the integration records or updates attention as soon as it knows something important happened
- the bridge stores the current item
- the model sees a compact summary when a call is blocked or when the originating call returns with related attention
The default delivery unit should not be "the last N raw error lines".
Raw tail windows have poor behavior:
- they lose the real root cause during spam
- they destroy causality
- they force the model to process repeated noise
Instead, the default summary should be bounded and coalesced:
- max severity
- whether execution is blocked
- whether state is invalidated
- causal operation id when known
- total urgent entry count
- unique signature count
- a small representative sample
- cursors into the diagnostics plane for deeper inspection
The bridge should not treat "retrying the same call" as implicit acknowledgement.
An explicit ack step makes the control flow unambiguous:
- the agent has seen the item
- the bridge can prevent accidental loops
- the system can avoid duplicating the same attention content unpredictably
The protocol and runtime should preserve whether a blocked call actually executed.
Required distinction:
- if blocking attention is already open before dispatch, the bridge should block the call and report that it was not executed
- if attention opens during or immediately after execution, the bridge should return the real tool result and attach or reference the related attention item
The system should never claim that a mutating call "did not execute" if it in fact already ran.
Attention content may surface at more than one decision point:
- the originating call may complete and report related attention
- a later game-bound call may be blocked by that same open attention item
That should not be modeled as two unrelated alerts.
Instead, the system should prefer a stable attention identity:
- open one attention item with a stable
attentionId - let the originating call reference that item when relevant
- let later blocked calls reference the same item instead of replaying raw diagnostics as if they were new information
This keeps retries, acknowledgements, and recovery behavior predictable.
This section is architectural guidance, not final normative wire text.
The recommended first protocol surface is deliberately small.
Support should be discoverable through existing capability surfaces instead of a new wire major version.
Candidate additions:
attention/currentincapabilities.methodsattention/ackincapabilities.methods- one or more attention event channels in
capabilities.events
This avoids changing the envelope model and keeps the feature additive.
Recommended core methods:
attention/current- returns the current open attention item, if any
attention/ack- acknowledges the currently open attention item or a specific attention id
An implementation MAY expose richer attention helpers, but those two are the minimum useful core methods.
Recommended canonical channels:
attention/openedattention/updatedattention/cleared
An implementation MAY collapse these into a smaller event surface if needed, but explicit lifecycle channels are easier to reason about and test.
The current attention payload should be compact and behavior-oriented.
Recommended fields:
attentionIdstateseverityblockingstateInvalidatedsummarycausalOperationIdcausalMethodor tool/capability identifieropenedAtSequencelatestSequencediagnosticsCursortotalUrgentEntriessample
The protocol should not require raw stack traces or full log tails in the attention object.
The protocol change should be additive.
Older implementations that do not know attention support will continue to:
- use
gabp/1 - ignore unknown event channels because they never subscribe to them
- respond with method-not-found if a bridge calls attention methods without checking capabilities first
Newer bridges must therefore feature-detect support before relying on it.
Lib.GAB should remain source-compatible and mostly behavior-compatible by keeping the feature additive and opt-in.
Preferred compatibility rules:
- do not change existing tool registration signatures
- do not require tool vendors to return special response types
- do not enable global gating behavior implicitly for legacy integrations
- do provide helper APIs and default runtime wiring for integrations that opt in
Most tool vendors should not need to know the attention protocol at all.
The ideal experience is:
- tool authors keep defining tools normally
- the integration layer or Lib.GAB runtime decides what events and logs should open attention
- only advanced integrations supply a custom attention classifier or summary policy
The one thing intentionally deferred is a public cross-mod API for third-party tools or mods to publish first-class attention items directly. The current rollout keeps attention ownership centralized in the integration layer until that extension surface is designed more deliberately.
Lib.GAB should provide a reusable attention manager or equivalent runtime abstraction.
Recommended responsibilities:
- track current open attention item
- accept updates from the integration layer
- emit attention lifecycle events
- expose
attention/currentandattention/ack - optionally support a bridge-aware gating hook for servers that want to enforce local policies
Recommended optional extension points:
- an attention classifier interface
- a summary renderer interface
- a configuration switch to enable or disable the feature
Game-aware integrations should:
- classify logs and operation events into attention-worthy or non-attention-worthy categories
- correlate items with operation ids when possible
- summarize bursts instead of forwarding raw tails
- expose detailed diagnostics through existing journal and log tools
Bridge implementations should:
- subscribe to attention channels when present
- persist the latest open item per connected game
- enforce a call gate while blocking attention is open
- expose inspection and acknowledgement commands to the AI host
- avoid consuming raw diagnostic streams as the primary control signal
Attention support should not be blocked on perfect output-schema coverage.
Current AI-driven tool use can work well with underspecified response bodies as long as:
- tool inputs remain strict and machine-parseable
- tool descriptions remain semantically clear
- important asynchronous state is surfaced reliably through attention and execution gating
This asymmetry matters:
- AI consumers often handle semantically clear but underspecified output well
- AI producers are much less reliable when input contracts are underspecified
That is why attention/execution gating is the primary reliability investment, while richer output metadata is secondary.
That leads to the following guidance:
- keep attention/execution gating as the primary reliability investment
- treat richer output metadata as an optional ergonomics improvement
- avoid overloading the main tool description with too much return-shape detail when a better metadata slot is available
Because this note spans Lib.GAB, RimBridgeServer, and related annotation/doc-generation layers in addition to GABP itself, it is reasonable to record adjacent implementation guidance here when it helps prevent design drift.
One such adjacent improvement is an optional free-text result description, which is a reasonable additive design when an implementation wants better semantic separation without requiring full field-level response schemas everywhere.
That field would be intended for short semantic return affordances such as:
- "returns a log cursor plus recommended
rimbridge/list_logsarguments for consuming future job lines" - "returns actionable UI target ids for the requested surface"
- "returns the saved screenshot path plus optional target metadata"
Recommended rules:
- keep the main tool description focused on what the tool does and when to use it
- keep any result description focused on what a successful result means or enables next
- keep field-level schema annotations optional and independent
- when both exist, prefer rendering result description as a
Returnssection in human-facing docs and as the rootdescriptionof any emittedoutputSchema
Additional guidance:
- if a shared runtime already supports field-level response metadata such as
ToolResponse, treat a result description as complementary rather than as a replacement - if one implementation prefers source generators or typed DTO reflection to populate response metadata, that is an authoring convenience, not a protocol requirement
- if generated docs currently render only descriptions and parameters, that documentation gap is a valid reason to add a result-description field without treating it as a full output-schema redesign
This is complementary to attention support, not part of the minimum protocol work required to deliver execution gating.
The likely implementation homes for that follow-on are:
Lib.GAB, if the shared tool attribute model should grow a result-description fieldRimBridgeServer.Annotations, if the lightweight shared annotation package should expose the same field to third-party mod authors- RimBridgeServer documentation generators, if human-facing tool references should render a separate
Returnssection instead of forcing that information into the main description
The steps below are intentionally ordered so each stage is testable before the next one begins.
Deliverables:
- this architecture note
- terminology agreement around "attention" and "execution gating"
- explicit decision that the feature is additive within
gabp/1
Validation:
- repository review and sign-off
- confirm that the intended feature does not require a wire-major change
Deliverables:
- update
SPEC/1.0/registry.mdwith the provisional method and event names - update
SPEC/1.0/gabp.mdwith non-breaking normative additions for discovery, methods, and event lifecycle - decide the canonical attention object field names
Validation:
- spec review against existing
gabp/1compatibility rules - confirm no existing method or event naming conflicts
Deliverables:
- method schemas for
attention/currentrequest and response - method schemas for
attention/ackrequest and response - event schemas or event payload schemas for attention lifecycle channels
- example messages in
EXAMPLES/1.0/ - valid and invalid fixtures in
CONFORMANCE/1.0/ - updated schema packages for JS, Go, and .NET
Validation:
- schema validation in CI
- package sync verification
- conformance examples passing against the updated schema set
Deliverables:
- update
asyncapi.yamlfor attention lifecycle channels - update the root
README.md - update
SPEC/1.0/README.md - add bridge and mod guidance to
SPEC/1.0/ai-implementation.mdif appropriate - update release notes and versioning-facing docs as needed
Validation:
- rendered documentation review
- link and navigation check
Deliverables:
- an internal attention manager
- additive APIs or builder options
- default event emission
attention/currentattention/ack- no change to existing tool handler signatures
Validation:
- Lib.GAB unit tests for open, update, clear, and ack flows
- backward-compatibility tests proving legacy tool registration still works unchanged
Deliverables:
- runtime documentation for enabling attention support
- examples for opening and clearing attention
- clear guidance that ordinary tool vendors usually do not need to participate directly
- guidance on when to choose blocking versus advisory attention
Validation:
- documentation review with at least one integration consumer
Deliverables:
- a first real integration, expected to be RimBridgeServer
- classification policy over logs and operation events
- bounded summaries with causal correlation
- diagnostics retained separately from attention summaries
Validation:
- integration tests for:
- single error after successful action
- repeated identical log spam
- state-invalidating event
- non-blocking advisory event
- ack and clear flows
Deliverables:
- subscribe to attention channels when supported
- cache the current attention item per game
- expose bridge-level inspection commands or diagnostics
Validation:
- end-to-end tests proving GABS receives attention updates correctly
- compatibility tests against games without attention support
Deliverables:
- block further game-bound calls while blocking attention is open
- define an allowlist for inspection, acknowledgement, and essential diagnostics
- return a compact blocked result that references the current attention item instead of replaying raw logs
Validation:
- end-to-end tests proving:
- the next game-bound call is blocked
- allowlisted calls still work
- ack clears the gate
- repeated retries do not create ambiguous duplicate flows
Deliverables:
- GABS documentation telling AI agents how to react to blocked calls
- developer guidance for bridge implementers
- user-facing docs that explain why a game may refuse further actions until attention is acknowledged
Validation:
- smoke-test prompts or scripted AI flows that demonstrate recovery behavior
Deliverables:
- bounded queue or state machine rules for attention updates
- explicit coalescing policy
- retention and replacement rules when many attention-worthy events occur
- bridge behavior when the game emits updates faster than they can be consumed
Validation:
- stress tests with synthetic log spam
- tests confirming that diagnostics remain inspectable while the attention summary stays compact
Deliverables:
- changelog entry
- release notes
- migration notes for Lib.GAB users
- updated example integrations
Validation:
- release checklist review
- confirm older peers still interoperate with feature detection
Deliverables:
- decide whether
Lib.GABandRimBridgeServer.Annotationsshould expose an optional result-description field - update RimBridgeServer and similar human-facing doc generators to render a separate
Returnssection when that field exists - optionally map that text to the root
descriptionof emittedoutputSchemaobjects - keep field-level response metadata such as
ToolResponseoptional
Validation:
- confirm that existing tools remain source-compatible
- confirm that tool descriptions become simpler where they previously had to carry result affordances
- confirm that the attention/gating feature remains fully usable without adopting the optional result-description field
This section turns the architecture into a concrete multi-repository implementation plan.
The intended repositories are:
GABPLib.GABRimBridgeServer.AnnotationsRimBridgeServerGABS
The goal is not to update all of them blindly at once. The goal is to move them in an order that keeps every stage testable and keeps context loss manageable.
Primary purpose:
- reserve names
- freeze the minimal wire contract
- provide examples and conformance fixtures that unblock implementation in the other repositories
Likely touchpoints:
SPEC/1.0/gabp.mdSPEC/1.0/registry.mdSPEC/1.0/ai-implementation.mdSPEC/1.0/README.mdREADME.mdCHANGELOG.mdasyncapi.yaml- schema, example, and conformance assets under the repository's normal
1.0layout
Concrete tasks:
- define canonical method names for
attention/currentandattention/ack - define canonical event names for attention lifecycle updates
- define the minimum attention object shape
- define capability-discovery expectations
- define ack semantics precisely enough that bridges can implement gating without guessing
- add examples for:
- no open attention
- blocking attention opened
- acknowledgement clearing the gate
- a blocked follow-up call referencing the same
attentionId
- add conformance fixtures for valid and invalid payloads
- update AI-facing guidance so bridge and host implementers know that async push is informative but the call gate is authoritative
Exit criteria:
- canonical names are frozen for the first implementation pass
- examples are specific enough that Lib.GAB and GABS can code against them
- there is no unresolved ambiguity about whether blocked calls executed
Primary purpose:
- hide the new mechanics from ordinary tool authors
- emit and expose attention state in a reusable way
- keep existing tool registration ergonomics intact
Likely touchpoints:
Lib.GAB/Tools/ToolAttribute.csLib.GAB/Tools/IToolRegistry.csLib.GAB/Tools/ToolRegistry.csLib.GAB/Server/GabpServer.csREADME.mdLib.GAB.Example/Lib.GAB.Tests/
Concrete tasks:
- add an internal attention manager or equivalent runtime abstraction
- add support for attention lifecycle events
- add
attention/current - add
attention/ack - add any opt-in configuration needed to enable attention support without changing legacy tool handlers
- preserve existing tool registration signatures
- add unit tests for open, update, clear, and ack flows
- add transport tests proving attention metadata is surfaced correctly
- add or update examples showing how an integration opens blocking attention versus advisory attention
Optional parallel follow-on:
- add an optional result-description field to the shared tool metadata model
- map that field to the root
descriptionof emittedoutputSchema - keep field-level
ToolResponsemetadata optional
Exit criteria:
- a legacy Lib.GAB tool server still works unchanged
- an opt-in Lib.GAB server can expose attention methods and events
- tests prove stable
attentionIdreuse and correct timing semantics
Primary purpose:
- keep the lightweight shared annotation package aligned with any additive metadata improvements chosen for tool documentation
Likely touchpoints:
src/RimBridgeServer.Annotations/ToolAnnotations.csREADME.md
Concrete tasks:
- decide whether to mirror any new optional result-description field from Lib.GAB
- keep the package minimal and metadata-only
- document clearly that response-field annotations remain optional
Important constraint:
- this workstream must not block attention/execution gating
- if result-description work is deferred, that is acceptable
Exit criteria:
- package remains source-compatible for existing mod authors
- any additive metadata change is documented and clearly optional
Primary purpose:
- supply game-aware classification, coalescing, causality, and diagnostics retention
Likely touchpoints:
Source/RimBridgeEventRelay.csSource/RimBridgeLogs.csSource/RimBridgeRuntime.csSource/RimBridgeStartup.csSource/DiagnosticsCapabilityModule.csSource/RimWorldWaits.cs- any new attention-classification or summary component added during implementation
README.mddocs/tool-reference.mdTools/RimBridgeServer.ToolDocGen/Program.cs
Concrete tasks:
- classify log and operation events into blocking, advisory, or ignorable categories
- correlate attention with operation ids or capability ids when possible
- maintain bounded summaries rather than forwarding raw log tails
- preserve detailed diagnostics in existing journals and log tools
- emit one stable attention item when a causal burst belongs together
- ensure blocked-vs-already-executed semantics are preserved when attention opens during or after a tool call
- decide which diagnostics remain usable while attention is open
- add integration tests for:
- success followed by blocking error
- repeated identical error spam
- state-invalidating event
- advisory-only event
- ack and clear flow
Optional parallel follow-on:
- simplify tool descriptions that currently carry result affordances
- render a separate
Returnssection in generated docs if result-description metadata exists
Exit criteria:
- RimBridgeServer can emit realistic attention events under controlled test scenarios
- diagnostics remain inspectable without dumping raw spam into the control plane
- tool authors do not need to write attention protocol code by hand
Primary purpose:
- observe attention reliably
- enforce the execution gate
- expose a predictable recovery flow to the AI host
Likely touchpoints:
internal/gabp/client.gointernal/mcp/gabp_connector.gointernal/mcp/stdio_server.gointernal/mcp/types.goREADME.md- tests under
internal/gabp/andinternal/mcp/
Concrete tasks:
- subscribe to attention events when supported
- cache the current open attention item per connected game
- expose bridge-facing inspection and acknowledgement commands
- initially support observation-only mode before enabling the gate
- add the gate so blocking attention stops further game-bound calls
- define the allowlist for inspection, ack, status, and essential diagnostics
- return blocked-call results that reference the stable current
attentionId - avoid replaying raw logs as if every blocked call were a brand-new failure
- add end-to-end tests for:
- observation without gating
- gating on the next game-bound call
- allowlisted calls during a gate
- ack clearing the gate
- repeated retries staying stable and non-ambiguous
Exit criteria:
- GABS can interoperate with games that do and do not support attention
- blocked-call results are deterministic and explain what the host should do next
- gating works for all game-bound calls, not only mutations
The implementation should proceed in phases with explicit blockers.
Repositories:
GABP
Must finish first:
- canonical names
- attention object shape
- ack semantics
- blocked-vs-executed timing semantics
Reason:
- every other repository needs these semantics to avoid inventing slightly different local contracts
Repositories:
Lib.GAB
May overlap partially with late Phase A work if one person owns the final naming decisions.
Blocked by:
- unresolved GABP method/event naming
- unresolved ack semantics
Produces the first reusable implementation target for downstream integrations.
Repositories:
RimBridgeServer
Can begin once Lib.GAB has a stable enough attention surface to code against.
Safe parallel work:
- classifier design
- burst summarization policy
- diagnostics-retention rules
Blocked by:
- missing Lib.GAB attention hooks
Repositories:
GABS
The bridge should first learn to observe and cache attention correctly before it starts refusing calls.
Blocked by:
- a working attention emitter from Lib.GAB and at least one integration
Repositories:
GABS- optionally
RimBridgeServerif allowlisted diagnostics or examples need tuning
Blocked by:
- successful observation tests
- stable ack behavior
Repositories:
Lib.GABRimBridgeServer.AnnotationsRimBridgeServerGABSGABP
This phase is intentionally last because it should not delay the core reliability feature.
Safe parallel work throughout:
- result-description design
- doc-generator improvements
- README and migration-note updates
Explicit non-blocker:
- richer output metadata must not delay attention/execution gating
The combined effort should stop and validate at each checkpoint before moving on.
Required state:
- this note reflects the current decisions
- naming and semantics disputes are resolved enough to start editing code
Evidence:
- reviewed architecture note
- explicit agreement on attention terminology and timing semantics
Required state:
- GABP method names, event names, and object fields are written down in spec form
Evidence:
- updated spec docs
- updated registry and AsyncAPI assets
- examples and conformance fixtures drafted
Required state:
- Lib.GAB can expose attention methods and events
- legacy tool servers still work
Evidence:
- Lib.GAB unit tests
- transport tests
- backward-compatibility tests
Required state:
- RimBridgeServer can open, update, clear, and summarize attention
Evidence:
- targeted integration tests
- manual or automated scenario proving a successful tool can still produce related attention immediately after execution
Required state:
- GABS subscribes, caches, and exposes attention correctly
- no gating yet
Evidence:
- bridge observation tests
- compatibility tests with games lacking attention support
Required state:
- blocked calls are refused before dispatch when blocking attention is open
- allowlisted diagnostics still work
Evidence:
- end-to-end gating tests
- tests proving the same
attentionIdis reused across originating-result and blocked-call flows
Required state:
- the host can inspect attention
- the host can acknowledge it
- the next call proceeds correctly afterward
Evidence:
- smoke-test prompts or scripted agent flows
- documentation that tells the host or operator what to do
Required state:
- any result-description work remains additive and optional
Evidence:
- source compatibility preserved
- generated docs improved where useful
- no dependency from the core attention flow onto result-description adoption
The exact CI wiring may evolve, but the current repository surfaces already suggest these concrete verification entry points:
GABP- run schema and example validation from the existing schema package and conformance assets
- current references:
CONFORMANCE/1.0/README.mdpackages/js/gabp-schemas/package.jsonpackages/go/schemas/sync.sh
Lib.GAB- run
dotnet test Lib.GAB.sln
- run
RimBridgeServer.Annotations- run
dotnet build RimBridgeServer.Annotations.sln
- run
RimBridgeServer- run
dotnet test RimBridgeServer.sln - regenerate tool docs with
scripts/generate-tool-reference.shwhen tool metadata or doc-rendering changes - use the live-smoke test project or equivalent manual RimWorld scenario for end-to-end attention checks
- run
GABS- run
make testorgo test ./...
- run
When checkpoints rely on live game behavior, always pair automated tests with at least one explicit scenario covering:
- successful tool result followed by blocking attention
- blocked follow-up game-bound call
- inspection and acknowledgement
- successful recovery after ack
Every repository needs some documentation work, not only code changes.
- protocol docs
- examples
- conformance fixtures
- AsyncAPI updates
- release notes
- README updates
- migration notes
- example server updates
- clear guidance that ordinary tool authors usually do not need direct attention logic
- README updates if any new additive metadata field is introduced
- explicit statement that such metadata is optional
- README updates for integrators and operators
- docs explaining how attention relates to logs and diagnostics
- generated tool docs updates if result-description work is adopted
- README guidance for blocked calls
- operator-facing explanation of why a game may refuse further actions until attention is acknowledged
- host-facing guidance on inspection and recovery
This note is intended to survive context loss. A fresh session is safe once the current checkpoint is recorded clearly enough.
Before ending work on any day or before intentionally starting a new session, update this note or an adjacent tracking artifact with:
- the highest completed checkpoint
- the next intended checkpoint
- which repositories have landed code versus only planned work
- any frozen names or payload fields that must not be re-debated casually
- any blockers or unresolved open questions
- the latest known test status per repository
Minimum safe handoff rule:
- if another session can read this note plus the touched repository diffs and continue without relying on hidden chat context, the handoff is good enough
Practical rule:
- finish at a checkpoint boundary whenever possible
- if stopping mid-checkpoint, record exactly what remains and what has already been validated
- Should
attention/currentreturn only the current item, or also a short recent history? - Should
attention/ackacknowledge only the current item, or accept an explicitattentionId? - Should advisory and blocking attention share the same object shape?
- Which diagnostics methods, if any, should be recommended as gate-exempt in bridge guidance?
- Should the bridge be allowed to proceed automatically for non-blocking attention, or only surface it to the AI host?
These questions should be resolved before schemas and conformance fixtures are finalized.
The recommended direction is:
- standardize a small additive attention feature within
gabp/1 - keep diagnostics separate from control signals
- let game integrations decide what matters
- let bridges enforce a predictable execution gate
- hide most of the machinery inside Lib.GAB and bridge runtimes rather than inside individual tools
- sequence the rollout so every repository change is locally testable before the next layer depends on it
- keep richer output metadata optional and secondary to the core reliability work
That gives AI systems a reliable way to stop and reconsider when important game-side information appears, without turning the protocol into a raw log transport or forcing every tool vendor to implement custom protocol behavior.