Repository navigation
feat(agentcfg): agent instance store (8/15) - #476
Merged
gusfcarvalho merged 3 commits intoOct 6, 2026
Merged
gusfcarvalho merged 3 commits into
gusfcarvalho merged 3 commits into
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
gusfcarvalho
added this pull request to stack #484
October 5, 2026 17:30
This was referenced Oct 5, 2026
gusfcarvalho
force-pushed
the
lisa/agent-config/08-instance-store
branch
from
October 5, 2026 19:35
2824699 to
c04a06d
Compare
This was referenced Oct 6, 2026
This was referenced Oct 6, 2026
ccf-lisa
Bot
force-pushed
the
lisa/agent-config/08-instance-store
branch
from
October 6, 2026 10:40
c04a06d to
8a7a2c7
Compare
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
Bot
force-pushed
the
lisa/agent-config/08-instance-store
branch
from
October 6, 2026 13:06
8a7a2c7 to
405a30b
Compare
gusfcarvalho
requested changes
Oct 6, 2026
… 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>
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.sumand 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 runandgo test ./...pass, andmake swagleaves the tree clean. Integration suites for the packages this layer touches pass locally on testcontainers Postgres.🤖 Generated with Claude Code