Polytraders Dev Guide
internal
v3 spine Phase 1 · Shared contracts 9 demo-wired · 0 shadow-ready · 0 production-live · 100 pending · 109 total 15/33 infra tasks the plan status board

Governance template

Copy templates/governance-bot/ into the implementation repo. Fill in decide(). Run the fixtures.

Files

templates/governance-bot/
  README.md
  bot.ts
  config.schema.json
  default.config.json
  input.fixture.json
  expected.output.json
  tests.spec.ts

Bot interface bound

This template implements Bot<ReconcileTick, ReportEnvelope>. The contract is the canonical bot interface.

The only function you write

async decide(input: ReconcileTick, ctx: BotContext): Promise<ReportEnvelope> {
  const onchain = await this.fetchOnchain(input.scope);
  const internal = this.store.snapshot(input.scope);
  const diff = compare(onchain, internal);

  if (diff.matches) {
    return envelope(ctx, "GOV_RECONCILE_OK", "info", { scope: input.scope });
  }
  return envelope(ctx, "GOV_RECONCILE_MISMATCH", "critical", { scope: input.scope, diff });
}

What's already wired for you

Promotion checklist

  1. Implement decide().
  2. Run npm test — all four test classes must pass.
  3. Open a PR with the bot's spec page linked in the description.
  4. Promote through the modes ladder: stub → shadow → advisory → enforced.