Skip to content

docs(devlog): close out the priority-65 unit - #3485

Closed
lidge-jun wants to merge 17 commits into
devfrom
codex/priority65-closeout
Closed

docs(devlog): close out the priority-65 unit#3485
lidge-jun wants to merge 17 commits into
devfrom
codex/priority65-closeout

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Summary

Closes out the priority-65 unit by recording what each work-phase actually produced. Documentation only — no src/, gui/, or tests/ changes.

Three PRs landed from this unit:

PR squash contents
#3471 4968d0f26 responses tool-result boundary (#3259) + combo context-cap failover (carried from #3461)
#3474 00834d710 Claude combo metadata (carried from #3332) + reset-credit identity (#3375 axis D) + two gate-blocked carries (#3327, #3251)
#3477 413227888 rollback journal deletion (part of #3379)

What these documents record

The outcome files keep the parts that would otherwise be lost, which are mostly the places where a plan turned out to be wrong:

  • wp3 — the carried PR mapped an OUTPUT ceiling onto an INPUT field, collapsing a 1M combo window to 128k. Verified in three stages, not two: the sniper assertion was confirmed still-red with the defective mapping applied before being fixed, so it demonstrably targets the defect rather than the feature.
  • wp4 — the plan said "squash merge fix(combos): fail over provider-specific context caps #3461". Checking immediately before acting showed it was a fork PR whose head had only the four gate checks; Cross-platform CI had never run on it. Merging on gate-green would have violated this unit's own exact-head-CI criterion, so it became a carry.
  • wp5 — opening the ledger fails closed and settling fails open, because a reset credit is irreversible and the two directions produce double-spend by opposite routes.
  • wp7 — GUI tests were written after the component, so they were proven non-vacuous by reverting the component and confirming exactly four failures. A pre-existing key-set assertion caught the new deletable field; the key list was extended rather than the assertion loosened.
  • wp8 — dispositions for the seven items that were examined and deliberately not implemented, each with the evidence that decided it.

Regression proof

SHA Cross-platform CI
session start 2421e44ce failure — macos, tests/codex-auth-context.test.ts:1461
final 413227888 success

dev was already red when this work started, which is why the baseline was captured first — otherwise "did I break it" is unanswerable. All three squash SHAs verified as ancestors of the final origin/dev.

Also recorded: macOS failed twice during this unit and passed on rerun both times, on tests/codex-shim.test.ts and tests/lab-fabric-task.test.ts. Neither file is in any of these diffs, and both pass locally (77/77 and 49/49). Two timing-sensitive tests are intermittently unstable on the macOS runner; that is worth its own look.

Verification

bun run typecheck exit 0, bun run privacy:scan passed. The full local suite was not run at any point in this unit.

Checklist

  • Documentation only; no runtime change
  • bun x tsc --noEmit clean
  • bun run privacy:scan clean
  • No GUI change (no screenshot required)

Summary by CodeRabbit

  • New Features
    • Added idempotent reset-credit consumption through optional operation IDs in the API and CLI.
    • Added rollback journal entry deletion with confirmation, retention safeguards, and localized messaging.
    • Added model tier outcome details to log tooltips.
    • Improved provider output-budget handling and combo failover for context-limit errors.
  • Bug Fixes
    • Invalid tool results now receive a clear 400 response on translating routes.
    • Restored provider metadata for combo models without collapsing input capacity.
  • Documentation
    • Updated management API references with operation ID behavior and expanded error responses.

jun and others added 17 commits September 4, 2026 22:27
Eight work-phases, each one PABCD cycle consuming one decade doc. Two adversarial audit rounds; the first found that the planned schema guard would have broken the passthrough fail-closed contract, and re-running all three candidate designs against 63 files proved it (schema guard: +1 regression; translation-path guard: none).
…ifier table

The plan claimed 55 of the 63 candidate files reach the guard. Measured: 18. The other 45 are adapter/parser unit tests that never enter handleResponses, so V5 proves exhaustive candidate collection rather than broad guard execution.
privacy:scan reads devlog/, so a Co-authored-by trailer spelled out in a plan document fails CI. The trailer still ships in the commit; the plan now names the gh query that resolves the address at implementation time.
PR #3461 is a fork PR whose head has only the four gate checks; Cross-platform CI never ran and fork workflows wait on approval. Merging on gate-green alone would violate the unit's own exact-head-CI criterion.
A provider can report its own target hard cap with a non-semantic vendor code
(5059 + invalid_request_prompt_too_long). classifyError remaps any "maximum
context" text to context_length_exceeded, which the stop list catches, so the
chain ended at the first target even when a larger-context target was still
queued behind it.

The matcher is deliberately narrow: status 400 AND (the type string OR code
5059 together with the "Prompt N > M maximum context length" shape). A bare
5059 still stops, as do a generic 400 context refusal and a generic 413.

Carried from #3461 because that fork PR's head only ever ran the four gate
checks -- Cross-platform CI never ran on it, and fork workflows wait on
approval, so gate-green was not merge evidence.

Co-authored-by: RHODIZ IT <info.rhodiz@gmail.com>
A tool result is paired by call_id, but inputItemSchema's permissive catch-all
(schema.ts:106) accepts a tool item whose strict alternative failed only for a
missing call_id, and parser.ts:738/752 then assigns it unchecked. A translating
adapter consumes `toolCallId: string` holding undefined: kiro-wire.ts:32
TypeErrors, ollama-native.ts:334 throws, and anthropic.ts:775 sends
"[tool_result without adjacent tool_use: undefined]" upstream.

Guard in handleResponsesInner after the passthrough branch, keyed on the adapter
rather than on position. The check cannot live in the schema: parseRequest runs
before the passthrough branch, so a parse-time rejection would also kill
forward/key passthrough and routed compaction - paths that build from _rawBody,
never read context.messages, and already degrade an unpaired output to
"[tool output for unknown call]" on their own. routedCompaction skips the
passthrough branch yet is still _rawBody-based, which is why the condition tests
the adapter instead of the code position.

Closes #3259
…budget

Reimplementation of #3332, which could not be cherry-picked: the PR is
CONFLICTING/DIRTY because dev added modelReasoningEfforts to both Anthropic
registry entries after it was written.

Thin Claude discovery rows carry only id + context window, so the combo
intersection collapsed to text-only with no effort ladder and the Codex app
hid image attachments and the effort picker for every Claude combo. Fall back
to the generated vendor table when the caller supplies no fallback, tolerating
point releases by trimming to the family row (claude-fable-5-1 -> claude-fable-5).

Codex never sends max_output_tokens, so the Anthropic adapter's omitted-limit
default of 8192 truncated long answers with stop_reason=max_tokens. Honor the
provider's configured budget and register 64k for both Anthropic entries.

One line is deliberately changed from the original PR. It mapped the vendor
metadata.maxTokens OUTPUT ceiling onto maxInputTokens; that value is read by
the combo intersection's Math.min over member input ceilings, collapsing a 1M
Claude combo window to 128k and its autoCompactTokenLimit from 900k to 128k
(measured). It fills maxOutputTokens here instead. The original test used
toMatchObject on contextWindow only and could not see the defect, so a
dedicated regression asserts the input window and autoCompact budget survive.

Verification: bun run typecheck, bun test tests/codex-catalog.test.ts (268
pass), bun test tests/anthropic-reasoning.test.ts (67 pass) - all exit 0.

Co-authored-by: full999 <daiki.furutani@walker-s.co.jp>
…ntity

The durable ledger for manual reset-credit operations was complete and had no
production caller: openManualResetCreditOperation, settleManualResetCreditOperation,
and markManualResetCreditOperationAmbiguous were referenced only by their own test
file. Meanwhile the consume endpoint minted a fresh crypto.randomUUID() per call and
sent it as redeem_request_id, so a retry of the same logical redeem looked like a new
one to upstream. Spending a reset credit is irreversible, which is the case where
idempotency has to be the caller's to assert.

An optional operationId in the request body now opens a ledger row keyed by the
physical ChatGPT account, and the canonical id becomes the redeem_request_id.
Opening fails closed: capacity and unavailable return 503 rather than falling back
to a random id, because that fallback is exactly the double-spend the identity
exists to prevent. A row that is already terminal replays its recorded code instead
of trusting upstream idempotency, and an id owned by another account returns 409.

Settling fails open. By then the credit is already spent, so reporting a ledger
failure to the user would invite a manual retry -- the double-spend again, from the
other direction. Dispatch errors and non-2xx responses mark the row ambiguous so a
later replay is never mistaken for a new operation.

Omitting operationId keeps today's behavior exactly, including the random id, so no
existing caller changes. The CLI gains --operation-id; the GUI is unchanged, since
guessing a reuse window there could swallow a genuinely intended second redeem.
…comment

Carried from #3327. Two gaps the original #3198 tests left open: the uncalibrated-plan
notice was never pinned independently of the incomplete-coverage gate, so folding it
under that branch would have passed every existing fixture while silently hiding it;
and the malformed-plan path was described as if it reached aggregation the same way an
unlisted plan name does, when poolAccountDto strips it earlier via codexPlanValue and
the aggregate sees an absent plan instead.

One assertion is narrowed from the original.  over the whole
envelope also matches any unrelated field whose name contains that substring --
serviceTier, tierOutcome -- so it would fail on changes with nothing to do with plan
leakage. Scoped to the report rows and to the quoted key, which is where the malformed
value could actually surface.

Carried rather than merged in place: #3327 is a fork PR, and Cross-platform CI never
ran on its head. enforce-target was also red there because touching gui/tests/ trips
the UI-screenshot gate on a test-only change.

Co-authored-by: olddonkey <olddonkeyblog@gmail.com>
Carried from #3251 (both commits, in order). The backend already computed
`tierOutcome` and shipped it to the GUI on every log entry via
requestLogEntryFromPersistedUsage, and the GUI consumed it nowhere -- `rg tierOutcome
gui/src/` returned zero hits before this change. So a bare `responseTier=default`
read as a denial even when the turn had in fact been scheduled as priority.

The tooltip now qualifies the echoed tier with its confirmation:

    responseTier=default (assumed)
    responseTier=default (downgraded: response-declined)
    responseTier=priority (confirmed)

Deliberately not turning `assumed` into `confirmed` for the ChatGPT-internal Codex
backend. That backend answers `service_tier: "default"` on turns it scheduled as
priority, and reading the echo as authoritative is what #2558 was. The point is to
show the uncertainty rather than to paper over it.

Carried rather than merged in place: #3251 is a fork PR whose head never ran
Cross-platform CI, and its enforce-target failure is the UI-screenshot gate.

Co-authored-by: Abhishek Sharma <abhicse24@gmail.com>
An expired rollback row was a dead entry: its snapshot bytes were gone, so
restore was refused, and nothing could remove it. The journal route was GET-only
and the list offered no delete affordance anywhere.

Deletion is expressed as an APPEND. Rewriting journal.jsonl without the row
would break all three things the file header promises -- appendOperation commits
and nothing else, so a read-modify-write races concurrent appends; a torn
rewrite truncates the whole log rather than the one trailing line listOperations
tolerates; and no lock covers this file, because append-only never needed one.
A tombstone record retires an opId instead, and listOperations collects
tombstones in the same pass before any client filtering, then filters after the
whole file is read. Both orderings matter: a tombstone carries an opId and no
clientId, so filtering by client first would resurrect the row on the
per-client route while the global route hid it, and an in-loop check would miss
every tombstone because it is always appended after the row it retires.

The newest row per client is refused with 409 by the SERVER, re-read
immediately before the write rather than trusted from the rendered list. It is
the undo entry point, and an admin-token caller has no GUI to hide a button in.
The GUI mirrors that with a server-computed deletable field so the rule does not
exist in two places. Snapshot bytes are pruned AFTER the tombstone commits, so a
failed cleanup leaves the row retired and the leftover disclosed through
retentionDegraded, rather than destroying a backup for a deletion that then
failed to record.

Documented fallout: pruneSnapshots builds its keep set from listOperations, so a
retired row no longer occupies a retention slot. Snapshots survive longer, never
disappear early, but "ten backups per client" now counts live rows.

The DELETE route carries a deferred-verb exemption; the CLI verb is owed by a
later work-phase. Confirmation reuses the existing ConsequenceDialog, and the
409/404 codes are registered in refusal-copy so the server English never reaches
a non-English locale.

Design of record: devlog/_plan/260904_priority65_closeout/060_wp7_rollback_journal_crud.md

Refs #3379
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 4, 2026 16:08
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 4, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-04T16:15:47.759820Z 3656bb7 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 4, 2026
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • UI screenshot required.

What to do

  • Add a screenshot of the UI change to the PR description.

This pull request was already a draft. Its draft status will be preserved after every issue above is resolved.

@github-actions
github-actions Bot marked this pull request as draft September 4, 2026 16:08
@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: 5060e9e8-35f7-4cc9-a28d-5cd795adb7bd

📥 Commits

Reviewing files that changed from the base of the PR and between 0661469 and 3656bb7.

📒 Files selected for processing (64)
  • devlog/_plan/260904_priority65_closeout/000_research.md
  • devlog/_plan/260904_priority65_closeout/010_wp2_responses_boundary.md
  • devlog/_plan/260904_priority65_closeout/020_wp3_combo_metadata_carry.md
  • devlog/_plan/260904_priority65_closeout/030_wp4_combo_context_cap.md
  • devlog/_plan/260904_priority65_closeout/040_wp5_reset_credit_identity.md
  • devlog/_plan/260904_priority65_closeout/050_wp6_gate_unblock.md
  • devlog/_plan/260904_priority65_closeout/060_wp7_rollback_journal_crud.md
  • devlog/_plan/260904_priority65_closeout/070_wp8_dispositions_and_regression.md
  • devlog/_plan/260904_priority65_closeout/080_outcome.md
  • devlog/_plan/260904_priority65_closeout/081_outcome_wp4.md
  • devlog/_plan/260904_priority65_closeout/082_outcome_wp5.md
  • devlog/_plan/260904_priority65_closeout/083_outcome_wp6.md
  • devlog/_plan/260904_priority65_closeout/084_outcome_wp7.md
  • devlog/_plan/260904_priority65_closeout/085_outcome_wp8.md
  • docs-site/src/content/docs/fr/reference/management-api.md
  • docs-site/src/content/docs/ja/reference/management-api.md
  • docs-site/src/content/docs/ko/reference/management-api.md
  • docs-site/src/content/docs/reference/management-api.md
  • docs-site/src/content/docs/ru/reference/management-api.md
  • docs-site/src/content/docs/tr/reference/management-api.md
  • docs-site/src/content/docs/zh-cn/reference/management-api.md
  • docs-site/src/content/docs/zh-tw/reference/management-api.md
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/fr.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/tr.ts
  • gui/src/i18n/zh-TW.ts
  • gui/src/i18n/zh.ts
  • gui/src/pages/Logs.tsx
  • gui/src/pages/integrations/FileIntegrationPage.tsx
  • gui/src/pages/integrations/IntegrationsOverview.tsx
  • gui/src/pages/integrations/RollbackHistory.tsx
  • gui/src/pages/integrations/integration-api.ts
  • gui/src/pages/integrations/refusal-copy.ts
  • gui/src/pages/logs-model-title.ts
  • gui/tests/integrations-rollback-history.test.tsx
  • gui/tests/provider-capacity-shell.test.tsx
  • src/adapters/anthropic.ts
  • src/cli/account-auth.ts
  • src/codex/auth-api.ts
  • src/codex/catalog/provider-fetch.ts
  • src/combos/failover.ts
  • src/integrations/journal.ts
  • src/integrations/store.ts
  • src/providers/registry.ts
  • src/server/management/integration-routes.ts
  • src/server/management/route-registry.ts
  • src/server/responses/core.ts
  • tests/anthropic-reasoning.test.ts
  • tests/cli-account.test.ts
  • tests/codex-auth-api.test.ts
  • tests/codex-catalog.test.ts
  • tests/combos.test.ts
  • tests/integrations-journal.test.ts
  • tests/logs-model-tier-confirmation.test.ts
  • tests/management-integration-journal-delete.test.ts
  • tests/management-integration-routes.test.ts
  • tests/provider-quota.test.ts
  • tests/responses-compaction-routing.test.ts
  • tests/responses-parser.test.ts
  • tests/server-combo-failover-e2e.test.ts

📝 Walkthrough

Walkthrough

The pull request combines several closeout work packages. It adds tool-result boundary validation, combo metadata and failover handling, reset-credit idempotency, rollback journal deletion, model-tier display changes, localized documentation, tests, and development outcome records.

Changes

Responses boundary

Layer / File(s) Summary
Tool-result validation and regression coverage
src/server/responses/core.ts, tests/responses-parser.test.ts, tests/responses-compaction-routing.test.ts
Translating adapters now reject missing or empty call_id values with a 400 response. Passthrough routes retain their existing fallback behavior. Tests cover malformed, paired, passthrough, and parser-tolerance cases.

Combo metadata and failover

Layer / File(s) Summary
Vendor metadata and output-budget carry
src/codex/catalog/provider-fetch.ts, src/adapters/anthropic.ts, src/providers/registry.ts, tests/codex-catalog.test.ts, tests/anthropic-reasoning.test.ts
Combo members restore vendor metadata without collapsing input limits. Anthropic requests use configured output budgets when callers omit a limit.
Provider context-overflow failover
src/combos/failover.ts, tests/combos.test.ts, tests/server-combo-failover-e2e.test.ts
Provider-specific prompt-length errors now hop to another combo target. Generic invalid requests with the same provider code still stop.

Reset-credit operation identity

Layer / File(s) Summary
Ledger-backed reset-credit execution
src/codex/auth-api.ts, src/cli/account-auth.ts, tests/codex-auth-api.test.ts, tests/cli-account.test.ts
The consume route and CLI accept optional UUIDv4 operation identifiers. The route supports durable replay, identity mismatch errors, capacity handling, and ambiguous upstream outcomes while preserving legacy behavior when the identifier is absent.
API documentation
docs-site/src/content/docs/*/reference/management-api.md
Management API references document operationId, replay behavior, identity mismatches, and expanded error codes.

Rollback journal deletion

Layer / File(s) Summary
Append-only journal retirement and management route
src/integrations/journal.ts, src/integrations/store.ts, src/server/management/integration-routes.ts, src/server/management/route-registry.ts, tests/integrations-journal.test.ts, tests/management-integration-journal-delete.test.ts
Journal deletion appends tombstones instead of rewriting the JSONL file. The DELETE route protects each client’s newest row, prunes snapshots, and reports deletion state.
Rollback deletion UI
gui/src/pages/integrations/*, gui/src/i18n/*, gui/tests/integrations-rollback-history.test.tsx
Rollback rows expose delete actions when the server marks them deletable. Confirmation dialogs, localized refusal messages, expired-row behavior, and accessibility labels are covered.

Tier display and closeout records

Layer / File(s) Summary
Model tier outcome display and quota coverage
gui/src/pages/Logs.tsx, gui/src/pages/logs-model-title.ts, gui/src/i18n/*, tests/logs-model-tier-confirmation.test.ts, tests/provider-quota.test.ts, gui/tests/provider-capacity-shell.test.tsx
Model tooltips display translated tier outcomes and downgrade reasons. Locale coverage and provider quota rendering tests were added or expanded.
Planning and outcome records
devlog/_plan/260904_priority65_closeout/*
Planning documents and outcome records describe work-package scope, gate handling, landed changes, dispositions, and regression verification.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

Reset-credit operation flow

sequenceDiagram
  participant CLI
  participant ResetCreditAPI
  participant ResetCreditLedger
  participant UpstreamCreditService
  CLI->>ResetCreditAPI: consume with optional operationId
  ResetCreditAPI->>ResetCreditLedger: open operation for account identity
  ResetCreditLedger-->>ResetCreditAPI: execution state
  ResetCreditAPI->>UpstreamCreditService: redeem canonical operationId
  UpstreamCreditService-->>ResetCreditAPI: consume result
  ResetCreditAPI->>ResetCreditLedger: settle or mark ambiguous
  ResetCreditAPI-->>CLI: replay, success, or mapped error
Loading

Rollback journal deletion flow

sequenceDiagram
  participant RollbackHistory
  participant IntegrationRoutes
  participant IntegrationStateStore
  participant Journal
  RollbackHistory->>IntegrationRoutes: DELETE journal entry
  IntegrationRoutes->>IntegrationStateStore: verify operation and newest-row rule
  IntegrationRoutes->>IntegrationStateStore: retire operation
  IntegrationStateStore->>Journal: append tombstone
  IntegrationRoutes->>IntegrationStateStore: prune snapshot
  IntegrationRoutes-->>RollbackHistory: deletion result or refusal
Loading

Suggested reviewers: luvs01

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/priority65-closeout

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Ingwannu Ingwannu left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

The closeout record is useful, but the current exact head 3656bb74ff173a4c2e450bfd001c86c481f61bb2 is not documentation-only relative to the current dev base.

GitHub currently reports 64 changed files, 5,941 additions, and runtime/GUI/test changes. The branch forked at 2421e44ce; it is 17 commits ahead and 13 commits behind current dev (066146980). Its history carries unsquashed implementations of work that already landed on dev through different squash commits, so merging this head would replay or conflict with those implementations despite the PR description stating that no src/, gui/, or tests/ files change.

Please rebuild the closeout as a docs-only branch from the latest dev (for example, cherry-pick only the intended closeout documentation commits or create one clean documentation commit), then confirm that the GitHub changed-file list contains only the intended devlog/ records. After the head changes, exact-head CI can establish the final result.

@lidge-jun

Copy link
Copy Markdown
Owner Author

Superseded — the branch still carried commits already squashed onto dev, so the diff picked up 18 GUI files and armed the screenshot gate on a docs-only change. Reopening from a branch cut fresh off current dev with just the six outcome documents.

@lidge-jun lidge-jun closed this Sep 4, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3656bb74ff

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1 to +3
# 080 — 결과 기록

base `2421e44ce` → 최종 `origin/dev` `413227888`.

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 Badge Move the closed unit into _fin

This outcome records the landed SHAs and final regression result, so the unit has reached a terminal state. Leaving the entire unit under devlog/_plan makes the repository's open-work inventory falsely report completed work as still active; move devlog/_plan/260904_priority65_closeout to the corresponding _fin path.

AGENTS.md reference: AGENTS.md:L83-L86

Useful? React with 👍 / 👎.

Comment thread src/providers/registry.ts
Comment on lines 1393 to +1396
liveModels: true,
modelContextWindows: { ...ANTHROPIC_MODEL_CONTEXT_WINDOWS },
modelReasoningEfforts: { ...ANTHROPIC_MODEL_REASONING_EFFORTS },
defaultMaxOutputTokens: ANTHROPIC_DEFAULT_MAX_OUTPUT_TOKENS,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Scope the 64k default to models that support it

For the API-key provider, liveModels: true permits models outside ANTHROPIC_MODELS, but this provider-wide default is then sent by the adapter for every discovered model lacking a configured override. The repository metadata still supports models with lower output ceilings, such as claude-opus-4-0 at 32k and claude-3-haiku-20240307 at 4096, so an omitted caller limit becomes max_tokens: 64000 and those otherwise valid requests are rejected upstream. Populate canonical per-model limits or consult the derived model metadata before using the 64k fallback.

AGENTS.md reference: src/AGENTS.md:L18-L18

Useful? React with 👍 / 👎.

Comment on lines +672 to +675
try {
await deleteJournalEntry(apiBase, deleting.opId);
} catch (error) {
/*

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Refresh history after stale delete refusals

When another tab has already deleted the row, this request receives the documented 404; similarly, a concurrently changed history can return integration_journal_newest_protected. The catch rethrows before historyResource.refresh() runs, so the dialog remains open over a stale row and every retry repeats the same refusal, even though the localized 404 message says the list will refresh. Refresh the journal, and close or reconcile the dialog, for these stale-state responses.

AGENTS.md reference: gui/AGENTS.md:L7-L10

Useful? React with 👍 / 👎.

@lidge-jun
lidge-jun deleted the codex/priority65-closeout branch September 5, 2026 09:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants