Commit Graph

58 Commits

Author SHA1 Message Date
Bryan Frimin
7b320916af Add audit log feature for recording all actions
Adds audit logging that records all authorized actions performed by
users and API keys. The audit log is automatically populated whenever
the authorizer approves an action, and is queryable via GraphQL, MCP,
and CLI interfaces. Permission checks are excluded via a dry-run flag
to avoid phantom entries on page loads.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-21 19:16:19 +01:00
Bryan Frimin
c2e13b7968 Add MCP audit report metadata and getAuditReportUrl tool
Adds has_report, report_filename, and report_mime_type fields to Audit type to expose report attachment status. Introduces new getAuditReportUrl tool to generate presigned download URLs for audit reports. Updates NewAudit type converter to accept optional report object for enriching metadata.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-20 15:58:27 +01:00
Bryan Frimin
a9ebeef0fa Transform meetings page into context page with tabs
Add structured organization context with 5 markdown sections (Product, Architecture, Team, Processes, Customers) editable inline. Meetings are now a tab within the context page. Moved all GraphQL queries from hooks/graph/MeetingGraph.ts into colocated components following new best practices. Updated database schema, backend services, GraphQL resolvers, and MCP API to support the new context fields and structure.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 19:02:50 +01:00
Sacha Al Himdani
1db8e7133e Add document archiving
Documents can be archived and unarchived. Archived documents are
read-only, excluded from the trust center, and moved to a dedicated
Archived tab in the document list.

- Add archived_at timestamp and status (ACTIVE/ARCHIVED) PG enum column
- Rename DocumentStatus → DocumentVersionStatus, introduce DocumentStatus
- Archive/unarchive mutations in GraphQL, MCP, and CLI
- Bulk archive/unarchive mutations with Active/Archived tabs in the list
- ABAC policies: write actions denied on archived docs, unarchive denied
  on active docs
- Remove control/risk mappings and reset trust center visibility on archive
- Exclude archived documents from mapping dialogs and trust center tab

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-19 14:15:54 +01:00
Bryan Frimin
4f54241382 Add document types filtering and rename ISMS to GOVERNANCE
Adds 5 new document types (PLAN, REGISTER, RECORD, REPORT, TEMPLATE), renames ISMS to GOVERNANCE, and implements type-based filtering across GraphQL, MCP, and frontend. Includes migration, enum updates, filter implementation with SQL array support, and frontend dropdown UI with Relay refetch pattern.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 12:31:39 +01:00
Bryan Frimin
d7c120c144 Rename NONCONFORMITY to MINOR_NONCONFORMITY and add MAJOR_NONCONFORMITY
Support distinguishing between minor and major non-conformities in findings. Rename the existing NONCONFORMITY enum value to MINOR_NONCONFORMITY and add a new MAJOR_NONCONFORMITY value across all API layers (GraphQL, MCP, CLI) and the database.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 10:02:28 +01:00
Bryan Frimin
82f241628c Refactor MeasuresPage to use Relay fragments
Replace the client-side grouped-by-category view (fetching 500 items)
with a flat table using server-side filtering and cursor-based
pagination. Colocate GraphQL queries, fragments, and mutations in the
component file per console CLAUDE.md conventions.

Backend changes add a category filter to the measure list endpoints
(GraphQL, MCP) and a new measureCategories field on Organization.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 09:54:33 +01:00
Bryan Frimin
69ab9c60cd Add finding MCP API
Replace nonconformity and continual improvement MCP tools with
unified finding tools: list_findings, get_finding, create_finding,
update_finding, delete_finding, link_finding_to_audit, and
unlink_finding_from_audit.

Update specification and resolvers to use the new finding types.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-17 15:05:32 +01:00
Sacha Al Himdani
cf1dadc0b5 Add implemented state and justification to controls
Introduce `implemented` enum (IMPLEMENTED/NOT_IMPLEMENTED) and
`not_implemented_justification` (nullable text) fields on the Control
entity across all API surfaces (GraphQL, MCP, CLI), database, frontend,
and SOA export.

The database stores implementation state as a PostgreSQL enum
`control_implementation_state`. Controls default to IMPLEMENTED during
migration. The SOA list and PDF export show implementation status
alongside applicability, with "-" for non-applicable controls.
Justification columns are renamed for clarity: "Justification for
non-applicability" and "Justification for non-implementation".

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-17 11:01:04 +01:00
Bryan Frimin
467973e9b6 Fix mcp tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-11 13:09:03 +01:00
Bryan Frimin
e393411333 Move kind to string
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-11 13:09:02 +01:00
Émile Ré
909beeb606 Migrate some trust_center_access columns to profiles
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-05 10:36:08 +04:00
Sacha Al Himdani
e0de1548d6 Add delete vendor tool on mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-03 15:10:07 +01:00
Sacha Al Himdani
a8ea850af1 Use default filter with no snapshot for mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-03 14:20:18 +01:00
Sacha Al Himdani
f7f65567a2 Add mcp control links
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-26 16:59:32 +01:00
Sacha Al Himdani
ff62eb4a80 Add vendor risk assessment to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-25 16:04:06 +01:00
Sacha Al Himdani
214672b6b5 Add risk and measure mcp tools
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-25 15:50:19 +01:00
Bryan Frimin
74fa10faea Fix obligation type not updated
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-23 15:43:41 +01:00
Sacha Al Himdani
9b1a3c0c53 Add SOA to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-23 09:36:07 +01:00
Sacha Al Himdani
ed21ba763b Add processing activities to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-20 14:43:52 +01:00
Émile Ré
cfcbc0d7e1 Reimplement MCP
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:13:01 +04:00
Sacha Al Himdani
015b6bd6e7 Add delete measure to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-17 18:22:09 +01:00
Sacha Al Himdani
40e4db9278 Remove deprecated SOA code
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-17 15:06:49 +01:00
Bryan Frimin
93c7b0c2dc Add multi-approver support
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-17 10:48:44 +01:00
Sacha Al Himdani
90911a55f7 Add delete tasks to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-16 18:35:04 +01:00
Sacha Al Himdani
1d1a0b6208 Add list attendees to mcp meetings
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-16 16:24:12 +01:00
Sacha Al Himdani
3a42307896 Add delete risks to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-16 16:24:12 +01:00
Sacha Al Himdani
8f73e37143 Add meetings to mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-16 16:24:11 +01:00
Émile Ré
adfef480c3 Update MCP
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:09 +04:00
Sacha Al Himdani
40b53fe1db Suport all vendors fields on mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-09 15:44:02 +01:00
Émile Ré
7c721e5ff7 Refactor DocumentSignaturesTab to DocumentSignaturesPage + fix count bug
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-27 17:52:58 +04:00
Sacha Al Himdani
4ed3f5a067 Change state of applicability
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-16 22:56:00 +01:00
Sacha Al Himdani
3c2be844e4 Remove mandatory task from measure
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-15 18:15:45 +01:00
Émile Ré
c0b2a5702d Introduce pkg/mail.Addr
Signed-off-by: Émile Ré <nemile.re@gmail.com>
2025-12-15 18:24:00 +01:00
Sacha Al Himdani
3169fa3c0a Fix audit and framework deletion
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-09 17:34:50 +01:00
Bryan Frimin
89af9f806a Add updatePeople tool
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-26 09:11:45 +01:00
Bryan Frimin
af03a83f9b Add document and document version tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-25 15:42:25 +01:00
Bryan Frimin
b1e1127392 Add mcp hint support
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-25 11:27:52 +01:00
Bryan Frimin
927ad89a0c Add snapshot tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-24 16:34:29 +01:00
Bryan Frimin
66484113d3 Add tasks tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-24 16:23:08 +01:00
Bryan Frimin
0d985b40cc Add control mapping tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-24 15:00:18 +01:00
Bryan Frimin
0192586d4e Add control tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-24 13:58:02 +01:00
Bryan Frimin
d8abb230b8 Add audit mcp tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-24 10:23:30 +01:00
Bryan Frimin
2d722700d6 Make status and priority optional
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-24 10:23:30 +01:00
Bryan Frimin
e4438302f9 Fix mcp order type
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-23 23:21:37 +01:00
Bryan Frimin
c9e1fd54a5 Fix risks encoding
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-23 22:28:29 +01:00
Bryan Frimin
112c793328 Add continious improvment tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-23 21:55:00 +01:00
Bryan Frimin
1b52585ab2 Add obligation tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-23 21:49:00 +01:00
Bryan Frimin
dbf75ef759 Add nonconformity tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-23 21:41:07 +01:00
Bryan Frimin
947b621eb5 Add data tools
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-23 21:31:04 +01:00