Skip to content

feat(report)!: target commit, remediation, simplified Markdown, and an always-numeric spend estimate (#1268) - #1276

Merged
aviggiano merged 31 commits into
unstablefrom
fix/1268-final-report-commit-remediation-spend
Oct 6, 2026
Merged

aviggiano merged 31 commits into
unstablefrom
fix/1268-final-report-commit-remediation-spend

Conversation

@aviggiano

@aviggiano aviggiano commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Implements #1268. The final report now:

  • names the evaluated commit in a Commit row;
  • no longer renders low-level diagnostic sections in report.md;
  • ends every production issue with a ### Remediation section and renders backtick spans in finding prose as inline code;
  • always shows a numeric Estimated spend, taken from accounting v4, with a trailing + when the amount is probably low.

The prompt, report contract, renderer, gates, ultrafuzz report diagnostics, docs and tests change together.

  1. Commit. The Source run ID row is replaced by - Commit: <hash>. report.json run_metadata.target_commit is required: the run's source revision (run.json source_revision, the commit every task worktree is created from), a lowercase 40-hex string, or null when the run recorded none. null renders as - Commit: `none` (no Git commit was recorded for the evaluated target). source_run_id and source_run_ids stay in report.json only.
  2. Simpler Markdown. report.md no longer renders ## Scoped coverage evidence or ## Artifact validation warnings.
    • report.json keeps coverage_evidence and run_metadata.artifact_validation_warnings.
    • A fixed sentence after the Run summary says when scoped coverage could not be measured, or was measured but incomplete.
    • The final-report gate now rejects a scoped coverage section or an exact-scope coverage score in report.md (REPORT_COVERAGE_EVIDENCE_MARKDOWN_UNEXPECTED) instead of requiring the section.
    • The public bundle requires both artifact-validation-warnings.json and .md whenever the report carries warnings.
  3. Remediation and inline code.
    • Every production issue ends with ### Remediation: the source finding's recommendation, or a fixed sentence saying no remediation was recorded.
    • The report stage only carries recommendation. On a production row, adding, changing or omitting it is a verification error. On a non-production row, adding one is an error and changing or omitting one is a warning.
    • Finding prose renders backtick spans as inline code. Link, list, heading, HTML and fence injection stay neutralized. Index anchors use the visible title.
    • The public projection redacts private paths at more boundaries, so prose that now renders more literally cannot reveal one.
  4. Spend. See "Spend rule" below.

What changed vs the original PR

  • One estimator. The run.json#spend_estimate estimator is removed. There is no imputation, no default attempt usage, and no self-imputation of the report task. restated_run_metadata and the host-only projection copy are gone too. The amount is always accounting v4's accounting.cumulative.estimated_spend_usd, the same number ultrafuzz stats, evals and Modal read.
  • Fallback prices live inside accounting v4. The versioned table ultrafuzz.fallback-pricing.2026-10-05 holds the models.dev list prices of that date for gpt-5.5, claude-opus-4-8, kimi-k3 and deepseek-v4-pro. v4 uses it for a model the catalog left unpriced, whether the catalog is available, unavailable or disabled. It looks models up through the same routes, so gateway and unknown IDs stay unpriced. The rates are pinned in pricing_catalog.model_prices, and pricing_catalog.fallback records the table and the models it priced.
  • Missing usage is counted, not invented. run.json gains attempts_without_usage (attempts, cumulative_count), the executed agent attempts with no usage event of their own, including source runs. report.json run_metadata gains the optional counts attempts_without_usage and unpriced_attempts.
  • Spend form is $X or $X+. Following the owner decision of 2026-10-06, report.md carries no note about excluded attempts. The structured counts stay in run.json and report.json, and they decide the +.
  • target_commit comes from the run's source revision. refactor!: remove campaign data governance (#1269) #1275 removed the data-governance record the original PR read. The 64-hex form is gone.
  • Recommendation is carry-only as an error for production rows, which fixes Greptile finding 2 (a changed recommendation could publish).
  • Greptile finding 1 (a continuation without local usage lost its source spend) no longer applies. spend_estimate is gone, v4's cumulative accounting already includes source runs, and a continuation without its own accounting uses its source run's accounting.
  • Path redaction. Home, private-directory, drive-letter and UNC paths are redacted at the same boundaries as rooted paths. A differential fuzz found 433 inputs that leaked at the original PR head. All 433 are fixed, and no new leaks or fail-closed projections appeared.
  • ultrafuzz report diagnostics accept $0.00, never expect unavailable, and expect the + whenever run.json says the amount is probably low.
  • Merged current unstable.

Spend rule

  • Amount. Accounting v4's estimated_spend_usd, with two decimals from one cent up and four to ten decimals below one cent (for example $38.72 and $0.0012). It is $0.00 when nothing was priced and never unavailable.

  • Pricing order. For each attempt's latest usage event, v4 uses the first of: the cost the adapter recorded, the price from the model's catalog route, or the fallback table.

  • The +. The spend ends in + exactly when at least one of these holds:

    • partial_pricing is true;
    • attempts_without_usage is present (some attempts recorded no usage);
    • unpriced_attempts is present (some usage could not be priced).

    The + means "there is probably more". With no +, everything recorded was priced and every attempt recorded usage.

  • Where it is enforced.

    • reportSpendIsProbablyLow and reportEstimatedSpend in @ultrafuzz/artifacts are the only place the + is decided.
    • The report-start projection, the terminal and unchecked restatements, and ultrafuzz report all use them. The restatements set the + again after they restate the counts.
    • The report@3 schema enforces the rule in both Ajv (if/then/else) and Zod. The pattern is ^\$(?:0|[1-9][0-9]*)\.[0-9]{2,10}\+?$.
    • The renderer requires the spend row to equal run_metadata.estimated_spend exactly.
  • Accounting v4's own label is unchanged. Its estimated_spend ($x+ or unavailable) stays in run.json for stats, and benchmark analysis passes it through as before. It never reaches the report.

- Models used: `gpt-5.5`
- Tokens used: `41,203,118`
- Estimated spend: `$38.72+`

Breaking changes

  • ultrafuzz/report@3 and the run.json schema change in place:
    • run_metadata.target_commit is required.
    • The spend pattern changes, and the schema checks the + against the counts.
    • run.json gains attempts_without_usage and pricing_catalog.fallback.
  • Reports written before this release no longer verify. They also no longer render as unchecked reports, because they fail the schema.
  • A controller from an earlier release rejects a run.json that this release has synchronized. Finish a run launched on an earlier release with that release.
  • EVMbench grades the copied report.md, so its scores are not comparable across this release.
  • Projects scaffolded earlier should delete .ultrafuzz/prompts/review/final-report.md and rerun ultrafuzz init.
  • v4 now looks up newly priced models through route-exclusive catalog routes, so a model that an aggregator used to price can stay unpriced unless the fallback table lists it.

Tests

  • Contract. Ajv and Zod agree on the spend pattern and on the + rule for each of the three conditions (contract-fixtures.test.ts). The shared formatter's output is valid with and without +.
  • Renderer. The spend row is rendered verbatim, with or without +. An unavailable, annotated, mismatched or +-inconsistent spend is rejected, and the counts are never rendered. The public projection is a fixed point (final-report-markdown.test.ts).
  • Projection.
    • The report-start projection adds + for partial pricing, unpriced attempts, attempts without usage, and accounting that priced nothing, and adds none for fully priced accounting (generated-workflow-verifier.test.ts).
    • Terminal and unchecked presentations restate the counts and set the + again, including dropping a report-start + when the whole run was fully priced (terminal-report-projection.test.ts, unverified-report.test.ts, runtime.test.ts).
  • Gates. The coverage-score scans do not read $38.72+, $0.00+ or $0.0008+ as a coverage score (artifact-gates.test.ts).
  • CLI. ultrafuzz report flags a missing + and a spend above accounting, and accepts $0.00+ and a fully priced spend without + (cli.test.ts). The campaign e2e checks that report.md shows the v4 amount with + for the SIGKILLed attempts.
  • Gates run. pnpm -w format:check, lint, lint:strict:ci, docs:check, typecheck and knip all pass.
  • Test results.
    • artifacts: 335/335.
    • runtime: renderer, projection, unchecked, metrics and pricing 119/119; final-report gates 36/36; runtime.test.js report publication, republication and accounting tests 7/7.
    • generated-workflow-verifier: 122/124. The 2 failures ("a missing or unrenderable prompt fails only its own task at assert-task-inputs" and "generated Smithers verification marker root must be a canonical directory") fail the same way with the test code from before this change on Node 24.9.
    • CLI report tests: 7/7. Campaign e2e (campaign-resume): 1/1.
    • modal: 129/129. evals: 103/103. prompts: 6/6. dashboard: 8/8.

Closes #1268.

🤖 Generated with Claude Code

RetriggerConfidence Score: 5/5

The PR appears safe to merge; no outstanding blocking finding was established.

Fix All in Claude CodeFindings

  1. P1 Source spend disappears ▶
Fix with agent prompt
### Issue 1
packages/runtime/src/workflow-sync.ts:undefined-1493
When a continuation has a source run but no local usage or executed agent attempts, this return skips the source-run estimate. The continuation’s synchronized `run.json` then has no `spend_estimate` or spend lineage, even if the source run has a persisted estimate.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

The PR changes final-report presentation and accounting, and the latest revision replaces selector-filtered prompt authorities with per-attempt indexes of admitted ancestor outputs.

  • Reports gain a target commit and remediation sections while removing low-level Markdown sections.
  • Estimated spend uses accounting v4 and marks potentially incomplete amounts with +.
  • The revised prompt input index includes dynamically generated ancestors.

Reviews (3) · Last reviewed commit: "Merge branch 'unstable' into fix/1268-fi..."

aviggiano and others added 9 commits October 2, 2026 14:45
Add required run_metadata.target_commit (hex SHA-1/SHA-256 or null) read from
the sealed data-governance record, render it as the Run summary Commit row in
place of Source run ID, keep it through the public projection, and add the
optional run.json spend_estimate contract with the shared
formatEstimatedSpendUsd formatter (#1268).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…and numeric spend

Update the final-report prompt, output-contract templates, prompt structure
tests, reference docs, and CHANGELOG for the Commit row, removed diagnostic
sections, Remediation, readable inline code, and the always-numeric spend
estimate (#1268).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…te (#1268)

Resolve each model's catalog price only from the provider its ID routes to (OpenRouter for gateway IDs, the first-party provider otherwise), reject all-zero rates except :free, strip context aliases for lookup, and return per-model provenance. Add the spend estimator with the dated fallback table, default attempt usage, unaccounted-attempt imputation and source-run lineage; synchronize run.json#spend_estimate with accounting on every pass, including runs whose agent attempts reported no usage; and make the live report-start metrics numeric from the same estimator.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…on and readable inline code (#1268)

Stop rendering Scoped coverage evidence and Artifact validation warnings in
report.md (report.json and the public warning companions keep them), state
unmeasured or incomplete scoped coverage in a fixed notice after the Run
summary, end every production issue with Remediation (the carried
recommendation or a fixed fallback), and render finding prose with
findingProse so backtick spans stay inline code while publicProse stays
frozen for every other field. The public projection now redacts a path
written after a literal backslash, a word-starting pipe, or a literal &lt;,
and its Markdown re-scan no longer reads the renderer's own escapes as path
syntax. The final-report gate now rejects a scoped coverage section or
exact-scope score with REPORT_COVERAGE_EVIDENCE_MARKDOWN_UNEXPECTED, a report
row that adds a recommendation its source lacks fails both report loops, and
public bundles require both warning companions when the report carries
warnings.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…report

Project the report-start spend from run.json spend_estimate (or the live
estimate), add an imputed estimate for the in-flight report attempt, keep
tokens, spend and partial_pricing from one source, restate spend from
spend_estimate in terminal and unchecked presentations, require the numeric
estimated_spend pattern, persist a host-only copy of the projection for
restarted verifiers, and align ultrafuzz report diagnostics (#1268).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… secret re-scans, and tables (#1268)

- Start-of-block escapes apply only where finding prose opens a block
  (description, Remediation, Proof of Concept steps, disposition entries),
  so a title opening with `[` or a redacted leading path keeps its index link.
- The Markdown path re-scan treats `\*`, `` \` ``, `&lt;`, and `&gt;` after a
  slash, and `&gt;` before one, as the renderer's escapes; `>` is now a path
  boundary in report.json, so a real path after `>` is still redacted.
- The speculative secret pass reads one rendered unit at a time (each line
  split at table pipes and bold delimiters, each fenced block whole) while
  positive detections still read the whole document, so prose ending in
  `token:` no longer fails the public projection.
- Finding titles in the provenance table, prior dispositions, and the
  non-production outcomes table render as finding prose with pipes escaped.
- An unselected reference-expectation property ID holding `<` or `>` renders
  as escaped text instead of raw HTML inside a code span.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ult usage at base rates (#1268)

The spend estimate joined attempts to usage by (workflow run, node,
iteration, attempt), so after `resume --retry-failed` / `--reset-node`
two occurrences sharing an attempt number collapsed into one imputation,
and usage on either one hid the other. It also skipped attempts of a
workflow run that a replay or fork replaced while still pricing that
run's usage, so the estimate dropped and could claim completeness.

- An occurrence is now an attempt-ledger entry (workflow_run_id,
  source_event_sequence). A usage event belongs to the occurrence of its
  workflow run, Smithers task, iteration, and attempt whose start and
  terminal events span its sequence; each occurrence is priced from its
  own latest snapshot and an executed agent occurrence with none is
  imputed, across every workflow run of the run. The Smithers task ID is
  `node:<strategy_attempt_id>`, which every task manifest enforces.
- `spend_estimate.unaccounted_attempts.entries` carry `workflow_run_id`
  and `source_event_sequence` and are unique by them (schema, semantic
  check, builder, docs).
- Default-usage imputation prices catalog models at base rates; the
  2,000,000-token default total no longer selects a context tier.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…v4 route lookup (#1268)

Accounting v4 records pricing_catalog.status "available" when the catalog
was fetched (or no model had a route) yet some models stay unresolved;
route-exclusive pricing makes that common. The Modal worker-result gate
rejected that state, failing status.json/result.json writes and reads.
Drop the rule; uncosted events of an unresolved model still require
usage.partial_pricing through the existing unpriced-event check, and the
unavailable/disabled consistency rules stay.

The #1268 changelog bullet now says v4 keeps its labels and semantics but
looks up newly priced models through the route-exclusive catalog, so some
models an aggregator used to price are now unresolved in v4.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…c path redaction

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@aviggiano
aviggiano requested a review from a team as a code owner October 3, 2026 05:22
Comment thread packages/runtime/src/workflow-sync.ts Outdated
const occurrences = spendEstimateAttemptOccurrences(replayNodeAttempts(input.layout).entries, input.usageEntries);
const unaccountedAttempts = occurrences.unaccounted;
const previous = input.metadata.spend_estimate;
if (input.usageEntries.length === 0 && unaccountedAttempts.length === 0) return { changed: previous !== undefined };

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Source spend disappears When a continuation has a source run but no local usage or executed agent attempts, this return skips the source-run estimate. The continuation’s synchronized run.json then has no spend_estimate or spend lineage, even if the source run has a persisted estimate.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/runtime/src/workflow-sync.ts
Line: 1493

Comment:
**Source spend disappears** When a continuation has a source run but no local usage or executed agent attempts, this return skips the source-run estimate. The continuation’s synchronized `run.json` then has no `spend_estimate` or spend lineage, even if the source run has a persisted estimate.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code

Comment thread packages/artifacts/src/semantic-gates.ts
aviggiano and others added 19 commits October 5, 2026 22:40
…iation-spend

- Take #1275's deletion of data-governance.ts and its test
- Read the final report's target_commit from the task's normalized
  source revision instead of the removed governance record
- Drop the verifier harness's governance environment and binding

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Delete spend-estimate.ts, final-report-run-summary.ts and their tests:
  no default attempt usage, mean imputation or report-start self-imputation
- Remove run.json#spend_estimate (schema, types, semantics, start-run strip)
  and restore base single-pass accounting synchronization
- Remove restated_run_metadata and the host-only final-report run metadata
  record; a restarted verifier re-derives the projection as on base
- Report start copies accounting v4's USD amount, else the source run's
  for an unsynchronized continuation, else the direct run's live usage,
  else zero usage; runtime presentations restate only from accounting
- Live metric spend is numeric (no +) and counts unpriced attempts
- `ultrafuzz report` no longer demands a + suffix and accepts $0.00
- Drop catalog provenance and zero-rate bookkeeping from pricing results

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- report@3 target_commit is a lowercase 40-hex commit or null; the
  64-hex branch belonged to the removed governance record
- Document it as task.sourceRevision / run.json source_revision
- Contract and renderer tests no longer accept a 64-hex commit

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ce table inside accounting v4

- Add ultrafuzz.fallback-pricing.2026-10-05: the models.dev cost objects
  of gpt-5.5, claude-opus-4-8, kimi-k3 and deepseek-v4-pro, priced
  through the same route lookup, so gateway and unknown IDs stay unpriced
- resolveLiveModelPricing prices what the catalog left unpriced from the
  table whatever the catalog status and records metadata.fallback
- Accounting v4 snapshots and pins those rates in model_prices, keeps the
  models unresolved and records pricing_catalog.fallback {table, models};
  stats, evals and Modal reprice from the same snapshot
- Validate fallback in the stored accounting reader and the run.json schema

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- New run.json root member attempts_without_usage {attempts,
  cumulative_count}: executed agent attempt occurrences with no usage
  event in their own event window, across every workflow run of the run
- cumulative_count adds the source run's count; the member is absent at
  zero, written on every pass (including an empty usage ledger), and kept
  across workflow replacement since each pass recomputes it
- Split sourceRunMetadata out of the source accounting reader
- Schema, type and semantics (unique occurrences, count >= list length)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- runSummaryUsage, in terminal-report-projection.ts, is the one reader of
  the Run summary's usage figures for the report-start projection and both
  runtime presentations: v4's USD amount, partial_pricing and unpriced
  event count, plus run.json's attempts_without_usage count
- Runtime presentations restate the accounting fields together and the
  attempts-without-usage count on its own; without accounting the agent's
  copy stays
- report@3 run_metadata gains optional attempts_without_usage and
  unpriced_attempts (positive integers)
- report.md renders "(excludes N agent attempt(s) whose usage was not
  recorded or could not be priced)" after the spend and "Models used:
  `none` (no model usage was recorded)" for an empty list

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…an error

- A changed or omitted recommendation on a $.issues row, which report.md
  renders as the issue's Remediation, now fails verification in both the
  severity-classified and the bounded report loops
- It stays a warning on non_production_outcomes, which never render it
- An added recommendation stays an error on every row

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…the same boundaries as rooted paths

- A differential fuzz (2,000 path-heavy prose inputs per build, five
  fields, four seeds) showed the PR publishing `\~/secret`,
  `*C:\Users\bob\key` and `\C:\...` unredacted where the base renderer
  failed closed
- Patterns 3-5 now start after `;`, `>`, `\`, `*` or a word-starting `|`
  like the `/`-rooted pattern (which still excludes `*`, so `**` globs stay
  readable); the Markdown re-scan and the slash-run normalizers mirror it
  with the renderer-escape lookbehinds and the escaped `\~`
- Against the PR head: 433 leaking inputs fixed, none added, no new
  fail-closed projections and no fixed-point failures

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd the source-revision commit

- artifacts-reports.md: Commit is the run's source revision; Estimated
  spend is v4's USD amount with the exclusion clause; pricing order with
  the versioned fallback table; where run.json records pricing_catalog,
  completeness and attempts_without_usage; the component-rate gap
- final-report prompt: the agent only copies run_metadata; no spend or
  imputation prose; the renderer writes the clause and the none line
- cli.md, config docs and the Modal guide follow the new behaviour
- Rewrite the #1268 CHANGELOG bullet, with the cross-release caveat

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- report.json target_commit equals run.json source_revision and the
  fixture HEAD, and report.md shows it
- run.json lists the SIGKILLed attempts without usage, gpt-5.5 is priced
  from the fallback table, and the spend line is v4's formatted amount
  with the exclusion clause
- ultrafuzz stats reports the same spend

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…orm and satisfy strict lint

- report.schema.json states the counts as exclusiveMinimum 0, as the
  zod export renders positive integers
- Split the long run-summary usage harness test and drop non-null
  assertions from the new run-documents test

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- mergedPricingCatalogMetadata names the fallback table once, next to the
  models it priced, instead of guarding the table twice

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- When Moonshot does not list kimi-k3, accounting keeps it unresolved and
  prices it from the fallback table, never at another provider's rate

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sage

- The resumed-report test's two report attempts recorded no usage, so the
  terminal publication restates attempts_without_usage and the spend line
  counts them

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…arrow the runtime export

- Live report-start metric: with no usage events, report `$0.00` excluding every attempt instead of no figure and no count
- Count attempts Smithers aggregated without a usage event in unpriced_attempts
- Re-export only runSummaryUsage from terminal-report-projection
- Docs: superseded-occurrence and late-usage gaps of attempts_without_usage, event count equals attempt count, sub-floor rounding of formatEstimatedSpendUsd

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…iation-spend

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…on note

- Owner decision (2026-10-06): report.md carries no "(excludes N agent
  attempts ...)" note; `Estimated spend` is `$X`, or `$X+` when the amount
  is probably low, and never `unavailable`
- reportSpendIsProbablyLow / reportEstimatedSpend in @ultrafuzz/artifacts
  decide the `+`: partial_pricing true, or attempts_without_usage or
  unpriced_attempts present; the counts stay in run.json and report.json
- report@3: estimated_spend matches ^\$(?:0|[1-9][0-9]*)\.[0-9]{2,10}\+?$,
  and an Ajv if/then/else plus a Zod refinement reject a `+` that disagrees
  with those fields
- The report-start projection, terminal and unchecked restatements apply the
  rule after restating the counts, so a report-start `+` drops once the
  whole run is fully priced
- The renderer prints estimated_spend verbatim and its Markdown check
  requires the spend row to equal it; the exclusion clause is gone
- `ultrafuzz report` expects the `+` whenever run.json says the amount is
  probably low, and still accepts $0.00
- Tests: contract parity for the `+` rule, renderer, projections, unchecked
  reports, CLI diagnostics, campaign e2e, and a coverage-scan check that
  `$38.72+` is not read as a score

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- artifacts-reports.md: the `+` rule and its three conditions, examples
  without an exclusion note, restatement resets the `+`, v4's own label
  never reaches the report
- cli.md: `ultrafuzz report` expects the `+` when run.json says the
  amount is probably low
- final-report prompt: copy the spend with its `+` exactly and never add
  a note
- CHANGELOG #1268 bullet follows

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…iation-spend

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
aviggiano and others added 2 commits October 6, 2026 16:00
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-spend

Resolve the CHANGELOG.md conflict by keeping both breaking-change entries.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Comments Outside Diff

These findings could not be posted inline.

  • P2 Valid snapshot gets accounting warning packages/cli/src/commands/report.ts:98 ▶

    While a run is active, ultrafuzz report --require-verified can show the verified agent report, which contains the accounting snapshot from when the report task started. This check instead uses the current run.json. If a later attempt adds missing or unpriced usage, the current spend requires a + that the valid earlier snapshot does not have, producing a misleading REPORT_ACCOUNTING_MISMATCH warning.

…-spend

Resolve the CHANGELOG.md conflict by keeping both breaking-change entries.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@aviggiano
aviggiano merged commit e35eeea into unstable Oct 6, 2026
17 checks passed
@aviggiano
aviggiano deleted the fix/1268-final-report-commit-remediation-spend branch October 6, 2026 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

report: include target commit and remediation, simplify Markdown, always estimate spend

1 participant