Some checks failed
Main Confidence / confidence (push) Failing after 53s
## Summary This PR delivers three related improvements: ### 1. Finding Ownership Semantics (Spec 219) - Add responsibility/accountability labels to findings and finding exceptions - `owner_user_id` = accountable party (governance owner) - `assignee_user_id` = responsible party (technical implementer) - Expose Assign/Reassign actions in FindingResource with audit logging - Add ownership columns and filters to finding list - Propagate owner from finding to exception on creation - Tests: ownership semantics, assignment audit, workflow actions ### 2. Constitution v2.7.0 — LEAN-001 Pre-Production Lean Doctrine - New principle forbidding legacy aliases, migration shims, dual-write logic, and compatibility fixtures in a pre-production codebase - AI-agent 4-question verification gate before adding any compatibility path - Review rule: compatibility shims without answering the gate questions = merge blocker - Exit condition: LEAN-001 expires at first production deployment - Spec template: added default "Compatibility posture" block - Agent instructions: added "Pre-production compatibility check" section ### 3. Backup Set Operation Type Unification - Unified `backup_set.add_policies` and `backup_set.remove_policies` into single canonical `backup_set.update` - Removed all legacy aliases, constants, and test fixtures - Added lifecycle coverage for `backup_set.update` in config - Updated all 14+ test files referencing legacy types ### Spec Artifacts - `specs/219-finding-ownership-semantics/` — full spec, plan, tasks, research, data model, contracts, checklist ### Tests - All affected tests pass (OperationCatalog, backup set, finding workflow, ownership semantics) Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #256
3.5 KiB
3.5 KiB
Quickstart: Finding Ownership Semantics Clarification
Goal: Implement the clarified finding owner versus assignee contract on existing findings surfaces without introducing new persistence, capabilities, or workflow services.
1. Prepare the workspace
cd apps/platform
./vendor/bin/sail up -d
2. Update responsibility semantics on the existing findings resource
Primary file:
app/Filament/Resources/FindingResource.php
Expected implementation steps:
- Keep owner and assignee as separate roles on list and detail surfaces.
- Add a derived responsibility-state label, badge, or equivalent summary based on current owner/assignee presence.
- Adjust filters or personal-work shortcuts so assignee-driven work and owner-driven accountability are not collapsed into one ambiguous view.
- Keep
Exception ownerexplicitly distinct anywhere exception context is rendered from a finding. - Add help text to assignment and exception-request forms so operators understand the semantic difference between the two owner concepts.
3. Keep responsibility truth local and derived
Supporting files:
app/Models/Finding.phpapp/Services/Findings/FindingWorkflowService.phpapp/Services/Findings/FindingExceptionService.phpapp/Services/Findings/FindingRiskGovernanceResolver.php
Guidance:
- Prefer a small local derived helper on
Findingif it simplifies repeated responsibility-state checks. - Do not add a new enum, table, or presenter for responsibility state.
- Keep
FindingWorkflowService::assign()as the canonical mutation boundary. - If feedback or audit wording changes, distinguish owner-only, assignee-only, clear-owner, clear-assignee, and combined changes explicitly.
- If next-action copy is updated, treat missing owner as the visible state
orphaned accountabilityeven when an assignee exists.
4. Add focused regression tests
Primary test targets:
tests/Feature/Filament/Resources/FindingResourceOwnershipSemanticsTest.phptests/Feature/Findings/FindingAssignmentAuditSemanticsTest.php
Potential supporting edits:
tests/Feature/Findings/FindingWorkflowRowActionsTest.phptests/Feature/Findings/FindingWorkflowServiceTest.php
Coverage checklist:
- Owner-only finding renders as owned but unassigned.
- Owner-plus-assignee finding renders both roles distinctly.
- Assignee-only and both-null findings render as
orphaned accountability. - Exception owner remains separately labeled from finding owner.
- Responsibility updates preserve tenant-member validation and clearly report owner-only, assignee-only, clear-owner, clear-assignee, and combined changes.
- Tenant-route authorization assertions use explicit panel selection when needed.
5. Verify the feature
Run the narrowest proof set first:
cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/Resources/FindingResourceOwnershipSemanticsTest.php
cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Findings/FindingAssignmentAuditSemanticsTest.php
cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent
6. Review expectations
Before moving to tasks or implementation review, confirm:
- Owner, assignee, and exception owner mean one stable thing each across list, detail, and action flows.
- Responsibility state is derived from existing fields only.
- No new persistence, capability split, or presenter/framework layer was introduced.
- Tenant-safe Filament behavior remains intact on both admin canonical and tenant-panel test paths.