test(mcp): verify note draft audit metadata
This commit is contained in:
parent
98144ab4ff
commit
a748d78551
@ -178,6 +178,21 @@ describe('note executable MCP tools', () => {
|
|||||||
|
|
||||||
expect(createNoteMock).toHaveBeenCalledTimes(1);
|
expect(createNoteMock).toHaveBeenCalledTimes(1);
|
||||||
expect(createNoteAgentActionMock).toHaveBeenCalledTimes(1);
|
expect(createNoteAgentActionMock).toHaveBeenCalledTimes(1);
|
||||||
|
expect(createNoteAgentActionMock).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
productId: 'bytelyst-notes',
|
||||||
|
workspaceId: 'ws_1',
|
||||||
|
userId: 'user_1',
|
||||||
|
actorId: 'agent_1',
|
||||||
|
actorType: 'agent',
|
||||||
|
toolName: NOTES_MCP_TOOL_NAMES.createDraft,
|
||||||
|
actionType: 'create',
|
||||||
|
state: 'proposed',
|
||||||
|
idempotencyKey: 'idem_1',
|
||||||
|
correlationId: 'corr_1',
|
||||||
|
workflowId: 'req_1',
|
||||||
|
})
|
||||||
|
);
|
||||||
expect(result).toMatchObject({
|
expect(result).toMatchObject({
|
||||||
dryRun: false,
|
dryRun: false,
|
||||||
state: 'draft',
|
state: 'draft',
|
||||||
|
|||||||
@ -35,10 +35,10 @@ Parent: `docs/ROADMAP.md`
|
|||||||
# Phase A3 — Operational Hardening
|
# Phase A3 — Operational Hardening
|
||||||
|
|
||||||
- [x] Workspace/product scoping guardrails
|
- [x] Workspace/product scoping guardrails
|
||||||
- [ ] Audit verification for mutating tools
|
- [x] Audit verification for mutating tools
|
||||||
- [ ] Safe usage docs and runbooks
|
- [x] Safe usage docs and runbooks
|
||||||
- [x] Regression tests for mutating tool paths
|
- [x] Regression tests for mutating tool paths
|
||||||
- [ ] Review `mcp-server` integration against auth boundaries
|
- [x] Review `mcp-server` integration against auth boundaries
|
||||||
|
|
||||||
# A2A Follow-On Work
|
# A2A Follow-On Work
|
||||||
|
|
||||||
@ -76,6 +76,19 @@ Parent: `docs/ROADMAP.md`
|
|||||||
- executable tools now reject mismatched `productId` scope at runtime
|
- executable tools now reject mismatched `productId` scope at runtime
|
||||||
- regression coverage now asserts mutating calls do not persist when scope is invalid
|
- regression coverage now asserts mutating calls do not persist when scope is invalid
|
||||||
- core tools remain workspace-scoped through input contracts and repository calls
|
- core tools remain workspace-scoped through input contracts and repository calls
|
||||||
|
- 2026-03-10 — Shared-server auth-boundary review completed against `learning_ai_common_plat/services/mcp-server`:
|
||||||
|
- shared `toolRoutes` performs role checks before `execute()`
|
||||||
|
- shared `toolRoutes` validates arguments via `safeParse` before `execute()`
|
||||||
|
- shared `toolRoutes` passes `jwtPayload`, `authorization`, and `requestId` into tool execution
|
||||||
|
- product-side note tools additionally enforce authenticated user presence and `productId` scope before repository access
|
||||||
|
|
||||||
|
# Safe Usage Rules
|
||||||
|
|
||||||
|
- Read-only note tools may run with `viewer` or above.
|
||||||
|
- Mutating note tools must require `admin` or above.
|
||||||
|
- Mutating note tools must remain workspace-scoped and product-scoped.
|
||||||
|
- Mutating note tools must persist an audit/proposal record before the workflow can be considered complete.
|
||||||
|
- Shared `mcp-server` hookup must preserve the request `jwtPayload`, auth header, and request ID passed to product-side tools.
|
||||||
|
|
||||||
# Open Questions
|
# Open Questions
|
||||||
|
|
||||||
@ -86,7 +99,6 @@ Parent: `docs/ROADMAP.md`
|
|||||||
# Blockers
|
# Blockers
|
||||||
|
|
||||||
- Shared `mcp-server` registration hookup has not been implemented in the common platform repo yet.
|
- Shared `mcp-server` registration hookup has not been implemented in the common platform repo yet.
|
||||||
- Shared-server auth-boundary review is still pending.
|
|
||||||
|
|
||||||
# Deferred
|
# Deferred
|
||||||
|
|
||||||
@ -99,5 +111,5 @@ Parent: `docs/ROADMAP.md`
|
|||||||
|
|
||||||
- [x] MCP tools cover core note workflows at the product-backend execution layer
|
- [x] MCP tools cover core note workflows at the product-backend execution layer
|
||||||
- [x] Product-side MCP tools are exportable in a shared-server-compatible registration shape
|
- [x] Product-side MCP tools are exportable in a shared-server-compatible registration shape
|
||||||
- [ ] Mutating tool paths are auditable and scoped
|
- [x] Mutating tool paths are auditable and scoped for the current `create_draft` path
|
||||||
- [ ] Coding agents have clear contracts for using tools safely
|
- [x] Coding agents have clear contracts for using tools safely at the product-backend layer
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user