Repository navigation
self-development: add review-derived agent conventions - #1249
Open
kelos-bot[bot] wants to merge 46 commits into
Open
kelos-bot[bot] wants to merge 46 commits into
kelos-bot[bot] wants to merge 46 commits into
Conversation
kelos-bot
Bot
force-pushed
the
kelos-config-update-latest
branch
from
July 15, 2026 18:06
09c630c to
33e9563
Compare
kelos-bot
Bot
force-pushed
the
kelos-config-update-latest
branch
from
July 27, 2026 18:10
33e9563 to
446a4b3
Compare
kelos-bot
Bot
force-pushed
the
kelos-config-update-latest
branch
7 times, most recently
from
August 14, 2026 18:10
0a910f5 to
8d4d143
Compare
kelos-bot
Bot
force-pushed
the
kelos-config-update-latest
branch
from
August 15, 2026 18:10
8d4d143 to
db0c2c7
Compare
kelos-bot
Bot
force-pushed
the
kelos-config-update-latest
branch
from
September 24, 2026 18:06
0997f47 to
f7e5c53
Compare
Broaden the lease-refresh rule in AGENTS.md and the Kelos development AgentConfig to cover every best-effort enhancement: a failed added lookup, optional-view inspection, or heartbeat degrades only that enhancement with a logged, visible diagnostic and a later retry, instead of aborting startup or discarding a primary result. Invalid configuration and required writes remain fail-fast. Add the matching check to the Kelos reviewer so it weighs this case against the existing fail-fast check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviews on three Session runtime and controller changes found waits and lifecycle gates with no guaranteed exit: an interaction's ready channel left open so interrupts stalled until timeout, forced interruption that waited unboundedly on a provider ignoring cancellation, a non-deadline interrupt error that left a draining Session interrupting, a recreated RoleBinding that revoked the access a drain needed, and background or housekeeping tasks that kept a Session active and blocked idle and update drains. Require waiters to be released on every exit path, bounded waits with escalation for external work, gates only on signals that terminate, and tests for failed, canceled, and never-finishing work. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviews of the Console background-task indicator found live runtime state that outlived the runtime it described: the background-task count stayed visible after the Session was suspended, and resuming restarted the elapsed-time timer for a turn from the stopped runtime before fresh runtime events arrived. Extend the UI lifecycle rule in AGENTS.md and the Kelos development AgentConfig to cover live runtime activity such as progress indicators and Session suspension/resume. Runtime-derived state must be cleared in current and cached views once the runtime is no longer valid, and tests must cover resume before fresh runtime events arrive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviews on three merged PRs found RBAC permissions or credentials that reached beyond the code that used them: cluster-wide Secret list/watch where named gets sufficed, an unused TaskSpawner RBAC marker on the Task controller, a GitHub token inherited by the whole integration-test step, and a privileged ServiceAccount token shared with an OAuth2 Proxy sidecar. Add a least-privilege rule to the project conventions and the Kelos development AgentConfig, and a matching security check to the reviewer prompt, which had raised the sidecar token only as an optional suggestion and missed the CI token. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two independent reviews of a Console change found a scroll-position control whose visibility refreshed only from scroll events. It was measured before a scheduled bottom anchor ran, so it flashed visible, and late image loads moved the bottom without a scroll event, so it stayed hidden. An earlier review found the same gap when a hidden view was revealed, which is the only case the existing rule named. Generalize the rule to recompute derived state after deferred programmatic scrolls and late content growth, and to test those changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kelos reviews on three recent PRs found that docs for new access or authentication features omitted risks operators must manage: a Session agent could switch its own ServiceAccount, a compromised Console could create RoleBindings granting permissions it holds, and removing a user from a GitHub organization or team left existing Console logins active. Each author fixed the gap by documenting it. Require docs for changes that grant permissions, authenticate users, or accept a trust boundary to state what a compromised component or permitted identity can reach and how existing access is revoked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…onversion Two PRs added v1alpha2-only fields whose values a v1alpha1 read-modify-write could drop. One preserved the field only on TaskSpawner templates and missed the Task itself, where immutable-spec validation then rejects the write-back. The other left new Task status fields unpreserved. Extend the latest-version API rule to require preserving such fields on every kind that carries them and testing the round trip for each kind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviews found unbounded fields that could push a size-limited payload over its limit: a workspace.changes event over the Console bridge's 8 MiB line limit, and per-user Session annotations that grow until the annotation limit rejects every write. The bounded-work rule covered only CR status aggregation. It now covers any message or object with a fixed size limit, requires counting every variable-length field's encoded size in one budget, and requires pruning or capping entries that accumulate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviews and a production defect found components that retried failures that could not succeed until an input changed. Reconcilers returned errors for an unsupported spec, a permanently invalid Task, and a foreign Service, so they requeued with backoff indefinitely. The Slack reporter re-posted a permanently rejected reply on every 30-second cycle. The Console re-sent read acknowledgments rejected with 403 on every poll. The existing rule covered only propagating transient errors so senders retry. Add the converse: report a permanent failure once where operators see it and stop retrying until the input changes. Reconcilers return without an error and re-enqueue from a watch. A referenced object that does not exist yet remains a wait with a fixed requeue, transient failures stay retryable, and tests cover both kinds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kelos-bot
Bot
force-pushed
the
kelos-config-update-latest
branch
from
October 19, 2026 18:12
d9ea9a4 to
963bf25
Compare
Reviews found tests whose result depended on the real clock. One compared a hard-coded date with time.Now, so it passed only after that date. Others waited for asynchronous work with fixed sleeps, which fail on a slow runner and can pass before the behavior under test happens. Authors replaced them with clock-relative fixtures, Consistently, or a deadline-bounded poll. An agent-authored change shipped with the sleeps, and the Kelos reviewer approved both that change and the hard-coded date. Require clock-relative fixtures or an injected clock and condition-based waits, and add the check to the reviewer at P2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The maintainer kept new AgentConfig skill files out of v1alpha1 instead of preserving them through conversion, and the merged change states the drop in the reference. Several other v1alpha2-only webhook filter criteria are already documented as not preserved across a v1alpha1 round trip. Keep preservation as the default, but when the maintainer decides not to carry a field through older versions, skip the preservation and document the drop in the field's reference entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
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.
What type of PR is this?
/kind cleanup
What this PR does / why we need it:
Adds evidence-backed conventions and workflow safeguards to the project
instructions, shared Kelos development AgentConfig, and reviewer prompts.
Compare forwarded streams exactly. PR Stream agent output through kelos-capture instead of writing to /tmp #1189's
review comment
found that per-line substring assertions could not detect dropped, duplicated,
or reordered output. The printer/formatter test rule now also requires full
normalized equality for stream-forwarding tests.
Scope autonomous triggers to trusted authors and intended subjects. PR
Add kanon-development TaskSpawners for autonomous kanon development #1241 was corrected because a
review trigger lacked an author filter
and a
PR-only command also matched issue comments.
The TaskSpawner convention now requires both author allowlists and
commentOnscoping where applicable.
Classify request failures by cause. PR feat: add WebhookGateway CRD for per-channel webhook auth and multi-instance GitHub #1238's reviews found that
TaskSpawner list errors silently returned success
and
all gateway
Geterrors became 404s.PR Support file attachments in Sessions #1630 then showed the broader form of the same mistake:
message matching mapped server-side storage failures to 400.
Error-to-status mappings must use typed or sentinel causes, reserve
4xxforclient-correctable failures, and return
5xxfor lookup, RBAC, storage, andtransport failures.
Honor reduced-motion preferences. PRs
#1481
and
#1482
independently added continuous running-state animation without a reduced-motion
fallback. New nonessential animation must retain a distinguishable static state
when motion is disabled.
Protect credentials in configuration and transport. PR feat: Add native OpenTelemetry (OTLP) support for metrics and traces #1559's
review
found authorization headers rendered from plaintext Helm values, while PR feat: add GitHub App auth to HTTP context sources #1564's
review
found that an HTTP endpoint exposed a GitHub App JWT. Credential-bearing values
must use Secret references, and their endpoints must use HTTPS unless explicitly
opted into insecure transport.
Protect state-dependent transitions from stale work. PR Add section choosers to the Session server #1548's
review
found that an old dialog request could mutate a newly opened Session dialog. PR
Allow Session interruption while draining #1618's
review
similarly required an interrupt to be revalidated against the snapped active turn.
PR Use inline session section selector #1649 then left a
finding
because an async failure path rendered a captured pre-request Session after
polling had refreshed the selected Session. PR Add Session goal and shell commands #1650 exposed the interaction-level
form of the same problem: a
stale goal notification could complete a new message,
interrupt could race goal startup,
completion used provider-global goal state,
and
goal control matched the wrong active turn kind.
PR Keep kelos logs -f open after empty streams #1654 then exposed the same precedence problem across independently updated
lifecycle signals: a
failed Pod was treated as retryable while Task status lagged,
and a
non-zero terminated container was also treated as retryable.
Async completions and controls must re-read current state, bind to the exact
operation identity and kind, and coordinate startup and handoff so stale work
cannot render or mutate another operation. When lifecycle signals disagree or
lag, terminal and failure evidence must be inspected before returning a
transient or retry decision.
Test behavior through the layer that owns it and assert the primary effect.
PR Add section choosers to the Session server #1548's same
review
found that source-fragment assertions did not exercise stateful UI behavior. PR
feat: Add optional Prometheus Operator PodMonitor to Helm chart #1560's
review
found that a render test never exercised the non-default namespace branch it
claimed to cover. PR Display and manage pending Session messages #1648's
review
also found that an exact minified CSS-rule assertion was brittle while failing
to exclude declarations that would restore the regression. PR Support file attachments in Sessions #1630 had a
download fake that discarded the requested attachment ID,
PR Monitor pull request checks in Sessions #1639 had an
end-to-end fixture that omitted the changed check-rollup response,
and PR Reduce Session GitHub API usage #1652 had a
command fixture that accepted any GraphQL query and could not detect duplicate calls.
PR Add Session goal and shell commands #1650 also had an
interrupt test that checked journal status without checking process death,
while PR Reduce Session GitHub API usage #1652 had a
periodic test whose blocking callback leaked its goroutine.
PR Keep kelos logs -f open after empty streams #1654's
test review
also found that new terminal, transient, and unknown lifecycle branches were
left unvalidated.
Tests must execute the owning layer and important non-default branches, assert
the real routed or lifecycle effect rather than a bookkeeping proxy, and make
appropriate static assertions on behavior instead of serialization details.
State-dependent decision tests must cover each relevant terminal, transient,
and unknown class plus combinations where status sources can lag one another.
Fakes, fixtures, and command shims must exercise changed response fields,
validate complete request shapes, reject unexpected calls, and expose call
counts when batching or request reduction is part of the contract. Background
goroutines and child processes must also be cancellation-aware and verified
stopped before the test returns.
Keep all documentation surfaces complete and consistent. Recent reviews
repeatedly found partial documentation updates: PR Show sessions waiting for input #1604
claimed header styling that was not implemented,
PR Track sticky issue validity verdicts #1611 left
per-spawner sections inconsistent with its overview,
PR Paginate Session terminal history #1613
removed documentation for still-supported flags,
and PR Add Session turn duration separator #1616
omitted newly observable terminal behavior.
Agents must search related overviews, component sections, tables, setup examples,
and command/flag references and update all affected mentions together.
Separate historical replay from live event handling. PR Paginate Session terminal history #1613's
review
found that older terminal pages could be rendered as continuations of the active
live stream and that duplicate history requests reused a cursor. PR Paginate Session web chat history #1621's
review
found that web history replay could emit a false live interruption toast, omit
independently needed current file state, and leave viewport preservation untested.
PR Browse Session prompts in terminal chat and console #1739's review found two related failures: the web dialog
retried an expired cursor indefinitely,
while the terminal
reused cached prompt history and its cursor after reconnecting.
The author confirmed the
web reload fix
and
terminal reconnect fix,
and the merged diff includes executable tests for both paths.
Replay must keep its rendering, state, and side effects separate while preserving
valid cursors, request state, current state, order, and viewport behavior.
The history rule in
AGENTS.mdandself-development/agentconfig.yamlalsorequires clearing stale cursors and cached pages when reconnecting to replacement
history or recovering from an expired cursor, so the next request starts at the
first page. Tests must cover recovery from expired cursors as well as reconnects.
Use lease-protected pushes after rebasing published branches. PR Add full spawner fleet for kelos-dev/open-actions #1622's
reviews independently found that the
worker existing-PR path
and
PR responder
rebased already-published branches and then attempted normal pushes, which fail
as non-fast-forward updates. The shared instructions now require
git push --force-with-lease, never an unleased force-push, after rebasing apublished branch.
Treat controller-generated Kubernetes names as durable identities. PR
Bound Session workload names #1629's reviews found that dropping the Session workload prefix would
collide with legacy workloads
and
abandon retained persistent workspaces.
The independent
Kelos Claude review
also found that a 63-character StatefulSet bound still left no room for
ControllerRevision and Pod-label suffixes. The
review on PR #1631
then showed that a Session name valid under DNS-1123 can still be invalid for
its governing Service under DNS-1035. Name derivation must validate the exact
grammar of every generated kind and account for all downstream suffix and label
limits, and controller-owned resources must not be renamed without a
collision-safe migration that preserves ownership and data.
Keep shared feature contracts consistent across clients. PR Support file attachments in Sessions #1630's
review found that the plain terminal
did not enforce the TUI's eight-file limit,
the TUI
accepted an empty
/sendthat the plain terminal rejected,and the plain terminal
omitted
/sendfrom command help.The
independent Kelos Claude review
also identified the cross-client limit mismatch. Shared web, TUI, and CLI
features must apply the same limits, empty-input rules, failure semantics, and
discoverability, with each surface tested explicitly.
Preserve prompt contracts when consolidating instructions. PR Simplify session spawner prompts #1641
removed detailed worker and PR-responder prompts on the assumption that shared
configuration supplied the same behavior. Reviewers found the same missing-owner
failure across
Open Actions workers,
Agora workers,
the Kanon responder,
the Agora responder,
the Open Actions responder,
and the Kelos responder.
Separate comments also found the
persistent-workspace test contract
and
Agora documentation
out of sync. Before consolidating prompt instructions, agents must map every
removed requirement to a concrete source the spawned agent actually loads and
update contract tests and documentation in the same change.
Audit responsive rules when changing web controls. Three recent web
changes independently missed existing phone behavior:
PR #1630 left the attachment button below the mobile touch-target size,
PR #1638 resized the composer without resizing its adjacent attachment control,
and
PR #1647 omitted its new textarea from the mobile anti-zoom selector.
Agents must sweep every relevant selector group and breakpoint override for
new or renamed controls, preserving mobile font sizing, touch targets, and
sibling alignment.
Use production identities and collection cardinality in tests. PR
Handle rotated CRD CA bundles during install #1656 had a
multi-certificate review finding
because singleton-only expected bundles did not exercise whether every
required certificate was present. PR fix(slack): stop retrying replies rejected with cannot_reply_to_message #1660 then used an empty Task UID in
a
keyed-suppression test,
so the test passed without exercising the production identity path.
Fixtures must populate identity fields used as keys and use multi-element
inputs when behavior depends on collection membership or aggregation.
Test API mutability through updates. PR Make Session idle policy mutable #1665's
API review
and
general review
independently found that making
Session.spec.idlePolicymutable was testedonly for one non-nil replacement. A
separate inline finding
also found that create-only negative cases did not prove validation remained
enforced on updates. Mutability changes must cover the newly allowed presence
transitions and at least one invalid update.
Preserve keyboard operability in dynamic web controls. PR Add per-session actions menu to session server #1663's reviews
found that keyboard-invoked actions
lost focus after rerendering their trigger,
menu items
removed the visible focus ring,
and
Tab left the menu open after focus moved away.
PR Show Task logs in the Console #1673 was then independently flagged by
Cubic
and the
Kelos Claude reviewer
because roving
tabindexmade the inactive Manifest tab unreachable withoutArrow/Home/End handling. Custom widgets must implement their expected keyboard
interaction model; dynamic menus and dialogs must also retain a visible focus
indicator, dismiss on expected keyboard navigation, restore focus after success
and failure, and test those interactions through the browser behavior layer.
Make component renames upgrade-safe. PR Turn the Session server into the Kelos Console #1670's current-head reviews
found that the Console rename
dropped the persisted namespace selection
and
left legacy installed objects, uninstall RBAC, and Helm values without an upgrade path.
Component renames must inventory prior deployed identifiers, migrate stored
state, clean up resources that non-pruning installs leave behind, retain
uninstall cleanup for old names, and reject unsupported stale configuration
actionably. Upgrade-state tests are required alongside fresh-install tests.
Test every distinct behavior path independently. PR Add Session suspend action to console #1681 reviews found that the suspend tests depended on an earlier test global, omitted a runtime dependency and could not execute, and left the idempotent API branch untested. PR Visualize resource relationships in the console #1682 then had an independent review find that an exact-set relationship test skipped core derivation branches while a dependency edge was missing. Tests must now establish their prerequisites, include runtime dependencies, prove that the intended path is reached, and inventory relevant mapping variants.
Centralize behavior that must stay in lockstep. A
review on PR #1673
found duplicate authentication and error handling across two request helpers.
A
review on PR #1681
found duplicated suspend and resume bookkeeping that could drift, and a
review on PR #1683
found the Console build commands duplicated instead of routed through the
existing Makefile target. Code paths that intentionally implement the same
behavior and differ only by an input or action must share the implementation,
and repeated build or generation commands must use one Makefile target. The
rule explicitly excludes incidental similarity to avoid unnecessary
abstraction.
Preserve touch-accessible actions across breakpoints. The Claude review on PR #1686 found that the mobile breakpoint hid the only touch-usable path for Session section assignment while drag-and-drop was not reliable on touch devices. An independent inline review also found that the redesigned mobile tabs fell below the established 44px touch target. Responsive changes must keep every supported action available through an equivalent touch-operable path and test that path.
Preserve readable contrast across supported themes. A review on PR #1663 found that removing an explicit focus outline left only a weak dark-mode indicator, and PR #1686 reused a light-theme label color that produced roughly 2.5:1 contrast in dark mode. Color and theme changes must verify text, interactive labels, and focus indicators in every supported theme against the applicable WCAG AA contrast requirement.
Preserve Unicode semantics in text processing. A review on PR #1673 found that byte-offset truncation could split a multibyte rune and emit invalid UTF-8. A review on PR #1692 then found that
len()enforced a documented character threshold in bytes, causing non-ASCII false negatives and misleading diagnostics. Character limits must count Unicode code points, byte-bounded truncation must preserve UTF-8 boundaries, and affected limits must be tested with non-ASCII input.Preserve UI behavior when restructuring web views. PR Make console sidebar controls scrollable #1688 moved
Console sidebar scrolling to a new container but left
menu dismissal attached to the old non-scrolling list.
PR Keep the current request visible in console #1702 later let
hidden-view geometry updates clear current-request state without recomputing it on reveal.
Web view restructuring must migrate behavior bindings to the actual
containers, avoid deriving state from hidden layout geometry, recompute
derived state when a view becomes visible, and test the affected scroll and
hide/reveal interactions.
Bound work and persisted state on long-lived data and hot paths. PR Show Task logs in the Console #1673 reviews found
an entire accumulated WorkerPool log read into memory
and a later
fallback that still scanned the unbounded log.
PR Visualize resource relationships in the console #1682 then had a
quadratic TaskBudget-to-resource scan,
while PR Keep the current request visible in console #1702 performed
synchronous geometry reads and DOM writes on every scroll event,
independently echoed by its
Claude review.
The current-head API review on PR API: Add TaskPipeline for multi-stage orchestration #1698 then found that
copying every child output into CR status
could exceed Kubernetes object-size limits and wedge status updates. Agents
must bound long-lived input and persisted summaries, use references or
explicit truncation for high-cardinality status, prefilter nested matching,
and coalesce high-frequency UI work while avoiding unchanged DOM writes.
Revalidate preservation data during API conversion. The resolved
review on PR Match Slack spawner events by exclusion rules #1703 found that a user-writable preservation annotation could
bypass the destination field's pattern and item-count schema
after a syntactically valid JSON decode. PR Match GitHub webhook events by pull request author #1708 then repeated the same
omission for another preserved field, where a
current-head review found missing item-count and length validation.
Conversion code must treat preservation storage as user-controlled, enforce
the destination field's complete schema before restoring it, and test
syntactically valid but out-of-schema values as well as malformed encodings.
Keep configurable ServiceAccount identities in lockstep. PR feat: add WebhookGateway CRD for per-channel webhook auth and multi-instance GitHub #1238
repeatedly exposed incomplete handling of a Helm-configurable identity: the
gateway Pod could use a
ServiceAccount that lacked the required RBAC binding,
a second review found the
same custom-name drift across rendered resources,
and a later review found that
reserved chart-managed names rendered duplicate ServiceAccounts.
Helm-controlled ServiceAccount names must reach the workload, account, and
every RBAC subject; chart-owned collisions must be rejected and both valid
non-default and reserved values must be render-tested.
Keep auxiliary failures from breaking primary work. In three PRs, a
best-effort step broke work that would otherwise have succeeded. Each fix
degraded only the enhancement:
hard prerequisite for Session pull-request status,
which the
Kelos Claude API review
also flagged. The merged change logs the lookup failure and falls back to
the pull request's checks.
single transient heartbeat write error tore down the live Console bridge,
which the
Kelos Claude review
confirmed independently.
aborted Session runtime startup when Git inspection for the Changes tab failed,
for example on a workspace with dubious ownership. The author
confirmed the fix:
directory configuration is still validated, but inspection failures are
logged, reported in snapshot responses, and retried on later requests.
The rule in
AGENTS.mdandself-development/agentconfig.yamlpreviouslycovered only lease refresh. It now covers any best-effort enhancement: keep
the primary result, log the failure, report it where the enhancement is shown,
and retry later, without aborting startup or tearing down a healthy
connection. Invalid configuration and required writes remain fail-fast. The
Kelos reviewer did not flag the Fix console workspace changes across agents #1779 startup abort at the head cubic reviewed
(
dccd90f). Its checklist flags only silent degradation (as P1), sokelos-reviewer.yamlnow includes the converse check at P2.Keep provider integrations isolated end to end. PR Add GitLab source and webhook support for TaskSpawners #1721 repeatedly mixed the new GitLab path with GitHub assumptions: spawner reporting received a GitHub-only token resolver, GitHub App keys could suppress GitLab token injection, and a GitLab-mode reporting controller could reconcile GitHub Tasks. A separate self-hosted URL finding, confirmed and fixed by the author, found that deriving the project path dropped the instance URL prefix. Provider additions must route credentials, configuration shapes, and work by explicit provider identity and test coexistence and self-hosted forms.
Verify downloaded artifacts fail closed. Two reviews on PR Add GitLab source and webhook support for TaskSpawners #1721 found that
sha256sum --ignore-missingcould install an unverified glab package when its checksum entry was absent, independently flagging the Cursor image and Gemini image. Artifact verification must select exactly one checksum for the downloaded filename and fail when no unambiguous match exists.Synchronize state shared with test goroutines. PR Add GitLab source and webhook support for TaskSpawners #1721 introduced two HTTP-handler tests where handler goroutines wrote variables read unsafely by the test goroutine: the GitLab source request fixture and GitLab reporting assertions. Shared test state must use mutexes, atomics, or channels and remain clean under the race detector.
Validate collection semantics in generated CRDs. PR Add GitLab source and webhook support for TaskSpawners #1721 documented
allowed values for two list fields, but review found that the
generated CRD omitted both item enums.
The field-specific reviews confirmed that the markers for
gitlabWebhook.eventsand
gitlab.typesdid not constrain
items, while another review found thatduplicate types caused duplicate discovery work.
Slice enums must be verified in generated YAML, and duplicate values must
be rejected when they have no semantic meaning. The API reviewer prompts
now check these generated collection semantics explicitly.
Keep CLI resource detail output aligned with configuration. PR Add GitLab source and webhook support for TaskSpawners #1721
repeatedly added TaskSpawner settings without exposing them to operators:
GitLab webhook
excludeAuthorswas omitted,and the polling source hid both
reviewStateandpipelineStatus.New user-visible fields must be added to every applicable detail printer,
compared with sibling provider branches, and covered by distinct full-line
assertions. The general reviewer prompts now check this surface explicitly.
Page unbounded Kubernetes and API lists. PR Remove v1alpha1 API #1725 attempted to migrate
all stored Kelos resources with
one unpaginated list request,
which can fail once the API server response limit is exceeded. The existing
bounded-work rule now requires limits and continuation-token loops whenever
result cardinality is not contractually bounded.
Keep skill discovery metadata aligned with skill behavior. Reviews on PR
Narrow Kelos skill discovery scope #1720 found that narrowing the skill frontmatter
left supported documentation uses undiscoverable
and
removed distinctive kind names needed for reliable triggering.
Skill descriptions are now treated as discovery contracts: their positive
terms, exclusions, and body-level usage guidance must remain aligned.
Verify required filesystem outputs. PR feat: support optional skills packages #1726 accepted a successful
required skill installation when it
created an empty output directory,
then a follow-up review found that its relocation loop
silently omitted dot-prefixed entries.
Setup and install scripts must validate usable required artifacts rather than
only exit status or directory existence, preserve supported hidden entries,
and exercise those postconditions with executable tests.
Verify external contracts before reporting defects. Two review threads
on PR Add GitLab source and webhook support for TaskSpawners #1721 were resolved after the author corrected unsupported assumptions:
GITLAB_HOSTaccepts a URL,and
head_pipelinerequires the single-MR endpoint.The GitLab CLI documentation,
pinned glab v1.116.0 host parser,
and merge-request response documentation
support those corrections. Both general reviewer prompts now require
verification of endpoint fields and accepted inputs against the relevant
official documentation or upstream implementation, a supporting source link,
and omission of unverified external-contract claims. The provider-isolation
evidence above uses the confirmed relative-URL parsing defect, so the rejected
host-only claim is no longer presented as a valid finding.
Use shared criteria for new source exclusion filters. The maintainer
requested the same rule-based exclusion model in the
Slack review on #1703
and the
GitHub review on #1708,
and the author
accepted the shared direction.
Both the
API review
and
general review
then confirmed at head
1661bf4that reusing the matcher without validatingevent-specific criteria could make a label exclusion reject every push;
explicitly empty criteria could also become an unintended match-all rule.
AGENTS.mdand the Kelos development AgentConfig now require shared typedcriteria under source-level
excludeFilters, AND within each rule,rejection on any matching exclusion regardless of accepting filters, and
preservation of shipped positive-filter semantics. Agents must validate
empty and inapplicable criteria and test intended matches, missing attributes,
empty values, and exclusion precedence across supported trigger paths.
Keep stream control and teardown responsive under backpressure. In
PR Add interactive shell terminals to Console sessions #1736, review found that
blocked stdin prevented reading disconnect messages
and that
the bridge returned without stopping its workers.
The author confirmed the fixes for
bounded input and responsive control handling
and
cancellation, socket interruption, and worker completion;
both threads are resolved and the merged diff contains the fixes. PR Increase Session attachment limit to 100 MiB #1735's
download review
also verifies that closing a stream cancels exec and unblocks a pending pipe
write.
AGENTS.mdand the Kelos development AgentConfig now require controlhandling to remain responsive when consumers stall, bounded queues with
explicit overflow handling, and bridge teardown that interrupts I/O and
waits for its workers. Executable bridge tests must exercise blocked
consumers, control delivery, overflow, and worker termination.
Preserve UI behavior across view and resource lifecycles. In PR
Add a native Session terminal tab with shell completion #1737, both the
inline review
and the independent Console review found that page departure disposed the
terminal while leaving its tab selected and Reconnect disabled. The author
confirmed the fix:
close the shell, select a usable view, and allow Terminal to reopen after
restoration. PR Add browser alerts to the console #1744 exposed another missing lifecycle transition:
browser notifications survived Session deletion or recreation.
The author
confirmed cleanup by namespace/name/UID on accepted Session refreshes,
covering selected and background Sessions. Both inline threads are resolved,
and the merged diffs contain the accepted fixes. The existing UI convention
in
AGENTS.mdandself-development/agentconfig.yamlnow includes page andSession lifecycles, cleanup of invalid resources, usable views and controls
after teardown, and tests for cleanup and restoration or reopening.
Verify child identity before reusing a generated resource. On PR API: Add TaskPipeline for multi-stage orchestration #1698,
both the API review
and general review
found that a matrix stage
reviewand a single-Task stagereview-0couldgenerate the same Task name. The
AlreadyExistspath checked only thepipeline owner, so the later stage reused the earlier stage's successful
Task and reported success without running. The maintainer
confirmed the fix and reconciliation test
in merged head
d823e10: reuse requires matching ownership, stage, and index;a different child's name collision fails explicitly. The existing generated-name
convention in
AGENTS.mdandself-development/agentconfig.yamlnow requireschecking the intended child's identity as well as ownership and testing
collisions between children of the same parent. This extends the existing
identity guidance with a confirmed controller contract.
Preserve pending UI intent and keyboard dismissal. PR Move browser notifications into console Settings #1746's Cubic review found that a pending browser-permission render reset the user's switch, keyboard focus could leave the Settings popover without dismissing it (pending state, focus dismissal), and the browser test double dropped repeated listeners (test-double semantics). The shared rules now preserve in-progress UI intent during asynchronous actions, require focus-leaving dismissal or an intentional focus trap, and require browser test doubles to preserve relevant platform semantics.
Pin CSS/layout fixes with owning tests. PR Fix session conversation alignment with long headers #1747's Kelos Claude review found that the new
.conversationlayout declaration was not included in the existing style assertions. The shared testing rule now requires a focused assertion for each behavior-critical CSS declaration in the owning test.Guarantee that waits and lifecycle gates can finish. Three PRs shipped
waits or lifecycle gates with no guaranteed exit. Each finding was fixed
before merge:
forced interruption waited without a bound on a provider that ignores cancellation,
and a
non-deadline interrupt error left a draining Session
Interruptingindefinitely.Both were addressed in
aba5bda.dropped the old Pod's access and left the drain waiting indefinitely.
The merged code keeps drain access when it creates or repairs the binding.
and the Kelos review at
1e5a9a1found thatcompleteInteractionleftreadyopen, so interrupting a new goal stalled until timeout and thenrestarted Codex. The
Kelos review
was edited in place. Its versions at
e0a02c6andb9588e2found twomore problems: a background task that never ends kept the Session
Activeforever and blocked idle-policy and runtime-update drains, andClaude Code's persistent
ambientmonitor tasks were counted asbackground work. The merged commit
dcf7b3aclosesready, skipsambienttasks, applies the task gate only to the idle drain, anddocuments that effect.
AGENTS.mdandself-development/agentconfig.yamlnow require:path;
escalating when the bound expires;
a terminal state, and limiting unbounded user-work gates to the
transitions that need them, with the effect documented;
The existing stale-work rule covers the wrong operation acting on shared
state, and the backpressure rule covers only stream bridges. Neither
requires a wait to finish.
Two findings of the same shape are not used as evidence:
turn.acceptedwas never closed after a journalfailure. Its thread is unresolved, and the fix could not be confirmed.
author rebutted it.
Clear runtime-derived UI state across Session suspension. PR Show background task progress between Session turns #1786 adds
a Console background-task indicator. Two reviews found live runtime state
that outlived the runtime it described:
found that the count stayed visible after the Session was suspended or
stopped being Ready. It noted that a stale active turn already had the
same gap on
main.then found that resuming restarted the elapsed-time timer for a turn
from the stopped runtime before fresh runtime events arrived.
The author fixed both
(suspension,
resume).
An unavailable Session now clears foreground activity and the
background-task count in the current view and its cache. Tests cover
resume before fresh runtime events and cached-view restoration. Both
fixes are in
d3e6a82, the head that merged on October 1.Item 40 applied the lifecycle rule to terminals and browser notifications
across page departure and Session deletion. It did not cover suspension or
live activity indicators.
AGENTS.mdandself-development/agentconfig.yamlnow also cover live runtime activityand Session suspension/resume. They require clearing runtime-derived state
in current and cached views, and testing resume before fresh runtime events
arrive.
Grant only the access a component uses. Reviews on three merged PRs
found RBAC permissions or credentials that reached beyond the code that
used them. Each was fixed before merge:
P1 review
found cluster-wide
list/watchon Secrets when the webhook onlyneeded named reads. The author
replied "Done",
and the merged diff contains no RBAC change.
TaskSpawner RBAC marker on the Task controller, which never reads TaskSpawners.
cubic marked it addressed in
940e7ed, and the marker is absent onmain.GH_TOKENwas inherited by the whole integration-test step,which runs pull-request code, and that
the OAuth2 Proxy sidecar shared the Console ServiceAccount token.
The author
confirmed the sidecar fix,
and
mainsetsGH_TOKENonly on the download step.The Kelos review on #1787
raised the sidecar token only as an optional P3 suggestion and did not
flag the CI token.
AGENTS.mdandself-development/agentconfig.yamlnowrequire RBAC scoped to the API calls the code makes and credentials exposed
only to the container, process, or CI step that uses them.
kelos-reviewer.yamladds a matching security check: P1 when a credentialor Secret is exposed, P2 otherwise.
Recompute geometry-derived UI state on every geometry change. PR Fix console prompt jumps and add Jump to latest #1793
added a Jump to latest button whose visibility depends on distance from
the bottom of the conversation. Two independent reviews found that it was
refreshed only from scroll events:
found that visibility was measured right after a bottom anchor was
scheduled but before it ran. The anchor callback then moved
scrollTopwithout refreshing the button, which flashed visible onopen and on cached Session switches. The author
fixed it
by refreshing the button in the anchor callback before paint.
late image loads grew the conversation after the one-shot anchor
without firing a scroll event, so the button stayed hidden away from
the bottom. The author
confirmed it with lazy images and fixed it
by refreshing the button when image previews load.
Both fixes are in the merged commit
dce3dd0. PR Keep the current request visible in console #1702 had the sameshape:
hidden-view geometry cleared current-request state and was not recomputed on reveal.
That is the only non-scroll case the rule from item 24 named. In
AGENTS.mdandself-development/agentconfig.yaml, the rule now requiresrecomputing geometry-derived state whenever the underlying geometry
changes, not only on scroll events. That covers reveal, deferred
programmatic scrolls (after they run, not when scheduled), and late
content growth such as image loads. It also requires testing those
changes. The Kelos review also noted that the harness mocked the anchor
and checked only the end state. The existing rule that browser test
doubles must preserve platform semantics already covers that.
Document the residual security risk of access changes. Kelos reviews
on three PRs found docs for new access or authentication features that
left out risks operators must manage. Each author fixed the gap by
documenting it:
Kelos review
found that making
serviceAccountNamemutable let a Session's ownagent switch its Pod to another ServiceAccount. It asked for a fix or
an explicit statement of the trust boundary. The merged commit
4bcd679documents the trust boundary indocs/reference.md.Kelos review
found that the chart README understated what a compromised Console
could do. Its
create rolebindingspermission lets it bind roles italready holds, such as
pods/exec, to any identity. The merged commit87f6447states this.Kelos review
found that the GitHub login docs did not say that removing a user from
the organization or team leaves existing Console logins active, or how
to revoke them. The author
documented both
in
bca8487.The existing "Docs must match implementation" rule forbids overstated
guarantees, which covers Add namespace membership and configuration administration to Kelos Console #1792. It does not require documenting residual
risk the docs leave out, as in Allow Session service account updates #1774 and Add Console GitHub login with GHES endpoint support #1795.
AGENTS.mdandself-development/agentconfig.yamlnow cover changes that grantpermissions, authenticate users, or accept a trust boundary. Their docs
must state:
including access it can grant to others;
revoke them.
kelos-reviewer.yamlis unchanged because the reviewer found all three.Preserve latest-only fields through older-version conversion. Two
PRs added v1alpha2-only fields that a v1alpha1 read-modify-write could
drop:
branchLockand preserves it for TaskSpawnertemplates in a v1alpha1 annotation. cubic
found
that Task conversion still dropped it. Because
Task.specisimmutable, writing a Task back through v1alpha1 would then fail
validation. The author
fixed it
in
7fe5ffeby preserving the field on Tasks with the same annotation,and added round-trip tests.
status.usageandstatus.conditions. cubicfound
that a v1alpha1 status update could erase them, and the
Kelos GLM review
found the same gap. The maintainer
called it valid
and deferred it to a follow-up.
internal/conversion/task.goonmainstill converts Task status with no preservation, and no tracking issue
was found.
The existing latest-version rule only says older served versions must
stay "convertible". The preservation rule assumes preservation already
exists and covers only validation. In
AGENTS.md, the latest-versionrule now requires preserving each latest-only field on every kind that
carries it (spec, status, and embedded templates) and testing the round
trip for each kind. That rule is only in
AGENTS.md, which spawnedagents in this repository load, so
self-development/agentconfig.yamlis unchanged.
The reviewer prompts are unchanged. The GLM review that found the feat: add Task-native budget enforcement via TaskBudget and TaskRecord CRDs #1426
gap was later folded into the current reviewers by self-development: run every spawner on Claude Code #1762. No Kelos
review has run on Add branchLock to let read-only Tasks skip the branch lock #1808, so there is no evidence that the current
reviewers miss this.
PR Support files in inline AgentConfig skills #1841 then answered the October 13 question in the notes below:
should the rule allow a documented drop? Its first version preserved
the new v1alpha2-only skill
filesin a v1alpha1 annotation. cubicfound
that a valid 900 KiB bundle could exceed the annotation limit, and the
first Kelos API review rated the annotation overflow a P1. The maintainer
replied
"Let's not care about the compatibility of the v1alpha1." The author
removed the annotation
and its round-trip tests. They also added the sentence the
API review
asked for: reads through v1alpha1 omit
files, and writes through itremove them. Support files in inline AgentConfig skills #1841 merged that way on October 25.
docs/reference.mdon
maindocuments the same kind of drop for Add requestedReviewer to GitHub webhook filters #1813'srequestedReviewerand for thepullRequestAuthor,conclusion, andcheckNamecriteria.internal/conversiononmainstill has tenpreservation annotations, so preservation stays the default. The rule
now adds one exception. When the maintainer decides not to carry a
field through older versions, agents skip its preservation and state
the drop in the field's
docs/reference.mdentry. The API reviewerprompt is unchanged, because the Support files in inline AgentConfig skills #1841 API review already asked for
that documentation.
Bound every field of size-limited messages and objects. Three PRs
had fields that could grow past a fixed size limit:
Kelos review
found that the 1 MiB cap on
workspace.changesapplied only to difftext. The changed-file list had no limit, so a large workspace pushed
the event over the Console bridge's 8 MiB line limit, and the Session
reconnected in a loop. The author
bounded the file count and encoded file-list size
and added tests that include JSON escaping.
found
that the Session kept one read-receipt annotation for every user. They
would accumulate until the Kubernetes annotation size limit rejected
every acknowledgment. The author
added pruning of superseded receipts
with a test, and it merged in
92e6926.cubic
and the
Kelos review
independently found that a new branch list in the same
workspace.changesevent has no limit. The event's other fields weresized to fit the 8 MiB line. The author
capped the list
at 1,000 entries and 128 KiB of encoded JSON, reported truncation, and
added tests that combine a bounded list with large escaped diffs. The
fix merged in
b717c57.Item 25 cited PR API: Add TaskPipeline for multi-stage orchestration #1698, where copying every child output into CR status
could exceed the object size limit. The bounded-work rule covered only
CR status. When Fix console workspace changes across agents #1779 was reviewed, no other PR had a message-limit
finding, so no rule was added then. In
AGENTS.mdandself-development/agentconfig.yaml, the rule now covers any message orobject with a fixed size limit, such as a streamed event line, CR status,
or a resource's annotations. It requires:
every variable-length field;
The existing requirement to test bounds with realistic input sizes still
applies.
kelos-reviewer.yamlis unchanged: the Kelos reviewer flaggedFix console workspace changes across agents #1779 and Add explicit review scopes to console Changes tab #1828 and missed only Share Session read state across browsers #1822.
Retry only failures that can clear on their own. Five PRs had a
component retry a failure that could not succeed until an input
changed:
found
that the WorkerPool reconciler returned an error for an unsupported
Workspace. It retried with backoff for a state that would not clear
until the Workspace changed, and it skipped reconciling a Task with
the pool's name. An
earlier cubic finding
noted that the rejection was only logged. The author
now records a Warning event and returns without an error,
and the Workspace watch re-enqueues the pool.
that Slack rejected with
cannot_reply_to_messageon every 30-secondcycle, and production saw 198+ failed attempts in one hour. The fix
treats that error as permanent, keeps HTTP-level failures retryable,
and tests both.
Kelos review
found that the Console re-sent read acknowledgments rejected with 403
on every poll, scroll, and focus. The author
stopped retrying 400, 403, and 404
and kept conflicts, rate limits, server errors, and network errors
retryable.
Kelos review
noted, as an optional P3, that a foreign Service with a Session's
name makes the reconcile return an error and retry forever, while a
foreign StatefulSet fails the Session.
ensureSessionServiceonmainstill returns that error.Copilot
found that a permanently invalid Task returned its Job build error
and retried with backoff, and
cubic
found that a missing Workspace retried forever.
The October 14–16 window weighed Share Session read state across browsers #1822 against Bound Session workload names #1629 and Add Workspace CRD for reusable workspace configuration #37 and added
no rule, because those two were in reconcile paths and Share Session read state across browsers #1822 was a
client. Add Workspace options to restrict the checkout and agent credentials #1831 is a third reconcile-path finding, and a search of review
comments since January found Implement Axon controller #1 and fix(slack): stop retrying replies rejected with cannot_reply_to_message #1660. The request-failure rule
covered only the transient side: propagate a
List/Geterror so thesender retries. In
AGENTS.mdandself-development/agentconfig.yaml,a new rule after it covers the permanent side:
or permissions change once, where operators see it, and stop retrying
until that input changes;
the object;
retryable, and test both kinds.
A referenced object that does not exist yet is a wait, not a permanent
failure.
mainrequeues a Task whose Workspace is missing after 2seconds without an error, and Add Workspace options to restrict the checkout and agent credentials #1831's
fix
requeues a Task whose pool Workspace is missing. The rule exempts that
case and leaves
404out of its examples. The reviewer prompts areunchanged: the Kelos reviewer flagged Share Session read state across browsers #1822 and Bound Session workload names #1629, and no Kelos
review ran on Add Workspace options to restrict the checkout and agent credentials #1831.
Keep test outcomes independent of real time. Reviews on four PRs
found tests whose result depended on the real clock:
found
that a new test gave a pre-existing background task a hard-coded
July 23, 2026 start time and compared it with a task started at
time.Now(). A run before that date sorts the tasks the other wayand fails. The author switched to a start time one minute before
time.Now()in953943e, which merged. TheKelos review
at the same head (
2580827) approved without this finding.found
that an idempotency check slept 500 ms instead of using
Consistently, andCopilot
found that a slow reconcile would let the check pass with
idempotency broken.
test/integration/taskspawner_test.goonmainnow uses
Consistently.found
that fixed sleeps could let the regression test pass before the
background child forked, or fail on a loaded runner. The author
replaced them
with deadline-bounded polling in
5d8e8b3.kelos-botauthored: cubic found two fixed sleeps,one that
stood in for a wait condition
and one that
let cancellation run before the request reached upstream.
Neither had a reply. The Kelos review approved at
e8d95d2, whichcontains both sleeps, and the PR merged.
cmd/ghproxy/main_test.gostill sleeps 50 ms before releasing the upstream gate.
Copilot also flagged fixed sleeps on PR Implement Axon controller #1, and cubic found on PR Add cron source to TaskSpawner #40
that a future
LastDiscoveryTimemade a cron test check nothing.Neither was confirmed fixed, so they are not used as evidence. No
existing rule covers this:
base-agent.yamlsays how to respond toCI flakes, not how to keep a test independent of time. In
AGENTS.mdand
self-development/agentconfig.yaml, a new rule after thetest-goroutine rule requires:
time.Now(), or an injected clock, when codeunder test compares timestamps with the current clock;
Eventually,Consistently, or a deadline-bounded poll on anobservable condition instead of a fixed sleep.
The Kelos reviewer approved feat(ghproxy): add singleflight to coalesce concurrent GET cache misses #868 and Show individual background task durations in the console #1839 without these findings, so
kelos-reviewer.yamlnow checks for them at P2.Files updated:
AGENTS.mdself-development/agentconfig.yamlself-development/kelos-api-reviewer.yamlself-development/kelos-reviewer.yamlself-development/base-agent.yamlis intentionally unchanged because none ofthese changes are an upstream
gjkim42/kanon-reposynchronization.Which issue(s) this PR is related to:
N/A
Special notes for your reviewer:
The existing unassigned configuration PR was reused. It had become unmergeable
after #1762 deleted
self-development/kelos-claude-reviewer.yamlandself-development/kelos-claude-api-reviewer.yamland folded their content intokelos-reviewer.yamlandkelos-api-reviewer.yaml. This branch had made the sameadditions to both files in each pair, so the branch was rebased onto
mainandpushed with
--force-with-lease. The rebase keeps the additions in the survivingreviewers and drops the edits to the deleted files. The added lines in
AGENTS.md,self-development/agentconfig.yaml, and both surviving reviewersare unchanged by the rebase.
Validation after the rebase:
make verify— passedgo test ./internal/examples/...— passed (self-development manifest, reviewerprompt, and model/effort tests, including those rewritten by self-development: run every spawner on Claude Code #1762)
git diff --check origin/main HEAD— passedReviewed PR activity from September 17 through September 24. None of it
supported a new convention:
about stale spawner counts left in the Open Actions README after sections were
deleted. The author fixed it in
c982e7dand swept the sibling READMEs. Theexisting "Keep documentation complete and internally consistent" rule already
requires updating all affected mentions together, and this is a single finding,
so no rule was added.
and cubic found no issues.
item 36 already reflects.
Reviewed PR activity from September 24 through September 29. Only item 28's
broadening was supported by findings in more than one PR. The update is a
fast-forward commit;
mainhas moved on only in files this PR does not touch,so no rebase was needed. Validation for that commit:
make verify— passedgo test ./internal/examples/...— passedgit diff --check— passedFindings from this window that were not turned into rules:
Kelos review
traced three P2s to turn-end cleanup lost when
RunTurnwas split, and cubicflagged a
git diffrun while holding the event mutex.The author fixed both. One of the three P2s, the
readychannel left open,is now cited in item 44 alongside later findings with the same liveness
shape. The other two P2s (the lost provider stop error and a prompt claimed
from pending too early) and the mutex finding still appear only here. The
fake-helper findings are already covered by the rule that test doubles must
preserve protocol semantics.
Kelos review
found that Git stderr was dropped from errors and that snapshot payloads could
exceed the console's 8 MiB line limit. Both were fixed. Losing a failure's
underlying cause appears elsewhere only in Preserve Session background replies across user turns #1780's provider-exit case, which
has a different shape. The bounded-work rule already forbids buffering
unbounded output, which covers cubic's follow-up about
capping only after Git's full name list is buffered.
A per-message transport limit came up only in this PR. The unchanged-DOM finding is covered by the existing "skip unchanged
DOM updates" rule. The author rebutted two cubic findings (request bursts and
reset handling) with the existing tests.
RoleBinding recreation finding
and the Kelos review's
PodConflictpreemption and ServiceAccounttrust-boundary findings were all addressed before merge. The trust boundary
is now documented. Each is a single, feature-specific finding.
repositories' configuration PRs.
Reviewed PR activity from September 29 through September 30. The only new
review activity was two further Kelos reviews on #1780, at
e0a02c6andb9588e2. Their gate findings, together with earlier confirmed findings on#1618, #1774, and #1780, support item 44. This is a fast-forward commit, and
mainhas not changedAGENTS.mdorself-development/since this branchwas last rebased. Validation for that commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
e0a02c6also found that theActiveconditionrow in
docs/reference.mdand the condition message still described onlyunfinished turns. The existing "Keep documentation complete and internally
consistent" rule already covers this. The
ambientfinding came fromchecking the pinned Claude Code binary, which the reviewers' external-contract
verification (item 37) already requires.
comments. Add the TaskRouter CRD, controller, and TaskSpawner triggerMode #1761 and Isolate Codex Session notifications by thread #1740: no review activity.
Reviewed PR activity from September 30 through October 1. Only #1786
supported a change (item 45). This is a fast-forward commit, and
mainhasnot changed
AGENTS.mdorself-development/since this branch was lastrebased. Validation for that commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
need them. Both were fixed. This window's keyword search found no earlier
finding of this kind, so no rule was added then. It missed fix: grant list/watch on secrets for webhook RBAC and fall back to global GitHub token resolver #1363 and
feat: add Task-native budget enforcement via TaskBudget and TaskRecord CRDs #1426, which item 46 now cites with these findings.
comparison rejected non-canonical external URLs. The
Kelos review
also found a documented cookie-secret command whose output the pinned
OAuth2 Proxy rejects. Both were fixed, and both are specific to this
feature. The author
rebutted the
subclaim findingusing the pinned upstream source. Item 37 already requires reviewers to make
that check. The author declined the JSON Schema suggestion and gave a
reason. The existing rule that fakes must validate the complete request
shape already covers cubic's finding about a fetch mock that accepts any
request.
rebutted
cubic's partial-update test finding because runtime-status events are
complete snapshots. The composer-resize finding was fixed. It is a single
TUI layout finding.
Kelos review
found an earlier Console suspend-and-resume problem. It is not used as
evidence for item 45, because no reply or merged change confirms a fix.
Add the TaskRouter CRD, controller, and TaskSpawner triggerMode #1761 and Isolate Codex Session notifications by thread #1740: no review activity.
Reviewed PR activity from October 1 through October 2. Only item 46 was
added. This is a fast-forward commit, and
mainhas not changedAGENTS.mdor
self-development/since this branch was last rebased. Validation forthat commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
P2
says the Console ServiceAccount gains cluster-wide RoleBinding
get/list/delete. This fits item 46, but cubic says the access may berequired, so it is not used as evidence. Its
P1
says a render test would not catch added RBAC verbs. The existing rule
already requires exact-set assertions when omissions matter. This is the
only finding about extra entries, and it is unconfirmed. The
pending-input finding is covered by the existing rule to preserve
in-progress UI intent. The stale-error and README-fragment findings are
single, feature-specific findings.
fixed the fetch-mock finding,
which the existing request-shape rule already covers. The author also
deferred cubic's optional CI cache suggestion
and gave a reason.
Show background task progress between Session turns #1786: no new review activity. Improve Open Actions compatibility reviews and implementation guidance #1627 is another repository's configuration
PR.
Reviewed PR activity from October 2 through October 3. Only item 47 was
added. This is a fast-forward commit, and
mainhas not changedAGENTS.mdor
self-development/since this branch was last rebased. Validation forthat commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
a reconnect could move focus back to the composer after Jump to latest.
The author
fixed it
by keeping transcript focus when the socket opens. The existing stale-work
rule already requires re-reading current state when asynchronous work
completes, and this is the only finding of this kind.
rebutted
cubic's overlay finding after Chromium hit testing showed that only the
button's own area intercepts clicks.
repository's configuration PR, and it had no review activity.
new review activity.
Reviewed PR activity from October 3 through October 7. Only item 48 was
added. This is a fast-forward commit, and
mainhas not changedAGENTS.mdor
self-development/since this branch was last rebased. Validation forthat commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
Add namespace membership and configuration administration to Kelos Console #1792 and Speed up Console namespace loading and refresh choices automatically #1797: cubic
found
that namespace discovery made up to 10 SubjectAccessReviews per namespace.
The author capped discovery at eight concurrent reviews, but the per-namespace
fan-out shipped. Speed up Console namespace loading and refresh choices automatically #1797 then fixed the resulting startup wait (191 checks and
36 seconds in the author's measurement) by checking the remembered
namespace first. This is a single defect. Both reviews of Speed up Console namespace loading and refresh choices automatically #1797 noted that
each picker open still runs full discovery, and the Kelos review calls that
intended. So no rule was added; the existing bounded-work rule is the
closest.
Fix console scrolling during streaming responses #1802 (open): the
Kelos review
found that a cancelled or failed prompt jump still paused auto-follow. The
current description says following now pauses only after the target is
found. cubic then
found the same shape
for
pinHistoryToBottom, and that thread has no reply yet. No earlier PRhas this kind of finding, so no rule was added.
Add namespace membership and configuration administration to Kelos Console #1792: two findings asked
kelos uninstallto remove new access-grantingresources: the
kelos-console-adminClusterRole (an earlier version of theKelos review) and the
membership RoleBindings that a reinstall would reactivate.
Both were fixed. Both are in one PR, and the rename rule already requires
uninstall cleanup for legacy names.
Add namespace membership and configuration administration to Kelos Console #1792: existing rules cover cubic's test findings:
finallyblock always satisfies;documentstub left installed;Tests must fail if their intended path is removed and must stay
independently executable. The
cancellation finding,
where a cancelled
errgroupreturned 200 with a partial list, is coveredby the rule that a lookup error is not an empty result. The other
findings are single and feature-specific.
Speed up Console namespace loading and refresh choices automatically #1797: cubic's
picker finding
about rebuilding unchanged options is covered by "skip unchanged DOM
updates". The author did not change behavior while the native popup is
open because that problem was unconfirmed. The existing
documentation-consistency rule covers the Kelos P3 about stale README
wording.
Fix console scrolling during streaming responses #1802: the existing documentation-consistency rule covers the Kelos P2
that
docs/reference.mddid not describe the new pause and resumebehavior.
Bound the pod log read in Task readOutputs #1798 (open): it fixes a production hang where a Task reconcile blocked
on a pod log read with no deadline. The existing rule to bound waits on
external work fits this case. cubic's
finding
that the test waited out the full 15-second timeout was fixed by making
the timeout adjustable. The existing rule to add a test seam covers this.
Add the TaskRouter CRD, controller, and TaskSpawner triggerMode #1761: the maintainer
prefers
conditional branching in Task or TaskPipeline over a new CRD. That is a
design decision for that PR, not a general rule.
Let the label check read a pull request's labels #1803: cubic found no issues. cli: add opt-in pretty logs for Claude Code tasks #1794: no reviews. Add Kelos icon to the README #1788: no new review
activity.
Generated image-update PRs Update opencode image to 1.18.34 #1777, Update cursor image to 2026.10.01-e373342 #1778, Update gemini image to 0.62.0 #1783, Update codex image to 0.160.1 #1791, Update claude-code image to 2.1.290 #1796, and
Update claude-code image to 2.1.295 #1799–Update opencode image to 1.18.35 #1801: no review comments.
Reviewed PR activity from October 7 through October 8. Only item 49 was
added. This is a fast-forward commit, and
mainhas not changedAGENTS.mdor
self-development/since this branch was last rebased. Validation forthat commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
Existing rules cover these findings:
promised that an
ExclusiveTask runs alone, butNoneTasks canoverlap with it.
required a bot mention for every trigger, including reactions.
said a branch is always fetched, even when it does not exist on
origin.test
covered only an explicit ref and skipped the remote-default-branch path.
sibling reviewer spawner
in the same example file was not updated.
All five were fixed.
Add branchLock to let read-only Tasks skip the branch lock #1808: cubic found that
NoneTasks still released the branch lock,so a same-named Task in another namespace could clear another Task's lock.
The author fixed it. It is a single, feature-specific finding. The author
called namespace-qualified lock keys a pre-existing issue outside the PR.
The
docs-limitation finding
no longer applies, because item 49's fix removed the limitation.
feat(slack): fire TaskSpawners on emoji reactions #1807: cubic found that
one deadline covered both the history call and its fallback.
The author fixed it. It is a single finding. The
v1alpha1
triggers: []findingis a deliberate effect of preservation that the author documented, not
missing preservation. It is not used as evidence for item 49.
feat(workspace): add clone.branches to clone only the checked-out ref #1809: cubic's
--unshallowsuggestionhas no reply yet and is specific to this feature.
feat: Add kelos.dev/v1alpha2 APIs and conversion webhook #1242: cubic's
mcpServersreordering findingshowed up in the keyword search for item 49. It is about matching
preserved entries by index, not about missing preservation, so it is not
used as evidence.
Fix console scrolling during streaming responses #1802 merged in
9e0fb44with no review activity after the previouswindow. Generated image-update PRs Update claude-code image to 2.1.295 #1799 and Update codex image to 0.162.0 #1806: no review comments.
Reviewed PR activity from October 8 through October 13. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since this branch was lastrebased.
Findings from this window that were not turned into rules:
Kelos API review
found that a v1alpha1 read-modify-write drops the new v1alpha2-only
requestedReviewercriterion from accepting filters, which widens thematch. The PR follows the documented precedent of
pullRequestAuthor,conclusion, andcheckNameand preserves the field only inexcludeFilters. The review rated it P3 and suggested preservation as afollow-up. The PR merged without it, and no tracking issue exists. Item
49's rule would have required preserving the field, while this merged
change kept a documented drop. It is not added as evidence for item 49;
please confirm whether item 49 should allow a documented drop.
API review finding
about an untyped enum field and cubic's
finding
about hand-copied enum literals were both fixed with a typed
SessionNotificationType. The API reviewer checklist already asks fornamed string enum types. The only earlier instance, a feat: Add check_run webhook support for CI failure auto-remediation #1558 suggestion
for
conclusion, was not adopted.publication
dropped because only unchanged booleans were compared,
per-tab deduplication of shared notifications,
and a namespace switch that closed other tabs' alerts, found by the
Kelos review.
The "Test every distinct behavior path" rule already covers the
test rewrite that dropped the removed and unchanged Session cases,
and the documentation rules cover the godoc precision findings. The
author
rebutted
the click-during-load finding with the HTML loading specification and a
Chromium reproduction.
finding
that the godoc names the Go field
Actioninstead of theactionkey,and the API review's request for a neutral example handle.
documentation-consistency rule covers the missing
skills/kelos/references/cli.mdupdate. The rule that each test casemust fail if its path is removed covers the
vacuous test loop.
The other findings are specific to the log renderer.
message overstated the failure. Bound the pod log read in Task readOutputs #1798: two optional P3 suggestions.
Add the TaskRouter CRD, controller, and TaskSpawner triggerMode #1761: design discussion only.
comments.
Reviewed PR activity from October 13 through October 14. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since this branch was lastrebased.
Findings from this window that were not turned into rules:
Mark unread Session completions in the Console #1817: existing rules cover every finding that was fixed:
version of the
Kelos review
(P1, since edited in place) and
cubic
found that replayed completions ran the TUI's live pending-turn path and
added an empty user block. The author
fixed it.
failed-turn text bypassed the history byte limit.
Both reviewers found that
read receipts in browser storage were never pruned.
cross-tab assertion that passed without the sync path
and a
completion-notice check that ignored the event type.
docs/reference.mduser-facing": the final Kelos review foundthat the reference described internal receipt pruning. The author
removed it.
The author
rebutted
cubic's badge-color finding with contrast ratios: the suggested dark-mode
token would lower white text contrast to 2.39:1. The Kelos review also
found that completion notices shrink the first history page. Taking the
review's alternative, the author kept the existing limits and documented
the tradeoff.
Improve Open Actions compatibility reviews and implementation guidance #1627 is another repository's configuration PR, with no review activity.
Generated image-update PRs #1818–#1820: no review comments.
There is no reply yet to the October 13 question about whether item 49
should allow a documented drop.
Reviewed PR activity from October 14 through October 16. Only item 50 was
added. This is a fast-forward commit.
mainhas changedself-development/since this branch was last rebased: #1824 moved theworkers and PR responders to GPT-6.1 Sol and updated their READMEs. It does
not touch the files in this PR, and the PR still merges cleanly. Validation
for that commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
Kelos review
found that acknowledgments rejected with 403 were re-sent on every poll,
scroll, and focus. The author
fixed it:
400, 403, and 404 now stop retrying, while conflicts, rate limits, server
errors, and network errors stay retryable. A search found only an optional
P3 on Bound Session workload names #1629 and a February cubic finding on Add Workspace CRD for reusable workspace configuration #37 about retrying permanent
failures. Both are in controller reconcile paths, not clients, so no rule
was added. cubic's
follow-up,
that pruning could delete a newer receipt, had no reply before merge. It
is not used as evidence.
keep an 11px font on mobile, so iOS zooms when they get focus. Item 14's
responsive rule already requires mobile font sizing that prevents focus
zoom. The unborn-
HEADfinding is specific to this feature. The Kelosreview's two documentation P3s are covered by the documentation rules.
5bc664bthat existingreleases outside
kelos-systemwould lose CRD conversion on upgrade.The author
added a guard and migration docs,
with render tests and a real upgrade against envtest. Item 18's upgrade
rule already requires preserving existing deployments' state and testing
an upgrade from prior configuration. The Kelos review's P3 that the
adoption loop omitted two CRDs, which cubic also flagged, was fixed. The
documentation rules cover it. The author rebutted cubic's guard-scope
and telemetry-flag test findings. The maintainer still has to sign off on
deleting
Namespace/kelos-systemby default.Kelos review
found README setup steps that named
OPENAI_API_KEYinstead ofCODEX_API_KEYand omitted the Codex OAuth refresh label. cubic alsofound that a test helper no longer checked the credential type and Secret
reference. cubic reports all of them addressed. The "Docs must match
implementation" and "Test every distinct behavior path" rules cover them.
Kelos review
found that the ingress header-size caveat appeared only in the GitHub
section and not in the OIDC section. The merged README states it for
both. The documentation-consistency rule covers this. The API review's
suggestion to plan for a future
teamslist is optional.yet. The command-level test finding is covered by "Test behavior through
the layer that owns it", and the validate-then-refetch finding by the
stale-work rule. The rest are specific to the log renderer.
closed by its author with no new review activity. Generated image-update
PRs #1818–#1820 and #1825–#1827: no review comments.
should allow a documented drop.
Reviewed PR activity from October 16 through October 17. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly. Item 50 now records that #1828 merged with its
branch-list bound.
Findings from this window that were not turned into rules:
fixed all three current-head findings
before merge. The branch-list bound is item 50's evidence, and item 14
covers the mobile select font. cubic's
unborn-
HEADfindingresembles a P2 in the Fix console workspace changes across agents #1779
Kelos review:
a nested repository with no commits made
git add -Nfail. Both are inthe Changes collector (
workspace_changes.go). A search found no otherGit call site with this kind of finding, so no rule was added.
cd1fe90, andc029bdcrechecks the agent type after the pod wait. Nonew reviews. Its terminal-sanitization findings appear in no other PR.
should allow a documented drop.
Reviewed PR activity from October 17 through October 18. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly.
Findings from this window that were not turned into rules:
Kelos review
was edited in place after the final push. All but one cubic thread are
resolved. Existing rules cover each fixed finding:
paths trimmed input differently. The hint showed
/quitwith a trailing spaceas a disconnect, but Enter sent it to the agent. A
leading U+FEFF
bypassed the command checks.
sent a command with attachments as a message,
while the web composer blocked it.
highlight overlay
read a zero width while the composer was hidden
and was not resized when Conversation returned. The first version of the
Kelos review found the same problem.
invalid-command text had about 2.6:1 contrast in dark mode.
test that called the sync function instead of its scroll and resize hooks.
labeled commands that the runtime rejects while other work is pending. It
also cleared the draft before the rejection arrived. The pending-message
case was fixed. Both
cubic
and the first Kelos review had found it. cubic's
current-head P2
is still unresolved and has no reply. It covers
/goalsubmitted withqueued work during a non-goal turn. The current Kelos review rates the same
case P3 and suggests narrowing the docs. It notes that the client cannot
mirror the runtime exactly. The author says goal control during active
work is deliberate. A search of review comments since May found no other
PR with this kind of finding. The existing stale-work rule already requires
preserving the user's in-progress intent until the result is known, which
covers the lost draft. So no rule was added.
make testwithCODEX_HOMEandCODEX_AUTH_JSONunset,because an entrypoint test fails on
mainwith inherited Codex settings.#1517 reported this and was closed as not planned on August 8. No review
asks for a convention, so none was added.
comments. cli: add opt-in pretty logs for Claude Code tasks #1794, Let the label check read a pull request's labels #1803, feat(slack): fire TaskSpawners on emoji reactions #1807–feat(workspace): add clone.branches to clone only the checked-out ref #1809, and #1823: no new review activity.
should allow a documented drop.
Reviewed PR activity from October 18 through October 19. Only item 51 was
added. Its commit
963bf25fast-forwards the previous headc819a66. Afirst version was pushed and replaced within minutes using
--force-with-lease, to exempt referenced objects that do not exist yet.mainhas not changedAGENTS.mdorself-development/since theprevious window, and the PR still merges cleanly. Validation for that
commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
author answered and fixed all 12, and every thread is resolved. Apart
from item 51's evidence, existing rules cover them:
cloneandagentCredentialsfields
were lost on a v1alpha1 round trip,
so an update through v1alpha1 would give the agent the token again.
The author added annotation preservation and round-trip tests.
could exceed the 256 KiB annotation limit.
The author
capped
clone.pathsat 64 entries of 256 characters and tested the worst case.
missing Workspace was treated as unrestricted,
so Tasks could run on workers that have the full checkout and token.
vacuously
(1,
2,
3).
docs/reference.mdfindings aboutpodOverrides.Session restriction record lived on the agent-writable workspace volume,
so the agent could rewrite it and bypass the restart check. The author
removed the record
and rejected the restricted fields for persistent Sessions. A search of
review comments since January found no other case of agent-writable
state guarding a security check, so no rule was added.
validated the Workspace only after minting a token
and reconciling the Service. The only similar finding is a February
cubic P2 on #236, where the CLI's
runcommand validated the agenttype after creating a credential Secret. Two findings eight months
apart do not support a rule.
/goalP2was still unresolved at merge. The previous window explains why it did
not become a rule.
PRs #1819, #1820, #1825–#1827, and #1830: no review comments. cli: add opt-in pretty logs for Claude Code tasks #1794,
Let the label check read a pull request's labels #1803, and #1823: no new review activity.
should allow a documented drop.
Reviewed PR activity from October 19 through October 20. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly.
should allow a documented drop.
Reviewed PR activity from October 20 through October 21. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly.
Findings from this window that were not turned into rules:
#1836: cubic found no issues. The
Kelos review
found one P2. A Session suspended or failed while it waited for input
kept the new Input requested alert and stayed in the Sessions count,
because
lastNotificationoutlives the runtime. The rest of the Consolealready hides "Waiting for input" for those Sessions. The author
fixed it
in
ae49c1e: the alert now requires a Ready Session without usersuspension, and tests cover each phase. This is the same gap as item 45's
Show background task progress between Session turns #1786 finding, so item 45 already covers it. Item 45 is only on this
branch, not on
main. The reviewer prompts are unchanged because theKelos review found it.
cli: add opt-in pretty logs for Claude Code tasks #1794 (open): cubic's third round, at
c029bdcand3443d75, has fivefindings. The author fixed four in
3443d75andb6c6bf8:humanCountrounded values just under one million to1000.0k;NO_COLOR=disabled color, against the no-color.orgconvention;
kelos sessionstill used the presence-basedNO_COLORcheck. Theauthor shared one helper, as "Centralize behavior that must stay in
lockstep" asks.
The first three are specific to the log renderer. The fifth, a P3 asking
to add
--prettyto the README andskills/kelos/SKILL.mdexamples, isunresolved and has no reply. The documentation-consistency rule covers
it.
Generated image-update PRs #1833–#1835: no review comments. Let the label check read a pull request's labels #1803,
feat(slack): fire TaskSpawners on emoji reactions #1807–feat(workspace): add clone.branches to clone only the checked-out ref #1809, #1823, and Add Workspace options to restrict the checkout and agent credentials #1831: no new review activity.
There is still no reply to the October 13 question about whether item 49
should allow a documented drop.
Reviewed PR activity from October 21 through October 22. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly.
feat(slack): fire TaskSpawners on emoji reactions #1807–feat(workspace): add clone.branches to clone only the checked-out ref #1809, #1823, Add Workspace options to restrict the checkout and agent credentials #1831, #1833, and #1835: no new review activity.
value treated as absent found only cubic's
empty result diff P2.
It stays specific to the log renderer.
should allow a documented drop.
Reviewed PR activity from October 22 through October 23. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly.
Findings from this window that were not turned into rules:
Show individual background task durations in the console #1839, #1840, and Support files in inline AgentConfig skills #1841 (open) were opened on October 23. Each has one
cubic review and no author replies or Kelos reviews yet, so none of
their findings is used as evidence. Existing rules cover most of them:
reference entry
promises an elapsed time that runtimes reporting only a
background-task count cannot show.
P1 on #1840
says a due recurring prompt can wait indefinitely, because the
scheduler does not wake when a turn or background task ends.
can exceed the annotation limit for valid bundles.
Add Workspace options to restrict the checkout and agent credentials #1831 had the same kind of finding on October 19.
reads each skill file fully before checking its size.
--skillerror omits the skill.restored-files check accepts any skill,
and #1840's
history check accepts an empty prompt.
#1840 also lacks a
provider matrix for
/loop,an idle wakeup test,
and plain-terminal loop tests.
terminal
prints a
Loop activeline for every scheduled and replayed run,and
journal compaction drops loop state from the live history stream.
browser duration validator accepts values the server rejects.
example README omits the one-loop-per-Session limit.
The rest are specific to their features: #1840's one-second minimum
loop interval, loop status reported as unfinished work, and Go duration
text in the transcript, and Show individual background task durations in the console #1839's one-second timer that runs without a
start time.
feat(slack): fire TaskSpawners on emoji reactions #1807 (open): cubic's
P3
on October 22 found that a type comment overstates block-text handling
for bot messages. "Docs must match implementation" covers it. It has no
reply yet.
Generated image-update PRs #1833, #1837, and #1838: no review comments.
cli: add opt-in pretty logs for Claude Code tasks #1794, Let the label check read a pull request's labels #1803, Add branchLock to let read-only Tasks skip the branch lock #1808, feat(workspace): add clone.branches to clone only the checked-out ref #1809, #1823, and Add Workspace options to restrict the checkout and agent credentials #1831: no new review activity.
There is still no reply to the October 13 question about whether item 49
should allow a documented drop.
Reviewed PR activity from October 23 through October 24. Only item 52 was
added. Its commit
5cee024fast-forwards the previous head963bf25.mainhas not changedAGENTS.mdorself-development/since theprevious window, and the PR still merges cleanly. Validation for that
commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
2580827had twoP2s, and both were fixed in
953943ebefore merge. One is item 52'shard-coded date. The other is a
background task list that was not a live region,
so screen-reader users were not told when tasks started or finished. A
search of review comments since February found no other missing
announcement, so no rule was added. The
Kelos review
approved with two P3s, and both were fixed before merge. The list was
rebuilt every second, which "skip unchanged DOM updates" covers. No
readLoopfixture carried adescriptionkey, which the rule thatfixtures must exercise changed response fields covers.
Kelos review
at
dbf066eapproved with four P3s. Two are specific to this feature:an active loop stops
status.lastActivityTimefrom advancing, andscheduled runs fill prompt history. The other two are test gaps for
overdue-run wakeups and
loop.updatedrendering. cubic found the samegaps in the previous window, and "Test every distinct behavior path"
covers them. cubic's 12 first-round findings still have no replies.
deletion because a finalizer
Updatere-sends an immutable spec thatno longer round-trips. cubic's only
finding,
a P1, says the merge patch has no optimistic lock, so a concurrent
finalizer change can be lost. It has no reply yet, so it is not used
as evidence.
#1838, and #1842: no review comments.
should allow a documented drop.
Reviewed PR activity from October 24 through October 25. None of it
supported a new convention, so this window adds no commit.
mainhas notchanged
AGENTS.mdorself-development/since the previous window, andthe PR still merges cleanly.
base-agent.yamlstill matchesgjkim42/kanon-repo'sinstructions/AGENTS.md.Findings from this window that were not turned into rules:
podOverrides.runtimeClassName.cubic's
P2
says an explicit
runtimeClassName: ""passes the CRD schema butproduces a Pod that admission rejects. The author
added
MinLength=1in
da9a568, with an integration test. No rule was added: no maintainerhas reviewed the PR yet, and in #1058 the maintainer
asked to remove
MinLengthfrom a new optional field. cubic's
P3
says the new reference row names only the deprecated
spec.podOverridespath. Every other
podOverridesrow in that table uses the same path, sothe PR follows the existing layout. It has no reply yet.
has no reply. Generated image-update PRs #1837 and #1842: no review
comments.
should allow a documented drop.
Reviewed PR activity from October 25 through October 26. Only item 49 was
changed. Its commit
eb9bb35fast-forwards the previous head5cee024.mainhas not changedAGENTS.mdorself-development/since theprevious window, and the PR still merges cleanly.
gjkim42/kanon-repohasno commits since September 9, so
base-agent.yamlstill matches it.Validation for that commit:
make verify: passedgo test ./internal/examples/...: passedgit diff --check: passedFindings from this window that were not turned into rules:
findings:
Kelos API review
P2 found that the documented 1–4096 character path range allowed
paths the kubelet rejects: a path segment over 255 bytes, or a full
mount path over 4096 bytes. The Pod would then stay in
ContainerCreating. The authoradded byte checks when the config is used,
with ASCII and multibyte tests. The Unicode rule covers the
character-versus-byte part. A search of PRs for
mount pathfoundonly Support files in inline AgentConfig skills #1841, so no rule was added.
Removing the annotation superseded two of them: the annotation overflow
and the round-trip assertion that accepted any skill. "Bound work and
persisted state" covers the size check before reading each file, and
"CLI error messages must name the resource" covers the unnamed
--skillerror.Kelos review
approved with one P3. A directory argument that was itself a symlink
failed, because
filepath.WalkDirdoes not follow the root. Theauthor fixed it with
filepath.EvalSymlinksand added tests. Thefinding is specific to this command.
"Integrate native Session goals and loops across agents". It has no new
reviews or replies.
reply. Generated image-update PRs #1833, #1835, #1837, #1838, and #1842
merged on October 25 with no review comments.
decision on Support files in inline AgentConfig skills #1841, described in item 49.
Existing instructions already cover stale responses, history cursor recovery,
mobile controls, keyboard behavior, filesystem output checks, and meaningful
test coverage. PR #1749 already added screenshot guidance on
main, so it isnot duplicated here. Optional or conflicting UI suggestions, isolated nits,
and speculative future capabilities were excluded. No runtime code or upstream
base-agent content changes.
Does this PR introduce a user-facing change?
🤖 Generated with Claude Code