Capture structured evidence for rejected flake updates #129

Closed
opened 2026-07-31 22:00:03 +01:00 by nimmo · 4 comments
Owner

Context

The producer already isolates failures to individual flake inputs and affected hosts, but its rejected build log is temporary and is removed after classification. A remediation agent needs deterministic, sanitised evidence rather than scraping a Forgejo console transcript.

Scope

Extend the Nova producer to emit a bounded incident bundle whenever an input candidate is rejected for a non-infrastructure failure.

Checklist

  • Preserve the baseline and rejected candidate lock identities and input revisions.
  • Record the input group, failed host, build target, command and exit status.
  • Classify infrastructure, evaluation, assertion or test, and derivation-build failures.
  • Identify candidate failing derivations and extract pname, version, source position and relevant log excerpts where available.
  • Retain the exact failed candidate flake.lock or an equivalent reproducible lock artifact.
  • Sanitise logs and bound artifact sizes before exposing them to an LLM.
  • Treat all upstream build output as untrusted prompt-injection-capable data.
  • Generate a stable incident fingerprint for Forgejo deduplication.
  • Add regression fixtures for every classification and malformed or missing evidence.
  • Preserve current atomic publication and partial-success behaviour.

Completion criteria

A rejected update leaves a reproducible, sanitised, machine-readable incident bundle while infrastructure failures and unrelated accepted inputs retain their current behaviour.

Depends on the existing per-input isolation and producer publication invariants. Refs #128 for the consumer benchmark contract.

## Context The producer already isolates failures to individual flake inputs and affected hosts, but its rejected build log is temporary and is removed after classification. A remediation agent needs deterministic, sanitised evidence rather than scraping a Forgejo console transcript. ## Scope Extend the Nova producer to emit a bounded incident bundle whenever an input candidate is rejected for a non-infrastructure failure. ## Checklist - [ ] Preserve the baseline and rejected candidate lock identities and input revisions. - [ ] Record the input group, failed host, build target, command and exit status. - [ ] Classify infrastructure, evaluation, assertion or test, and derivation-build failures. - [ ] Identify candidate failing derivations and extract pname, version, source position and relevant log excerpts where available. - [ ] Retain the exact failed candidate flake.lock or an equivalent reproducible lock artifact. - [ ] Sanitise logs and bound artifact sizes before exposing them to an LLM. - [ ] Treat all upstream build output as untrusted prompt-injection-capable data. - [ ] Generate a stable incident fingerprint for Forgejo deduplication. - [ ] Add regression fixtures for every classification and malformed or missing evidence. - [ ] Preserve current atomic publication and partial-success behaviour. ## Completion criteria A rejected update leaves a reproducible, sanitised, machine-readable incident bundle while infrastructure failures and unrelated accepted inputs retain their current behaviour. Depends on the existing per-input isolation and producer publication invariants. Refs #128 for the consumer benchmark contract.
Author
Owner

Use codex/gpt-5.6-terra with high reasoning.

This is a bounded, regression-heavy shell and Nix instrumentation task with clear schemas and invariants. Terra offers the best intelligence and cost balance for sustained implementation and fixture work; high reasoning is appropriate for correctly separating derivation, evaluation, test, and infrastructure failures. Escalate a disputed parser or publication-invariant design to Sol before merging.

Model guidance: https://developers.openai.com/api/docs/guides/latest-model

## Recommended Codex model Use `codex/gpt-5.6-terra` with `high` reasoning. This is a bounded, regression-heavy shell and Nix instrumentation task with clear schemas and invariants. Terra offers the best intelligence and cost balance for sustained implementation and fixture work; high reasoning is appropriate for correctly separating derivation, evaluation, test, and infrastructure failures. Escalate a disputed parser or publication-invariant design to Sol before merging. Model guidance: https://developers.openai.com/api/docs/guides/latest-model
Author
Owner

PR #133 merged after all validation, CI, and automated-review gates passed. Reopened pending required live evidence from a normal even-hour fleet auto-update and the subsequent no-op follow-up. No deployment will be forced.

PR #133 merged after all validation, CI, and automated-review gates passed. Reopened pending required live evidence from a normal even-hour fleet auto-update and the subsequent no-op follow-up. No deployment will be forced.
Author
Owner

Passive rollout evidence: Lyra ran its normal nixos-auto-update timer at 2026-08-01 06:05:54 BST. The build completed, the detached switch finished successfully at 06:07:30, and the updater verified deployed configurationRevision 4fcb27611c (the PR #133 merge). No deployment was forced. Package selection/version changes: none; closure delta: 0 paths net, -12.5 MiB. Keeping this issue open for the required subsequent scheduled no-op follow-up.

Passive rollout evidence: Lyra ran its normal nixos-auto-update timer at 2026-08-01 06:05:54 BST. The build completed, the detached switch finished successfully at 06:07:30, and the updater verified deployed configurationRevision 4fcb27611cf7f05165cad0cbaea4bd2e9066c064 (the PR #133 merge). No deployment was forced. Package selection/version changes: none; closure delta: 0 paths net, -12.5 MiB. Keeping this issue open for the required subsequent scheduled no-op follow-up.
Author
Owner

Scheduled no-op follow-up verified on 2026-08-01 without forcing an update. Vega ran at 08:11:39 BST and Lyra at 08:13:05 BST; both fetched origin/main, reported Repository already matches origin/main (4fcb27611c), logged Nothing changed in pull, system is current, and exited status 0/SUCCESS. Both hosts still report configurationRevision 4fcb27611c. This completes the genuine deployment plus subsequent no-op evidence required for PR #133.

Scheduled no-op follow-up verified on 2026-08-01 without forcing an update. Vega ran at 08:11:39 BST and Lyra at 08:13:05 BST; both fetched origin/main, reported Repository already matches origin/main (4fcb27611cf7f05165cad0cbaea4bd2e9066c064), logged Nothing changed in pull, system is current, and exited status 0/SUCCESS. Both hosts still report configurationRevision 4fcb27611cf7f05165cad0cbaea4bd2e9066c064. This completes the genuine deployment plus subsequent no-op evidence required for PR #133.
nimmo closed this issue 2026-08-01 08:20:28 +01:00
Sign in to join this conversation.
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nimmo/nixos-config#129
No description provided.