Feat v0.3.7 package audit (#20)
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-frontend (push) Successful in 6s
CI/CD / test-go-pg (push) Successful in 2m36s
CI/CD / test-sqlite (push) Successful in 2m41s
CI/CD / build-and-deploy (push) Successful in 1m13s

Co-authored-by: Jeffrey Smith <jasafpro@gmail.com>
Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #20.
This commit is contained in:
2026-03-28 21:22:39 +00:00
committed by xcaliber
parent d68451fe8e
commit d91ec02dd7
47 changed files with 2067 additions and 53 deletions

View File

@@ -0,0 +1,33 @@
# Content Approval
Multi-party content review with quorum signoff and revision cycle.
## Features
- **Multi-party signoff** — 2 approvals required (quorum)
- **Rejection reroute** — rejection sends content back for revision
- **Review cycle** — revision stage always routes back to review (loop)
## Stage Flow
```
[draft] → [review] → [publish]
team team ↕ team
[revision]
team
```
## Review Cycle
1. Author submits draft → enters review
2. Reviewer A approves, Reviewer B rejects → routes to revision
3. Author revises → branch rule routes back to review
4. Both reviewers approve → advances to publish
## Installation
```bash
curl -X POST $BASE/api/v1/admin/packages/install \
-H "Authorization: Bearer $TOKEN" \
-F "file=@packages/content-approval"
```

View File

@@ -0,0 +1,95 @@
{
"id": "content-approval",
"title": "Content Approval",
"type": "workflow",
"version": "0.1.0",
"tier": "browser",
"icon": "📝",
"author": "Switchboard Core",
"description": "Multi-party content review with quorum signoff and revision cycle.",
"permissions": [],
"workflow_definition": {
"name": "Content Approval",
"slug": "content-approval",
"entry_mode": "team_only",
"stages": [
{
"name": "draft",
"ordinal": 0,
"stage_mode": "form",
"audience": "team",
"stage_type": "simple",
"auto_transition": false,
"form_template": {
"fieldsets": [
{
"label": "Content Draft",
"fields": [
{ "key": "title", "label": "Title", "type": "text", "required": true },
{ "key": "body", "label": "Body", "type": "textarea", "required": true },
{ "key": "category", "label": "Category", "type": "select", "options": ["blog", "announcement", "documentation", "policy"], "required": true }
]
}
]
}
},
{
"name": "review",
"ordinal": 1,
"stage_mode": "review",
"audience": "team",
"stage_type": "simple",
"auto_transition": false,
"stage_config": {
"validation": {
"required_approvals": 2,
"reject_action": "revision"
}
}
},
{
"name": "revision",
"ordinal": 2,
"stage_mode": "form",
"audience": "team",
"stage_type": "simple",
"auto_transition": false,
"form_template": {
"fieldsets": [
{
"label": "Revision",
"fields": [
{ "key": "title", "label": "Title", "type": "text", "required": true },
{ "key": "body", "label": "Body", "type": "textarea", "required": true },
{ "key": "revision_notes", "label": "What Changed", "type": "textarea", "required": true }
]
}
]
},
"branch_rules": [
{ "field": "title", "op": "exists", "value": "", "target_stage": "review" }
]
},
{
"name": "publish",
"ordinal": 3,
"stage_mode": "form",
"audience": "team",
"stage_type": "simple",
"auto_transition": false,
"form_template": {
"fieldsets": [
{
"label": "Publish Confirmation",
"fields": [
{ "key": "publish_url", "label": "Published URL", "type": "text" },
{ "key": "publish_notes", "label": "Notes", "type": "textarea" }
]
}
]
}
}
]
}
}