@kybernesis/arp-scope-catalog 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/index.cjs +518 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +144 -0
  6. package/dist/index.d.ts +144 -0
  7. package/dist/index.js +501 -0
  8. package/dist/index.js.map +1 -0
  9. package/generated/manifest.json +1542 -0
  10. package/generated/scopes.json +1536 -0
  11. package/package.json +49 -0
  12. package/scopes/calendar.availability.read.yaml +35 -0
  13. package/scopes/calendar.events.cancel.yaml +24 -0
  14. package/scopes/calendar.events.create.yaml +31 -0
  15. package/scopes/calendar.events.modify.yaml +24 -0
  16. package/scopes/calendar.events.propose.yaml +35 -0
  17. package/scopes/calendar.events.read.yaml +38 -0
  18. package/scopes/connection.extend.yaml +28 -0
  19. package/scopes/connection.rescope.request.yaml +21 -0
  20. package/scopes/contacts.attributes.read.yaml +25 -0
  21. package/scopes/contacts.introduce.yaml +21 -0
  22. package/scopes/contacts.search.yaml +26 -0
  23. package/scopes/contacts.share.yaml +30 -0
  24. package/scopes/credentials.present.request.yaml +29 -0
  25. package/scopes/credentials.proof.zk.request.yaml +31 -0
  26. package/scopes/delegation.forward.task.yaml +36 -0
  27. package/scopes/files.project.files.delete.yaml +31 -0
  28. package/scopes/files.project.files.list.yaml +22 -0
  29. package/scopes/files.project.files.read.yaml +35 -0
  30. package/scopes/files.project.files.summarize.yaml +30 -0
  31. package/scopes/files.project.files.write.yaml +34 -0
  32. package/scopes/files.project.metadata.read.yaml +21 -0
  33. package/scopes/files.projects.list.yaml +18 -0
  34. package/scopes/files.share.external.yaml +39 -0
  35. package/scopes/identity.card.read.yaml +18 -0
  36. package/scopes/identity.introduction.request.yaml +24 -0
  37. package/scopes/identity.principal.verify.yaml +19 -0
  38. package/scopes/knowledge.query.yaml +31 -0
  39. package/scopes/messaging.chat.send.yaml +27 -0
  40. package/scopes/messaging.email.draft.compose.yaml +23 -0
  41. package/scopes/messaging.email.send.reviewed.yaml +36 -0
  42. package/scopes/messaging.email.summary.yaml +26 -0
  43. package/scopes/messaging.email.thread.read.yaml +29 -0
  44. package/scopes/messaging.relay.to_principal.yaml +22 -0
  45. package/scopes/notes.read.yaml +25 -0
  46. package/scopes/notes.search.yaml +24 -0
  47. package/scopes/notes.write.yaml +32 -0
  48. package/scopes/payments.authorize.capped.yaml +37 -0
  49. package/scopes/payments.history.read.yaml +28 -0
  50. package/scopes/payments.quote.request.yaml +18 -0
  51. package/scopes/payments.refund.request.yaml +24 -0
  52. package/scopes/tasks.assign.yaml +27 -0
  53. package/scopes/tasks.create.yaml +31 -0
  54. package/scopes/tasks.list.yaml +21 -0
  55. package/scopes/tasks.read.yaml +22 -0
  56. package/scopes/tasks.status.update.yaml +22 -0
  57. package/scopes/tools.invoke.mutating.yaml +37 -0
  58. package/scopes/tools.invoke.read.yaml +28 -0
  59. package/scopes/work.projects.list.yaml +18 -0
  60. package/scopes/work.reports.summary.yaml +29 -0
  61. package/scopes/work.status.read.yaml +18 -0
@@ -0,0 +1,18 @@
1
+ id: files.projects.list
2
+ version: 1.0.0
3
+ label: List projects
4
+ description: Peer can list project names and IDs from your project registry.
5
+ category: files
6
+ risk: low
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"list",
12
+ resource == ProjectRegistry::"self"
13
+ );
14
+ consent_text_template: "See the list of your projects (names + IDs only)."
15
+ obligations_forced: []
16
+ implies: []
17
+ conflicts_with: []
18
+ step_up_required: false
@@ -0,0 +1,39 @@
1
+ id: files.share.external
2
+ version: 1.0.0
3
+ label: Share files outside circle
4
+ description: Peer can share files from a project with an external recipient allowlist.
5
+ category: files
6
+ risk: critical
7
+ parameters:
8
+ - name: project_id
9
+ type: ProjectID
10
+ required: true
11
+ - name: recipient_allowlist
12
+ type: EmailList
13
+ required: true
14
+ validation: "rfc5322-or-domain-glob"
15
+ cedar_template: |
16
+ permit (
17
+ principal == Agent::"{{audience_did}}",
18
+ action == Action::"share_external",
19
+ resource in Project::"{{project_id}}"
20
+ ) when {
21
+ context.recipient_matches_allowlist({{recipient_allowlist_json}})
22
+ };
23
+ consent_text_template: "Share files from {{project_id}} externally to: {{recipient_allowlist_display}}."
24
+ obligations_forced:
25
+ - type: require_principal_confirmation
26
+ params:
27
+ max_age_seconds: 0
28
+ - type: audit_level
29
+ params:
30
+ level: verbose
31
+ - type: notify_principal
32
+ params: {}
33
+ - type: insert_watermark
34
+ params: {}
35
+ implies: []
36
+ conflicts_with:
37
+ - files.project.files.delete
38
+ tier_gate: self_xyz.verified_human
39
+ step_up_required: true
@@ -0,0 +1,18 @@
1
+ id: identity.card.read
2
+ version: 1.0.0
3
+ label: Read agent card
4
+ description: Allow the peer agent to fetch your agent card (name, supported protocols, public endpoints).
5
+ category: identity
6
+ risk: low
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"read",
12
+ resource == AgentCard::"self"
13
+ );
14
+ consent_text_template: "See your public agent card."
15
+ obligations_forced: []
16
+ implies: []
17
+ conflicts_with: []
18
+ step_up_required: false
@@ -0,0 +1,24 @@
1
+ id: identity.introduction.request
2
+ version: 1.0.0
3
+ label: Request introduction
4
+ description: Peer can ask your agent to introduce them to another agent you know.
5
+ category: identity
6
+ risk: medium
7
+ parameters:
8
+ - name: to_agent
9
+ type: AgentDID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"request_introduction",
15
+ resource == Agent::"{{to_agent}}"
16
+ );
17
+ consent_text_template: "Introduce Peer to {{to_agent}}."
18
+ obligations_forced:
19
+ - type: require_principal_confirmation
20
+ params:
21
+ max_age_seconds: 86400
22
+ implies: []
23
+ conflicts_with: []
24
+ step_up_required: false
@@ -0,0 +1,19 @@
1
+ id: identity.principal.verify
2
+ version: 1.0.0
3
+ label: Verify owner binding
4
+ description: Peer can fetch and verify your representation VC, confirming which human principal your agent represents.
5
+ category: identity
6
+ risk: low
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"verify_principal",
12
+ resource == Principal::"self"
13
+ );
14
+ consent_text_template: "Let Peer verify who your agent represents."
15
+ obligations_forced: []
16
+ implies:
17
+ - identity.card.read
18
+ conflicts_with: []
19
+ step_up_required: false
@@ -0,0 +1,31 @@
1
+ id: knowledge.query
2
+ version: 1.0.0
3
+ label: Query knowledge base
4
+ description: Peer can query a specific knowledge base and receive token-bounded answers.
5
+ category: notes
6
+ risk: medium
7
+ parameters:
8
+ - name: kb_id
9
+ type: ProjectID
10
+ required: true
11
+ - name: max_tokens
12
+ type: Integer
13
+ required: true
14
+ default: 8000
15
+ validation: "100..50000"
16
+ cedar_template: |
17
+ permit (
18
+ principal == Agent::"{{audience_did}}",
19
+ action == Action::"query",
20
+ resource == KnowledgeBase::"{{kb_id}}"
21
+ ) when {
22
+ context.requested_tokens <= {{max_tokens}}
23
+ };
24
+ consent_text_template: "Query knowledge base {{kb_id}} (up to {{max_tokens}} tokens/response)."
25
+ obligations_forced:
26
+ - type: summarize_only
27
+ params:
28
+ max_words: "{{max_tokens}}"
29
+ implies: []
30
+ conflicts_with: []
31
+ step_up_required: false
@@ -0,0 +1,27 @@
1
+ id: messaging.chat.send
2
+ version: 1.0.0
3
+ label: Send chat message
4
+ description: Peer can send chat messages on your behalf within an allowlisted set of channels.
5
+ category: messaging
6
+ risk: medium
7
+ parameters:
8
+ - name: channel_allowlist
9
+ type: AttributeList
10
+ required: true
11
+ validation: "at-least-one"
12
+ cedar_template: |
13
+ permit (
14
+ principal == Agent::"{{audience_did}}",
15
+ action == Action::"send_chat",
16
+ resource == ChatChannel
17
+ ) when {
18
+ resource.id in {{channel_allowlist_json}}
19
+ };
20
+ consent_text_template: "Send chat messages on your behalf in: {{channel_allowlist_display}}."
21
+ obligations_forced:
22
+ - type: audit_level
23
+ params:
24
+ level: verbose
25
+ implies: []
26
+ conflicts_with: []
27
+ step_up_required: false
@@ -0,0 +1,23 @@
1
+ id: messaging.email.draft.compose
2
+ version: 1.0.0
3
+ label: Compose drafts (no send)
4
+ description: Peer can compose email drafts in your drafts folder without sending them.
5
+ category: messaging
6
+ risk: medium
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"compose_draft",
12
+ resource == Email::"drafts"
13
+ );
14
+ forbid (
15
+ principal == Agent::"{{audience_did}}",
16
+ action == Action::"send_email",
17
+ resource
18
+ );
19
+ consent_text_template: "Compose email drafts for you to review (no sending)."
20
+ obligations_forced: []
21
+ implies: []
22
+ conflicts_with: []
23
+ step_up_required: false
@@ -0,0 +1,36 @@
1
+ id: messaging.email.send.reviewed
2
+ version: 1.0.0
3
+ label: Send email (after your review)
4
+ description: Peer drafts emails on your behalf; each send requires your one-tap approval before going out.
5
+ category: messaging
6
+ risk: high
7
+ parameters:
8
+ - name: recipient_allowlist
9
+ type: EmailList
10
+ required: false
11
+ default: []
12
+ validation: "rfc5322-or-domain-glob"
13
+ cedar_template: |
14
+ permit (
15
+ principal == Agent::"{{audience_did}}",
16
+ action == Action::"send_email",
17
+ resource == Email::"outbox"
18
+ ) when {
19
+ {{#if recipient_allowlist}}
20
+ context.recipient_matches_allowlist({{recipient_allowlist_json}})
21
+ {{else}}
22
+ true
23
+ {{/if}}
24
+ };
25
+ consent_text_template: "Draft and (with your approval) send emails{{#if recipient_allowlist}} to: {{recipient_allowlist_display}}{{/if}}."
26
+ obligations_forced:
27
+ - type: require_principal_confirmation
28
+ params:
29
+ max_age_seconds: 0
30
+ - type: audit_level
31
+ params:
32
+ level: verbose
33
+ implies:
34
+ - messaging.email.draft.compose
35
+ conflicts_with: []
36
+ step_up_required: true
@@ -0,0 +1,26 @@
1
+ id: messaging.email.summary
2
+ version: 1.0.0
3
+ label: Email summaries only
4
+ description: Peer receives only summaries of your email threads, never the raw content.
5
+ category: messaging
6
+ risk: medium
7
+ parameters:
8
+ - name: label_filter
9
+ type: AttributeList
10
+ required: false
11
+ default: []
12
+ validation: "label-or-folder-name"
13
+ cedar_template: |
14
+ permit (
15
+ principal == Agent::"{{audience_did}}",
16
+ action == Action::"summarize",
17
+ resource == Email
18
+ );
19
+ consent_text_template: "Share email summaries (never raw content){{#if label_filter}} for labels: {{label_filter_display}}{{/if}}."
20
+ obligations_forced:
21
+ - type: summarize_only
22
+ params:
23
+ max_words: 250
24
+ implies: []
25
+ conflicts_with: []
26
+ step_up_required: false
@@ -0,0 +1,29 @@
1
+ id: messaging.email.thread.read
2
+ version: 1.0.0
3
+ label: Read email threads
4
+ description: Peer can read the full contents of email threads matching optional label filters.
5
+ category: messaging
6
+ risk: high
7
+ parameters:
8
+ - name: label_filter
9
+ type: AttributeList
10
+ required: false
11
+ default: []
12
+ validation: "label-or-folder-name"
13
+ cedar_template: |
14
+ permit (
15
+ principal == Agent::"{{audience_did}}",
16
+ action == Action::"read",
17
+ resource == Email
18
+ ) {{#if label_filter}}when {
19
+ resource.labels.containsAny({{label_filter_json}})
20
+ }{{/if}};
21
+ consent_text_template: "Read email thread contents{{#if label_filter}} for labels: {{label_filter_display}}{{/if}}."
22
+ obligations_forced:
23
+ - type: audit_level
24
+ params:
25
+ level: verbose
26
+ implies:
27
+ - messaging.email.summary
28
+ conflicts_with: []
29
+ step_up_required: true
@@ -0,0 +1,22 @@
1
+ id: messaging.relay.to_principal
2
+ version: 1.0.0
3
+ label: Relay message to owner
4
+ description: Peer can ask your agent to relay a short message to you (the principal).
5
+ category: messaging
6
+ risk: low
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"relay_to_principal",
12
+ resource == Principal::"self"
13
+ );
14
+ consent_text_template: "Let Peer send you short relayed messages."
15
+ obligations_forced:
16
+ - type: rate_limit
17
+ params:
18
+ window: hour
19
+ max: 10
20
+ implies: []
21
+ conflicts_with: []
22
+ step_up_required: false
@@ -0,0 +1,25 @@
1
+ id: notes.read
2
+ version: 1.0.0
3
+ label: Read notes
4
+ description: Peer can read full note contents in a specific collection.
5
+ category: notes
6
+ risk: medium
7
+ parameters:
8
+ - name: collection_id
9
+ type: ProjectID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"read",
15
+ resource in Collection::"{{collection_id}}"
16
+ );
17
+ consent_text_template: "Read notes in collection {{collection_id}}."
18
+ obligations_forced:
19
+ - type: audit_level
20
+ params:
21
+ level: verbose
22
+ implies:
23
+ - notes.search
24
+ conflicts_with: []
25
+ step_up_required: false
@@ -0,0 +1,24 @@
1
+ id: notes.search
2
+ version: 1.0.0
3
+ label: Search notes
4
+ description: Peer can search notes within a collection and receive title+snippet matches.
5
+ category: notes
6
+ risk: medium
7
+ parameters:
8
+ - name: collection_id
9
+ type: ProjectID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"search",
15
+ resource in Collection::"{{collection_id}}"
16
+ );
17
+ consent_text_template: "Search notes in collection {{collection_id}}."
18
+ obligations_forced:
19
+ - type: summarize_only
20
+ params:
21
+ max_words: 100
22
+ implies: []
23
+ conflicts_with: []
24
+ step_up_required: false
@@ -0,0 +1,32 @@
1
+ id: notes.write
2
+ version: 1.0.0
3
+ label: Create/update notes
4
+ description: Peer can create and update notes in a collection, up to a daily cap.
5
+ category: notes
6
+ risk: medium
7
+ parameters:
8
+ - name: collection_id
9
+ type: ProjectID
10
+ required: true
11
+ - name: max_per_day
12
+ type: Integer
13
+ required: true
14
+ default: 100
15
+ validation: "1..1000"
16
+ cedar_template: |
17
+ permit (
18
+ principal == Agent::"{{audience_did}}",
19
+ action in [Action::"write", Action::"update"],
20
+ resource in Collection::"{{collection_id}}"
21
+ ) when {
22
+ context.notes_written_today < {{max_per_day}}
23
+ };
24
+ consent_text_template: "Create/update notes in {{collection_id}} (up to {{max_per_day}}/day)."
25
+ obligations_forced:
26
+ - type: audit_level
27
+ params:
28
+ level: verbose
29
+ implies:
30
+ - notes.read
31
+ conflicts_with: []
32
+ step_up_required: false
@@ -0,0 +1,37 @@
1
+ id: payments.authorize.capped
2
+ version: 1.0.0
3
+ label: Authorize payments up to a cap
4
+ description: Peer can trigger x402 payments up to the per-transaction and rolling 30-day caps you set.
5
+ category: payments
6
+ risk: high
7
+ parameters:
8
+ - name: max_per_txn_usd
9
+ type: Decimal
10
+ required: true
11
+ default: 5
12
+ validation: "0.01..1000"
13
+ - name: max_per_30d_usd
14
+ type: Decimal
15
+ required: true
16
+ default: 50
17
+ validation: "0.01..10000"
18
+ cedar_template: |
19
+ permit (
20
+ principal == Agent::"{{audience_did}}",
21
+ action == Action::"authorize_payment",
22
+ resource == Wallet::"primary"
23
+ ) when {
24
+ context.quoted_price_usd <= {{max_per_txn_usd}} &&
25
+ context.spend_last_30d_usd + context.quoted_price_usd <= {{max_per_30d_usd}}
26
+ };
27
+ consent_text_template: "Pay up to ${{max_per_txn_usd}} per request, ${{max_per_30d_usd}} total per 30 days."
28
+ obligations_forced:
29
+ - type: notify_principal
30
+ params: {}
31
+ - type: audit_level
32
+ params:
33
+ level: verbose
34
+ implies: []
35
+ conflicts_with: []
36
+ tier_gate: self_xyz.verified_human
37
+ step_up_required: true
@@ -0,0 +1,28 @@
1
+ id: payments.history.read
2
+ version: 1.0.0
3
+ label: Read past transactions
4
+ description: Peer can read your payment history for the past N days.
5
+ category: payments
6
+ risk: medium
7
+ parameters:
8
+ - name: days_back
9
+ type: Integer
10
+ required: true
11
+ default: 30
12
+ validation: "1..365"
13
+ cedar_template: |
14
+ permit (
15
+ principal == Agent::"{{audience_did}}",
16
+ action == Action::"read",
17
+ resource == PaymentHistory::"self"
18
+ ) when {
19
+ context.query_window_days <= {{days_back}}
20
+ };
21
+ consent_text_template: "Read payment history for the past {{days_back}} days."
22
+ obligations_forced:
23
+ - type: audit_level
24
+ params:
25
+ level: verbose
26
+ implies: []
27
+ conflicts_with: []
28
+ step_up_required: false
@@ -0,0 +1,18 @@
1
+ id: payments.quote.request
2
+ version: 1.0.0
3
+ label: Request a price quote
4
+ description: Peer can request a price quote for an action or purchase (quote only, no payment).
5
+ category: payments
6
+ risk: low
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"request_quote",
12
+ resource == Wallet::"primary"
13
+ );
14
+ consent_text_template: "Let Peer request a price quote (no payment)."
15
+ obligations_forced: []
16
+ implies: []
17
+ conflicts_with: []
18
+ step_up_required: false
@@ -0,0 +1,24 @@
1
+ id: payments.refund.request
2
+ version: 1.0.0
3
+ label: Request refund
4
+ description: Peer can request a refund against a prior payment.
5
+ category: payments
6
+ risk: medium
7
+ parameters: []
8
+ cedar_template: |
9
+ permit (
10
+ principal == Agent::"{{audience_did}}",
11
+ action == Action::"request_refund",
12
+ resource == Payment
13
+ );
14
+ consent_text_template: "Let Peer request a refund on a prior payment."
15
+ obligations_forced:
16
+ - type: require_principal_confirmation
17
+ params:
18
+ max_age_seconds: 0
19
+ - type: audit_level
20
+ params:
21
+ level: verbose
22
+ implies: []
23
+ conflicts_with: []
24
+ step_up_required: false
@@ -0,0 +1,27 @@
1
+ id: tasks.assign
2
+ version: 1.0.0
3
+ label: Assign tasks to humans
4
+ description: Peer can assign tasks in a project to specific people.
5
+ category: tasks
6
+ risk: high
7
+ parameters:
8
+ - name: project_id
9
+ type: ProjectID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"assign",
15
+ resource in Project::"{{project_id}}"
16
+ );
17
+ consent_text_template: "Assign tasks to people in project {{project_id}}."
18
+ obligations_forced:
19
+ - type: audit_level
20
+ params:
21
+ level: verbose
22
+ - type: notify_principal
23
+ params: {}
24
+ implies:
25
+ - tasks.read
26
+ conflicts_with: []
27
+ step_up_required: true
@@ -0,0 +1,31 @@
1
+ id: tasks.create
2
+ version: 1.0.0
3
+ label: Create tasks
4
+ description: Peer can create tasks in a project, up to a daily cap.
5
+ category: tasks
6
+ risk: medium
7
+ parameters:
8
+ - name: project_id
9
+ type: ProjectID
10
+ required: true
11
+ - name: max_per_day
12
+ type: Integer
13
+ required: true
14
+ default: 50
15
+ validation: "1..500"
16
+ cedar_template: |
17
+ permit (
18
+ principal == Agent::"{{audience_did}}",
19
+ action == Action::"create",
20
+ resource in Project::"{{project_id}}"
21
+ ) when {
22
+ context.tasks_created_today < {{max_per_day}}
23
+ };
24
+ consent_text_template: "Create tasks in {{project_id}} (up to {{max_per_day}}/day)."
25
+ obligations_forced:
26
+ - type: audit_level
27
+ params:
28
+ level: verbose
29
+ implies: []
30
+ conflicts_with: []
31
+ step_up_required: false
@@ -0,0 +1,21 @@
1
+ id: tasks.list
2
+ version: 1.0.0
3
+ label: List tasks
4
+ description: Peer can list tasks within a project.
5
+ category: tasks
6
+ risk: low
7
+ parameters:
8
+ - name: project_id
9
+ type: ProjectID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"list",
15
+ resource in Project::"{{project_id}}"
16
+ );
17
+ consent_text_template: "List tasks in project {{project_id}}."
18
+ obligations_forced: []
19
+ implies: []
20
+ conflicts_with: []
21
+ step_up_required: false
@@ -0,0 +1,22 @@
1
+ id: tasks.read
2
+ version: 1.0.0
3
+ label: Read task details
4
+ description: Peer can read details (title, status, assignee, due) of tasks within a project.
5
+ category: tasks
6
+ risk: low
7
+ parameters:
8
+ - name: project_id
9
+ type: ProjectID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"read",
15
+ resource in Project::"{{project_id}}"
16
+ );
17
+ consent_text_template: "Read task details in project {{project_id}}."
18
+ obligations_forced: []
19
+ implies:
20
+ - tasks.list
21
+ conflicts_with: []
22
+ step_up_required: false
@@ -0,0 +1,22 @@
1
+ id: tasks.status.update
2
+ version: 1.0.0
3
+ label: Update task status
4
+ description: Peer can update the status (open/in-progress/done) of tasks in a project.
5
+ category: tasks
6
+ risk: medium
7
+ parameters:
8
+ - name: project_id
9
+ type: ProjectID
10
+ required: true
11
+ cedar_template: |
12
+ permit (
13
+ principal == Agent::"{{audience_did}}",
14
+ action == Action::"update_status",
15
+ resource in Project::"{{project_id}}"
16
+ );
17
+ consent_text_template: "Update task status in {{project_id}}."
18
+ obligations_forced: []
19
+ implies:
20
+ - tasks.read
21
+ conflicts_with: []
22
+ step_up_required: false