Skip to Content

Projects

The engagement after a proposal is accepted — milestones, blockers, change control, and the money that rides on them. See Reading the tables for the conventions, and /admin/settings/scope in the platform for the live per-tenant answer.

Capabilities — delivery

CapabilityGateAdminCSMSDMExpertVendorCustomer
View milestonesmilestone.view✔️✔️✔️✔️ (own)✔️✔️ (own)
Start a milestonemilestone.start✔️✔️✔️✔️❌❌
Complete a milestone (owner / manager)milestone.complete✔️✔️✔️✔️❌❌
Block a milestonemilestone.block✔️✔️✔️✔️❌❌
Unblock a milestonemilestone.unblock✔️✔️✔️✔️❌❌
Acknowledge a completed milestonemilestone.acknowledge✔️✔️✔️❌❌✔️ (own)
Raise a blocker (own work only)blocker.raise✔️✔️✔️✔️❌❌
Clear a blockerblocker.clear✔️✔️✔️✔️❌❌
Record change control (own work only)changeControl.record✔️✔️✔️✔️❌❌
Add an action itemactionItem.add✔️✔️✔️✔️❌❌
Complete an action item (own work only)actionItem.complete✔️✔️✔️✔️❌✔️
Escalateescalation.raise✔️✔️✔️❌❌❌
Raise a concernconcern.raise✔️❌❌❌❌✔️
Message the delivery teammessage.team✔️❌❌❌❌✔️
View the engagement activity timelineactivity.view✔️✔️✔️✔️ (own)✔️✔️ (own)
View the people on the engagementpeople.view✔️✔️✔️❌❌✔️ (own)

Completing a milestone is held by the delivering expert and by managers — the owner / manager qualifier is a hint the platform renders next to the lever, not a second gate. Raising a concern and messaging the delivery team are the customer’s channels; escalation is the managers’ equivalent, and the two are separate capabilities.

Completing and acknowledging are different acts by different parties. Completing is the expert’s statement that the work is finished; acknowledging is the customer’s agreement that it is. The expert is deliberately not granted milestone.acknowledge — the party that did the work is not the party that accepts it. Managers hold it so they can record a customer’s acknowledgement on their behalf, attributed and marked as such, which keeps the measure moving for customers who never sign in.

Capabilities — money on the engagement

CapabilityGateAdminCSMSDMExpertVendorCustomer
View quotesquote.view✔️✔️✔️❌❌✔️
Approve a quote for issuequote.approve✔️✔️✔️❌❌❌
Respond to a quote (owner only)quote.respond✔️❌❌❌❌✔️
View invoicesinvoice.view✔️✔️✔️✔️ (own)✔️✔️ (own)
Submit an invoiceinvoice.submit✔️❌❌✔️❌❌
Approve an invoiceinvoice.approve✔️✔️✔️❌❌❌
Pay an invoiceinvoice.pay✔️❌❌❌❌✔️
Resolve an invoice disputeinvoice.resolveDispute✔️✔️✔️✔️❌❌

Invoices are raised by the expert per milestone and approved by a manager — there is no automatic issue on milestone completion. The quote is the other direction: managers approve it for issue, the customer responds to it.

Surfaces

PageGateAdminCSMSDMExpertVendorCustomer
/projectsexplicit — persona surface✔️❌✔️✔️❌✔️
/projects/createexplicit — the customer’s request form❌❌❌❌❌✔️
/financesderived from invoice.view✔️✔️✔️✔️✔️✔️
/finances/approvalsredirects — derived from invoice.view✔️✔️✔️✔️✔️✔️
/activityexplicit — full-tenant log, staff only✔️✔️✔️❌❌❌
/customer/workspaceexplicit — persona surface❌❌❌❌❌✔️
/customer/messagesexplicit — persona surface❌❌❌❌❌✔️
/customer/invoicesexplicit — redirects to the payments figure❌❌❌❌❌✔️
/customer/figures/*explicit — persona surface❌❌❌❌❌✔️

/customer/figures/* is one route-policy entry covering all six drill-down pages behind the customer’s overview cards. Each resolves the project from the signed-in customer rather than from anything in the address bar, so a register can only ever hold that customer’s own records, and no other role, an administrator included, opens them.

/activity is the whole-tenant log with no per-persona scoping, so it stays staff-only even though activity.view is held more widely — own-scoped personas read their own timeline inside the Customer Service Journey instead. /projects is an explicit persona list rather than a derived one, which is why CSM is absent from it: the CSM’s route into an engagement is the Customer Service Journey.

Last updated on