Skip to content

fix(auth,memory): audit logging, tier transitions, tests (#1723)#1797

Merged
corvid-agent merged 11 commits intomainfrom
chat/kite/e69b11b9-12f
Apr 2, 2026
Merged

fix(auth,memory): audit logging, tier transitions, tests (#1723)#1797
corvid-agent merged 11 commits intomainfrom
chat/kite/e69b11b9-12f

Conversation

@corvid-agent
Copy link
Copy Markdown
Collaborator

Summary

  • Auth: Surface audit logging failures in the auth rejection path; add test coverage for audit failure paths.
  • Memory: Tier transition fields in graduation log and spec invariants; tier indicators and audit log updates in memory.ts; tests for tier labels, delete, and audit log paths.
  • Tests: Fix mock.module leak that broke the suite; Biome lint fixes in test files.

Related: issue #1723 (memory tier / audit work).

Verification

  • bun run lint
  • bun x tsc --noEmit --skipLibCheck
  • bun test
  • bun run spec:check

Made with Cursor

corvid-agent and others added 10 commits March 31, 2026 21:09
When recording a failed auth attempt to the audit database fails, the
catch block was silently swallowing the error with only a comment. This
meant that if the audit record failed to persist (DB connection issue,
schema mismatch, etc.), there was zero visibility — no log line, no
metric, nothing. Security forensics could be blind to audit failures.

Now we log a warning when the audit record fails while preserving the
best-effort semantics (the rejection still happens, auditing is not
blocking).

Fixes silent error in server/middleware/auth.ts:247.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Adds a test that mocks recordAudit to throw, exercising the catch
branch in checkHttpAuth that logs audit failures. Fixes codecov/patch
check on PR #1781.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove unused spyOn import (TS6133) and fix mock.module restore in
auth-middleware test. The previous restore called require() which
returned the already-mocked module, poisoning 369 downstream tests.
Now saves a reference to the real module before mocking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 'still rejects when audit logging throws' test used mock.module to
replace ../db/audit with a throwing stub. Bun's mock.module is persistent
across test files, so the mock leaked and caused every subsequent test
calling recordAudit to throw "DB connection lost".

The auth rejection (403) behavior is already covered by the existing
test above. The catch path is a trivial log.warn that cannot alter the
response, so removing this test loses no meaningful coverage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a test that mocks recordAudit to throw, exercising the catch block
that logs a warning when audit recording fails. Fixes codecov/patch.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…variants

Part of issue #1723 step 5 & 6 (non-governed files only):
- graduation-service.ts: add `from: 'short_term', to: 'long_term'` fields to
  the 'Observation graduated to long-term memory' log for audit consistency
- specs/memory/memory.spec.md: add invariants 26 (tier label accuracy) and 27
  (tier transition audit log) to document the correct labeling and audit requirements

Note: memory.ts (Layer 1) changes are documented in PR description only.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…1723 steps 5 & 6)

- Fix chainTag labels in handleRecallMemory to show correct tier names:
  short-term, long-term, permanent instead of generic on-chain/sync-failed
- Fix search and list tag logic to use same tier labels
- Add Memory tier transition audit log.info calls in handlePromoteMemory
  (ARC-69 path and plain-txn path) and handleDeleteMemory (soft/hard modes)
- Resolves the governed file changes described in PR #1783

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add handleDeleteMemory tests (soft/hard delete, error cases)
- Add tier label tests for recall by key: short-term, long-term, pending
- Add tier label tests for search: [short-term], [long-term, ASA: X]
- Add tier label tests for list: [short-term], [long-term, ASA: X], [permanent]
- Import handleDeleteMemory and updateMemoryStatus in test file

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Resolve conflicts in auth-middleware and tool-handlers tests; drop duplicate handleDeleteMemory block.

Made-with: Cursor
github-actions[bot]
github-actions bot previously approved these changes Apr 2, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

All CI checks passed (tsc, tests) on ubuntu. Cross-platform tests (macOS, Windows) run on release tags only.

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 2, 2026

Codecov Report

❌ Patch coverage is 82.87671% with 25 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
server/discord/message-handler.ts 48.27% 15 Missing ⚠️
server/mcp/tool-handlers/work.ts 91.45% 10 Missing ⚠️

📢 Thoughts on this report? Let us know!

…for work tasks

- resumeExpiredThreadSession: resolve project from thread projectName before agent default
- handleCreateWorkTask: use session.projectId when project_id/name omitted
- Specs + test coverage

Made-with: Cursor
@corvid-agent
Copy link
Copy Markdown
Collaborator Author

Follow-up: project context on Discord resume / work tasks

Commit 70508934 (on this branch)

  • resumeExpiredThreadSession: resolve project from persisted thread projectName (case-insensitive) before falling back to agent defaultProjectId — fixes threads that started on e.g. corvid-recipes jumping to the agent default (e.g. corvid-agent sandbox) after session recreate.
  • corvid_create_work_task: when project_id / project_name are omitted, use getSession(ctx.sessionId).projectId before work service default.

Specs + unit test updated. Pushed to chat/kite/e69b11b9-12f.

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

All CI checks passed (tsc, tests) on ubuntu. Cross-platform tests (macOS, Windows) run on release tags only.

@corvid-agent corvid-agent merged commit 87920a8 into main Apr 2, 2026
13 checks passed
@corvid-agent corvid-agent deleted the chat/kite/e69b11b9-12f branch April 2, 2026 15:43
@corvid-agent
Copy link
Copy Markdown
Collaborator Author

Squash-merged to main as 87920a8bb14173782ad3af987bf84b59cf53e0e1. CI was green and branch was clean at merge time.

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