4610 Commits

Author SHA1 Message Date
jenkins
10a629d5a7 feat(ariadne): sweep seven projects, and stop advertising the wrong model
The sweep covered four projects because only four had a write allowlist.
ananke (Go, cmd/ and internal/), pegasus (Go backend, TS frontend) and
atlasbot (Python) all have SonarQube projects and mapped repositories; they
were excluded only for want of prefixes and suffixes, which are now set from
each repository's actual layout.

The per-sweep ceiling rises to seven, one per project. With rule-level dedupe
a project stops producing proposals once every rule it has is already under
review, so this is a ceiling rather than a rate - the backlog cannot become a
queue nobody drains.

The Hermes deployment annotation still advertised gpt-5.6-terra as primary.
The config has had claude-opus-5 as default and primary for some time, so the
annotation was telling operators the wrong thing about which model made a
decision.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 04:45:15 -03:00
flux-bot
5db36f9d78 chore(cassandra): automated image update 2026-08-07 06:29:55 +00:00
flux-bot
1ce9c6f383 chore(cassandra): automated image update 2026-08-07 06:25:56 +00:00
flux-bot
372bd9324f chore(cassandra): automated image update 2026-08-07 06:22:13 +00:00
flux-bot
9233e0d1a4 chore(cassandra): automated image update 2026-08-07 06:21:58 +00:00
flux-bot
01b2814889 chore(maintenance): automated image update 2026-08-07 05:15:42 +00:00
flux-bot
1a183d6075 chore(cassandra): automated image update 2026-08-07 05:03:24 +00:00
flux-bot
3288c6e2e9 chore(cassandra): automated image update 2026-08-07 05:03:16 +00:00
flux-bot
d429ab3c89 chore(maintenance): automated image update 2026-08-07 04:54:17 +00:00
flux-bot
8e6977adc2 chore(maintenance): automated image update 2026-08-07 03:52:04 +00:00
flux-bot
32f548a462 chore(maintenance): automated image update 2026-08-07 03:41:56 +00:00
flux-bot
770a7c05bc chore(maintenance): automated image update 2026-08-07 03:25:49 +00:00
flux-bot
17dd91814e chore(maintenance): automated image update 2026-08-07 03:16:02 +00:00
jenkins
8c47328b23 feat(ariadne): sweep four services, and link proposals to the finding
Only one pull request appeared because the sweep was scoped to one project at
one proposal per hour - a throttle I set deliberately while nothing had ever
run, not a limit of the mechanism. It has now run, so it widens to every
project whose job also has a write allowlist: ariadne, metis, soteria and
bstein-dev-home. The rest are left out because without allowed prefixes
nothing is patchable, and a sweep would spend a SonarQube call to discover it
has nowhere to write.

Still one proposal per project per hour. The backlog is 139 findings on
Ariadne alone; the constraint that matters is how many pull requests a person
will actually read, not how many the mechanism could open.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 00:06:33 -03:00
flux-bot
e1be7ef351 chore(maintenance): automated image update 2026-08-07 02:56:19 +00:00
flux-bot
15e04f75bb chore(maintenance): automated image update 2026-08-07 02:27:09 +00:00
jenkins
1bfb29388a feat(ariadne): link pull requests to the Hermes run that wrote them
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 23:17:06 -03:00
flux-bot
de2d680f17 chore(cassandra): automated image update 2026-08-07 02:02:23 +00:00
flux-bot
88b81c1ba7 chore(cassandra): automated image update 2026-08-07 01:59:02 +00:00
flux-bot
b29f9ec60c chore(cassandra): automated image update 2026-08-07 01:55:00 +00:00
flux-bot
7c4662a095 chore(cassandra): automated image update 2026-08-07 01:54:22 +00:00
jenkins
00af41891c fix(ariadne): read the SonarQube token from a path Ariadne can already reach
The sweep's token was injected from kv/data/atlas/quality/sonarqube-oidc,
which the maintenance role cannot read. I granted that path on the live policy
and verified the read, but the grant was reverted by whatever manages Vault
policy, and the next rollout wedged: vault-agent-init retries a 403 forever, so
the pod never initializes and the Deployment cannot roll. The old replica kept
serving, which is the only reason this was not an outage.

A template block that depends on a grant outside this repository is the actual
defect. The token now lives beside Ariadne's other credentials in
kv/data/atlas/maintenance/ariadne-db - a path its role has always been able to
read - so no policy change is needed and nothing outside this repo can revoke
it. Existing keys at that path were merged, not replaced.

Guarded with an if, so a deployment whose secret predates the key renders an
empty value and starts normally instead of blocking on a missing field. The
sweep then reports an empty token and skips, which is the right failure: no
sweep is much better than no Ariadne.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 22:42:23 -03:00
flux-bot
542ccfae6c chore(maintenance): automated image update 2026-08-07 01:40:41 +00:00
flux-bot
e78edf213f chore(maintenance): automated image update 2026-08-07 01:38:08 +00:00
flux-bot
918898276a chore(maintenance): automated image update 2026-08-07 01:37:12 +00:00
flux-bot
d9605ebe6e chore(maintenance): automated image update 2026-08-07 01:35:35 +00:00
flux-bot
b82d5d0206 chore(maintenance): automated image update 2026-08-07 01:33:03 +00:00
flux-bot
b4d8109cf6 chore(maintenance): automated image update 2026-08-07 01:28:57 +00:00
flux-bot
42ddcf5c79 chore(cassandra): automated image update 2026-08-07 01:25:04 +00:00
flux-bot
23c7830f9c chore(cassandra): automated image update 2026-08-07 01:18:50 +00:00
flux-bot
f76ce0b41f chore(cassandra): automated image update 2026-08-07 01:14:59 +00:00
flux-bot
a2c9f828ff chore(cassandra): automated image update 2026-08-07 01:13:56 +00:00
jenkins
d5440a9dd4 feat(ariadne): enable the SonarQube sweep, scoped to one project
Static analysis findings never fail a build, so nothing has ever pulled them
into triage. There are 139 open on Ariadne alone, each already naming its
file, line and rule - better-located evidence than the console text the
code-repair flow usually mines.

Scoped deliberately narrow to start: one project, one proposal per hourly
sweep, and only findings SonarQube itself estimates at 20 minutes or less.
Effort is the filter rather than severity because it is the closest proxy for
the single anchored change the patch validator can actually check. The
64-open-proposal ceiling still applies on top, so the queue cannot grow while
nobody is draining it.

Hotspots are not in the type list and cannot be: SonarQube models them as
needing human review, this instance's quality gate fails on exactly that
condition, and an automation that resolved them would be marking them reviewed
without review.

The token comes from Vault. Ariadne's maintenance role was granted read on
kv/data/atlas/quality/sonarqube-oidc, which it did not previously have.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 22:13:03 -03:00
flux-bot
826cbe2976 chore(maintenance): automated image update 2026-08-07 00:34:37 +00:00
flux-bot
2b5bf70043 chore(maintenance): automated image update 2026-08-07 00:22:19 +00:00
jenkins
8140e0bf75 feat(ariadne): allowlist clear_stuck_agent_pods
A build whose agent never started is a distinct failure from one that lost a
connection mid-run, and a plain retry queues behind the same stuck pods. The
remediation clears pods that have already succeeded or failed - Ariadne's
existing scheduled cleanup - and only then rebuilds.

Mapping jenkins_agent_provisioning_failure to it keeps the one-classification-
one-action rule: a diagnosis asking for this action under any other
classification is still refused before anything runs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 21:16:21 -03:00
flux-bot
359cd07dfd chore(cassandra): automated image update 2026-08-07 00:15:39 +00:00
flux-bot
82c1baae10 chore(maintenance): automated image update 2026-08-07 00:13:14 +00:00
flux-bot
ff59f97ed0 chore(cassandra): automated image update 2026-08-07 00:06:20 +00:00
flux-bot
4bad19eae4 chore(maintenance): automated image update 2026-08-07 00:00:14 +00:00
flux-bot
a4aee66bd7 chore(cassandra): automated image update 2026-08-06 23:59:08 +00:00
flux-bot
47bfc3956e chore(cassandra): automated image update 2026-08-06 23:58:01 +00:00
jenkins
2fceb9caa5 feat(ariadne): allowlist reclaim_workspace_storage
Maps workspace_storage_exhausted to the reclaim action, so a build that failed
on a full workspace volume is remediated rather than escalated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 20:55:52 -03:00
jenkins
0af41aa995 feat(ariadne): declare the fix categories, and show them beside the actions
The three categories now appear in the deployment next to the action
allowlist, and the monitor prints both at the policy gate so the difference is
visible during a demo rather than asserted: two ids Ariadne may execute on its
own authority, three categories it may only ask Hermes to propose a patch for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 20:46:55 -03:00
jenkins
ba53dbab80 fix(gitea): raise the memory ceiling; time-bound the demo cleanup calls
Gitea wedged at 2073Mi against a 2Gi limit: its API stopped answering even on
its own loopback, and the repeated SSH LoginGraceTime drops in its log were
starvation symptoms rather than a separate fault. Raised to 3Gi.

The reset command's Gitea calls had no --max-time, so a slow service became an
indefinite hang with no output - the script appeared frozen after 'clearing
bstein/hermes-code-demo'. They now fail after 25 seconds and say so.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 20:04:42 -03:00
jenkins
137ea77e95 fix(demo): read the container exit code, not the Job status
The fixture check waited on the Job's .status.succeeded/.status.failed. The
kubelet records a container's exit code the instant it stops, but the Job
controller reconciles those fields on its own schedule: observed at 2m24s,
4m27s and 34m on this cluster for identical work. During that window the pod
had already exited 1 and the build sat printing 'Will try again after 13 sec',
looking hung long after the test had finished, which is unusable in a demo.

Polling the pod's terminated exitCode removes the controller from the path
entirely. The Job is still used, so the evidence shape is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 17:11:45 -03:00
flux-bot
47d69cdd37 chore(cassandra): automated image update 2026-08-06 20:02:10 +00:00
flux-bot
4a303bffb7 chore(cassandra): automated image update 2026-08-06 19:58:14 +00:00
flux-bot
525b366ac7 chore(cassandra): automated image update 2026-08-06 19:54:19 +00:00
flux-bot
ddaaf75462 chore(cassandra): automated image update 2026-08-06 19:54:11 +00:00