Commit Graph

50 Commits

Author SHA1 Message Date
Aurélien Sibiril
a4bf885952 Add access review end-to-end tests
Add e2e tests for access review API and connector
operations covering RBAC, tenant isolation, and the
full campaign lifecycle.

Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
2026-04-02 14:37:29 +02:00
Sacha Al Himdani
324f4ce793 Add task priority enum and rename priority to rank
The existing integer priority field represents positional ordering
within a state, not semantic importance. Rename it to rank and
introduce a new priority field with enum values URGENT, HIGH,
MEDIUM and LOW across the entire stack.

Rank is now scoped to (state, priority) so tasks are ordered
within each priority group. A generated priority_rank column
combines both fields into a single sortable integer for cursor
pagination.

Dragging a task across priority groups updates its priority
automatically based on the drop position neighbors. The backend
first moves the task to the new group then repositions it at the
target rank.

The migration defaults existing rows to MEDIUM priority and
backfills ranks per (state, priority) group.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-02 13:35:39 +02:00
Émile Ré
a03a2deae1 Fix lint & test
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-04-01 18:03:28 +04:00
Émile Ré
f3982f23f9 Sanitize upon saving
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-04-01 18:03:27 +04:00
Émile Ré
fe5a7304ec Remove field in e2e test data
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-04-01 18:03:24 +04:00
Émile Ré
cc1a53e17c Keep allowing to pass content on document creation for use cases other than frontend app
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-04-01 18:03:22 +04:00
Sacha Al Himdani
1b811011eb Split employee document policy from core document actions
Introduce dedicated employee-scoped IAM actions and update all
resolvers and frontend mutations accordingly.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-01 15:00:54 +02:00
Sacha Al Himdani
5d6d0bdd7f Move document classification from document to document version
Classification now lives exclusively on DocumentVersion. The field is
removed from the Document model, all SQL queries, GraphQL Document
type, SignableDocument type, UpdateDocumentInput, and MCP Document
schema.

New documents still accept classification in CreateDocumentInput,
applied to the first version. New drafts inherit classification from
the previous version. PDF generation uses the version classification.

The drawer allows editing classification on draft versions via the
updateDocumentVersion mutation. Classification is read-only on
published versions.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-31 14:11:57 +02:00
Sacha Al Himdani
68bc8cf59a Add major.minor document versioning
Introduce a two-part version scheme (major.minor) for documents.
Drafts start at 0.1 and increment minor on each new draft. Publishing
as minor keeps the current version, publishing as major bumps to the
next major.0. Both current_published_major and current_published_minor
are tracked on the document for exact version lookups.

Signatures and approval quorums aggregate across all versions sharing
the same major number using CTE joins. Approval page mutations spread
the decision fragment so Relay updates the version row state without
requiring a page refresh.

GraphQL, MCP, and service layer expose separate publishMajor and
publishMinor mutations instead of a single mutation with a type enum.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-30 18:54:28 +02:00
Sacha Al Himdani
999171a626 Add document approval workflow
Introduce a complete approval system for document publishing. Document
versions can now require approval from selected reviewers before being
published, with automatic publishing once all approvers have approved.

- Add approval quorum and decision tables with backfill migration
- Implement request approval, approve, and reject flows with electronic
  signature support for approve decisions
- Add employee approvals page with dedicated tab and pending approvals view
- Add changelog field to publish and request approval flows
- Pre-select previous version's approvers in the publish dialog
- Show quorum approvers in document list with 100 approver hard limit
- Expose approval workflow through GraphQL, MCP, and CLI
- Remove legacy default approvers feature entirely
- Add comprehensive e2e test coverage for approval workflows

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-27 19:43:20 +01:00
Bryan Frimin
6bcd4b5c66 Fix e2e test config for new agents config structure
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-26 15:29:41 +01:00
Sacha Al Himdani
8c02c53315 Update copyright headers across all Go files
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-25 17:38:32 +01:00
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
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
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
2b08dea600 Fix measure count queries missing category column
CountByRiskID and CountByControlID CTEs did not include m.category in their SELECT
lists, causing "column category does not exist" errors when MeasureFilter applied
category constraints. Added m.category to both CTEs.

Also add comprehensive e2e tests for measure filtering by category at organization,
risk, and control levels.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 12:25:34 +01:00
Bryan Frimin
d6b9280038 Fix owner deletion by qualifying ambiguous tenant_id column
The CountActiveOwnerByOrganizationID query joins iam_membership_profiles with
iam_memberships, but used an unqualified tenant_id = @tenant_id in the WHERE
clause. Since both tables have a tenant_id column, PostgreSQL raised an
"ambiguous column" error when deleting an owner. Fixed by prefixing with the
table alias (p.tenant_id) to match the pattern used in CountByOrganizationID.

Added TestUser_RemoveOwner e2e test to verify one owner can remove another.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 12:14:19 +01:00
Bryan Frimin
922c0c2db8 Fix flaky e2e timestamp tests
Increase sleep time from 10ms to 1100ms to ensure timestamp precision works
consistently across databases with second-level granularity. Strengthen
AssertTimestampsOnUpdate to require strictly increasing timestamps instead of
allowing equal values.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 11:48:13 +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
fde65eb10b Add finding e2e tests
Add comprehensive end-to-end tests for the finding GraphQL API
covering CRUD operations, audit linking/unlinking, filtering by
kind/status/priority, pagination, and ordering.

Remove the old nonconformity and continual improvement e2e tests.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-17 15:05:33 +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
7c77c217c7 Fix Anthropic requests failing due to missing MaxTokens in agent configuration
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-13 18:24:02 +01:00
Sacha Al Himdani
d5c62a9383 Run go fmt/fix
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-13 14:48:13 +01:00
Sacha Al Himdani
3a727f53fa Add vendor compliance tests
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 10:48:41 +01:00
Bryan Frimin
d4b3025463 Use go 1.26 syntax
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-06 15:00:42 +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
06aa781bb2 Allow more permissive bracket validations
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-23 15:24:24 +01:00
Émile Ré
ab5fe8e5e2 Fix e2e tests
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:13:01 +04:00
Sacha Al Himdani
afd92fd938 Migrate from MinIO to SeaweedFS
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-19 11:47:04 +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
Bryan Frimin
3d8c7c4dd6 Rename owner by approver
Document owner does not make sense it's more an document approver.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-17 10:48:43 +01:00
Émile Ré
8d20220c86 Fix e2e tests
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:11 +04:00
Émile Ré
52d041492b Stop skipping tests now that file storage is test ready
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-04 18:32:53 +04:00
Émile Ré
afca8a3ddc Fix e2e tests hidden bug
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-04 18:32:52 +04:00
Émile Ré
9f7c643085 Fix npm vulnerabilities
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-04 14:57:57 +04:00
Bryan Frimin
ff2c2a5974 Fix e2e tests
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-01-17 12:22:49 -08: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
c76764b69a Add processing activity exports
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-16 14:42:53 +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
Sacha Al Himdani
9626e24370 Add right requests
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-15 16:40:17 +01:00
Sacha Al Himdani
aba51629c0 Fix people in mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-09 15:55:26 +01:00
Sacha Al Himdani
6ab5ace353 Fix task display
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-09 15:47:13 +01:00
Sacha Al Himdani
cd13f9aa00 Change registry names
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-19 19:39:44 +01:00
Sacha Al Himdani
dccd186eb7 Make gdpr assessment snapshottable
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-19 18:11:25 +01:00
Sacha Al Himdani
91b42c6cd1 Add new gdpr registries
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-19 18:11:25 +01:00
Bryan Frimin
71946bad7a Fix TestOrganization_UpdateContext
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-01 13:29:40 +01:00
Bryan Frimin
deb225df06 Update ref pkg
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-01 13:27:10 +01:00
Bryan Frimin
4410fd0950 Style
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-01 13:24:39 +01:00
Bryan Frimin
b93d2d8b0b Add e2e tests
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-11-30 17:29:58 +01:00