Skip to content

fix: audit batch 7 — B35,B43-B44,B46-B47,B50-B62 with regression tests - #209

Merged
hermes-gadget merged 1 commit into
mainfrom
fix/audit-batch7
Sep 5, 2026
Merged

hermes-gadget merged 1 commit into
mainfrom
fix/audit-batch7

Conversation

@hermes-gadget

Copy link
Copy Markdown
Owner

Summary

Seventh block of the 2026-09-05 audit (ROADMAP.md): 18 findings fixed with regression tests across chat auto-tabs, subagent monitor, artifacts, analytics, api-keys, config, channels, cron, files, kanban, learning, models, and memory screens.

Findings

B35, B43, B44, B46, B47, B50, B51, B52, B53, B54, B55, B56, B57, B58, B59, B60, B61, B62

Test plan

  • CronScheduleDecodeTest, ConfigExportPathTest, MoaAckPayloadTest added.
  • ShareFileManagerTest managed-transfer contract preserved (managed downloads still swept on restart; partials age-gated).
  • Full suite: 562 tests, 0 failures.

Closes the matching audit issues (audit-2026-09-05 label).

Continues the 2026-09-05 GPT-6 audit (ROADMAP.md):

- B35: auto-tab pruning compares each tab's own profile against the registry; a foreground-only list no longer closes other profiles' tabs, and incomplete polls close nothing.
- B43: subagent monitor observes the active tab's own event client (not the container's shared stream) and reads untrusted raw payload fields through a safe scalar helper (jsonPrimitive no longer throws on object/array values).
- B44: failed transcript loads no longer cache as a successful empty artifact scan — the revision only advances on a fully successful pass.
- B46: analytics Compose code reads untrusted JSON through a safe scalar helper; object/array values render as unavailable instead of crashing composition.
- B47: api-key save captures what it saved and only clears fields the user hasn't edited since.
- B50: config save completion is generation-guarded — a Reload/import landing mid-save can't be clobbered, and load() invalidates in-flight saves.
- B51: config export streams via FileProvider (cache/exports) instead of a Binder EXTRA_TEXT that can exceed 1 MB.
- B52: pairing polling tolerates a bounded streak of transient failures and only surfaces the error after repeated ones; success clears it.
- B53: missing optional cron endpoints (delivery targets, blueprints) no longer fail the whole scheduler screen.
- B54: cron create/update success with a failed refresh stays content with a soft message instead of reading as failed action.
- B55: SAF save copy loop checks cancellation between blocking IO iterations.
- B56: foreign-token partials are age-gated so fresh backup shares survive process recreation (managed-transfer contract unchanged).
- B57: patching a kanban task refreshes its open detail sheet.
- B58: learning graph draw matrix now inverts the hit-test transform exactly (translate(pan) + scale around center).
- B59: learning graph refresh and node detail use independent generations — opening a node no longer strands the graph spinner.
- B60: models refresh resets in-flight setting/confirm state so a refresh during save can't permanently disable the screen.
- B61: MoA PUT acknowledgement ({"ok":true}) is no longer parsed as a complete replacement config; only responses with a presets object are adopted.
- B62: memory OAuth capability probe treats only HTTP 404 as "unsupported"; transient failures keep the affordance and surface the error.

Regression tests: CronScheduleDecodeTest, ConfigExportPathTest, MoaAckPayloadTest.

Full suite: 562 tests, 0 failures.
@hermes-gadget
hermes-gadget merged commit 53f00f8 into main Sep 5, 2026
2 checks passed
@hermes-gadget
hermes-gadget deleted the fix/audit-batch7 branch September 5, 2026 23:32
This was referenced Sep 6, 2026
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.

1 participant