Skip to content

feat(agentcfg): agent instance store (8/15) - #476

Merged
gusfcarvalho merged 3 commits into
lisa/agent-config/07-revision-storefrom
lisa/agent-config/08-instance-store
Oct 6, 2026
Merged

gusfcarvalho merged 3 commits into
lisa/agent-config/07-revision-storefrom
lisa/agent-config/08-instance-store

Conversation

@ccf-lisa

@ccf-lisa ccf-lisa Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Part 8/15 of the agent remote-configuration stack

This stack splits #465 into reviewable layers of at most ~1000 changed lines each (counted without docs/, go.sum and Markdown). The last layer's tree is identical to #465, which already has its review history.

Stacked on #475 (lisa/agent-config/07-revision-store). Review and merge in order.

What's in this layer

Eighth layer of the agent remote-configuration stack (split from #465): the ccf_agent_instances model and the agentcfg instance API: UpsertReport (config reports) and TouchFromHeartbeat, the per-agent instance cap (prune-eligible rows don't count; the oldest stale instance is replaced; a short-lived cap-reached cache for heartbeats), ListInstances/GetInstance, and the derived status/sync-status/staleness rules.

Size: +1164 -4 = 1168 changed lines (without docs/go.sum).

Verification

Each layer builds on its own: go build, go vet (also with -tags integration), golangci-lint run and go test ./... pass, and make swag leaves the tree clean. Integration suites for the packages this layer touches pass locally on testcontainers Postgres.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: a2588934-36e3-4804-9b2f-f4459ec32d0d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gusfcarvalho gusfcarvalho left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ccf-review: APPROVE

no findings.

Stack (gh stack 484): #469 → #470 → #471 → #472 → #473 → #474 → #475 → #476 → #477 → #478 → #479 → #480 → #481 → #482 → #483

ccf-lisa Bot and others added 2 commits October 6, 2026 09:09
Eighth layer of the agent remote-configuration stack (split from #465): the ccf_agent_instances model and the agentcfg instance API: UpsertReport (config reports) and TouchFromHeartbeat, the per-agent instance cap (prune-eligible rows don't count; the oldest stale instance is replaced; a short-lived cap-reached cache for heartbeats), ListInstances/GetInstance, and the derived status/sync-status/staleness rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The comment implied the unpaginated list was cheap because normalizeReport
bounds the summary columns. State the actual worst case: about 3 MiB per
instance across the capped columns, times the capped plus not-yet-pruned
rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ccf-lisa
ccf-lisa Bot force-pushed the lisa/agent-config/08-instance-store branch from 8a7a2c7 to 405a30b Compare October 6, 2026 13:06

@gusfcarvalho gusfcarvalho left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ccf-review: REQUEST_CHANGES

1 Must-fix.

Stack (gh stack 484): #469 → #470 → #471 → #472 → #473 → #474 → #475 → #476 → #477 → #478 → #479 → #480 → #481 → #482 → #483

Comment thread internal/service/relational/agentcfg/service.go Outdated
… columns

ListInstances loaded every instance's summary columns (about 3 MiB each in
the worst case), so one agent credential could inflate the admin instance
list past 1 GiB. It now returns one page (at most InstancesPageLimit = 25
rows, same order: last_seen_at DESC, instance_id) and the total.
CountInstances counts every instance by freshness, status and sync status
from the scalar columns only, using IsStale, DeriveStatus and
DeriveSyncStatus, so fleet-wide counts no longer need the full list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ccf-lisa
ccf-lisa Bot requested a review from gusfcarvalho October 6, 2026 14:25

@gusfcarvalho gusfcarvalho left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ccf-review: APPROVE

no findings.

Stack (gh stack 484): #469 → #470 → #471 → #472 → #473 → #474 → #475 → #476 → #477 → #478 → #479 → #480 → #481 → #482 → #483

@gusfcarvalho
gusfcarvalho merged commit 6040f74 into main Oct 6, 2026
5 checks passed
@gusfcarvalho
gusfcarvalho deleted the lisa/agent-config/08-instance-store branch October 6, 2026 15:14
gusfcarvalho pushed a commit that referenced this pull request Oct 6, 2026
… (9/15) (#477)

* feat(agentcfg): validation bases, instance pruning and agent deletion

Ninth layer of the agent remote-configuration stack (split from #465): ValidationBases (the instances a save validates against, R48) and the bounded PreviewBases set, the River job that prunes stale instances (CCF_AGENT_INSTANCE_PRUNE_*), and deleting an agent now deletes its instances and config revisions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agentcfg): take the instance mode from the validated report mode

reportedRemote preferred the reported remote-config block's mode, which
the API does not validate, over the report's validated top-level mode,
so preview could classify with a different or unknown mode than the one
ValidationBases selected on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(worker): take the prune schedule fallback from config.DefaultAgentsConfig

* fix(agentcfg): load and decode each distinct validation base once

ValidationBases loaded base_config for every fresh apply-mode instance (up to
the instance cap, each up to 4 MiB), so a save's cost followed the instance
count. Group the set by base content in SQL (SHA-256 of the jsonb text),
load and decode one base per group in the same read-only snapshot, and share
it across the group's instances. Each instance is still returned with its own
fields and remote-config, plus a BaseKey so callers validate a base once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agentcfg): list instances by page in the prune test

ListInstances is paginated now (#476); TestPruneInstances reads its six
instances from the first page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: ccf-lisa[bot] <286799724+ccf-lisa[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant