syntaur 0.2.0 → 0.3.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.
- package/dashboard/dist/assets/{_basePickBy-CHKX1r7P.js → _basePickBy-BhaCV7eH.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-CTxTc4MS.js → _baseUniq-CDPcqrs2.js} +1 -1
- package/dashboard/dist/assets/{arc-BUo5zftd.js → arc-BP0RxLwl.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-CrJLm-P0.js → architectureDiagram-2XIMDMQ5-BDzvaeJp.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-BK60lBBJ.js → blockDiagram-WCTKOSBZ-ZeL9mROo.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-C7oJEvA0.js → c4Diagram-IC4MRINW-7S5bvFLp.js} +1 -1
- package/dashboard/dist/assets/channel-CcB_wcgb.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-CjUPlzHz.js → chunk-4BX2VUAB-Ca7R4nv5.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-6HmWguiO.js → chunk-55IACEB6-flEv13FB.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-CLuJnd1b.js → chunk-FMBD7UC4-CfcYWBM6.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-B4d62qWV.js → chunk-JSJVCQXG-Dw4yL0VS.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-AsEKRPq2.js → chunk-KX2RTZJC-B2cDe40G.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-DQhHHvwY.js → chunk-NQ4KR5QH-LZVm0IWg.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-Ds1TtI3E.js → chunk-QZHKN3VN-Dg0EeHNI.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-C7jE3-cR.js → chunk-WL4C6EOR-v3rXNwXc.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BJr38z2g.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BJr38z2g.js +1 -0
- package/dashboard/dist/assets/clone-Cfs2GUGt.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-C9ka5v1m.js → cose-bilkent-S5V4N54A-D-3JzLoS.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-BbgPQBKy.js → dagre-KLK3FWXG-d_mbczhU.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-DpdeZFD4.js → diagram-E7M64L7V-BUyAp8pW.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-FlHLQzOV.js → diagram-IFDJBPK2-C8doXcyQ.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-B22NkEF_.js → diagram-P4PSJMXO-BUSmHa55.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-zSqmtDid.js → erDiagram-INFDFZHY-Bn5_0LPU.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-BP_0XmVV.js → flowDiagram-PKNHOUZH-CnEjerQM.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-8uRyYgZV.js → ganttDiagram-A5KZAMGK-CL94fbyy.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-JFqg8sv4.js → gitGraphDiagram-K3NZZRJ6-4i_PeG8V.js} +1 -1
- package/dashboard/dist/assets/{graph-a-PAH599.js → graph-BtoFhoAd.js} +1 -1
- package/dashboard/dist/assets/index-DZUGYrvE.css +1 -0
- package/dashboard/dist/assets/index-Dv_-SxuL.js +481 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-C3kq7Nbv.js → infoDiagram-LFFYTUFH-CdUsuNgZ.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-Kqi4EZ-n.js → ishikawaDiagram-PHBUUO56-BjggRlUx.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-CTfv0Wcr.js → journeyDiagram-4ABVD52K-V4AgexlR.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-Dmx0lgvR.js → kanban-definition-K7BYSVSG-ChlylQRf.js} +1 -1
- package/dashboard/dist/assets/{layout-KKRbT2Od.js → layout-DLcz9AmA.js} +1 -1
- package/dashboard/dist/assets/{linear-5egaBiw7.js → linear-l2xnSHze.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-C9pF_oFQ.js → mermaid.core-DKO1ytRW.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-C7HXYEXt.js → mindmap-definition-YRQLILUH-DTmTPHrT.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-DkdZm-YP.js → pieDiagram-SKSYHLDU-CwK80y8Y.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-DkcRJs5F.js → quadrantDiagram-337W2JSQ-Be1xqW_w.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-BaTDVYTl.js → requirementDiagram-Z7DCOOCP-JcspXCs0.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-DvPLbGV5.js → sankeyDiagram-WA2Y5GQK-nJb1BInq.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-DQoZ2xMK.js → sequenceDiagram-2WXFIKYE-DUrclEgA.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-CS4l0OjM.js → stateDiagram-RAJIS63D-CjinnNtF.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-yfclw-nM.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-aC0iCFCW.js → timeline-definition-YZTLITO2-kM-oVLNz.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-Ie-PFjgx.js → treemap-KZPCXAKY-CYziFlrQ.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-CJN3ExTQ.js → vennDiagram-LZ73GAT5-DX0DbxBN.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-DSiDu1CN.js → xychartDiagram-JWTSCODW-BGqM42ZM.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.d.ts +5 -0
- package/dist/dashboard/server.js +2579 -1185
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +2092 -650
- package/dist/index.js.map +1 -1
- package/examples/playbooks/keep-records-updated.md +14 -8
- package/examples/playbooks/read-before-plan.md +8 -5
- package/examples/sample-project/_status.md +1 -1
- package/examples/sample-project/assignments/design-auth-schema/assignment.md +4 -17
- package/examples/sample-project/assignments/design-auth-schema/comments.md +26 -0
- package/examples/sample-project/assignments/design-auth-schema/progress.md +20 -0
- package/examples/sample-project/assignments/implement-jwt-middleware/assignment.md +4 -17
- package/examples/sample-project/assignments/implement-jwt-middleware/comments.md +17 -0
- package/examples/sample-project/assignments/implement-jwt-middleware/progress.md +20 -0
- package/examples/sample-project/assignments/write-auth-tests/assignment.md +4 -8
- package/examples/sample-project/assignments/write-auth-tests/comments.md +10 -0
- package/examples/sample-project/assignments/write-auth-tests/progress.md +10 -0
- package/package.json +1 -1
- package/platforms/claude-code/agents/syntaur-expert.md +40 -12
- package/platforms/claude-code/references/file-ownership.md +15 -3
- package/platforms/claude-code/references/protocol-summary.md +19 -5
- package/platforms/claude-code/skills/complete-assignment/SKILL.md +14 -0
- package/platforms/claude-code/skills/create-assignment/SKILL.md +12 -10
- package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +21 -11
- package/platforms/codex/agents/syntaur-operator.md +33 -21
- package/platforms/codex/references/file-ownership.md +14 -3
- package/platforms/codex/references/protocol-summary.md +19 -5
- package/platforms/codex/skills/complete-assignment/SKILL.md +1 -0
- package/platforms/codex/skills/create-assignment/SKILL.md +13 -8
- package/platforms/codex/skills/syntaur-protocol/SKILL.md +26 -13
- package/dashboard/dist/assets/channel-DdltvFFH.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BHqdFE-8.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BHqdFE-8.js +0 -1
- package/dashboard/dist/assets/clone-CBJOOeOm.js +0 -1
- package/dashboard/dist/assets/index-CoVCLSh2.css +0 -1
- package/dashboard/dist/assets/index-yyAIuzrP.js +0 -471
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DkBtE1WJ.js +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "Keep Records Updated"
|
|
3
3
|
slug: keep-records-updated
|
|
4
|
-
description: "Agents must keep assignment.md
|
|
4
|
+
description: "Agents must keep assignment.md criteria, progress.md, and related records current in real-time"
|
|
5
5
|
when_to_use: "After every meaningful action, when completing acceptance criteria, when starting or stopping work"
|
|
6
6
|
created: "2026-04-02T00:00:00Z"
|
|
7
|
-
updated: "2026-04-
|
|
7
|
+
updated: "2026-04-20T00:00:00Z"
|
|
8
8
|
tags:
|
|
9
9
|
- protocol
|
|
10
10
|
- recordkeeping
|
|
@@ -13,18 +13,24 @@ tags:
|
|
|
13
13
|
# Keep Records Updated
|
|
14
14
|
|
|
15
15
|
## After every meaningful action:
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
16
|
+
- Append a new entry to `progress.md` with what you did
|
|
17
|
+
- Progress entries live in `progress.md` (reverse-chronological order, newest first with a `## <ISO 8601 timestamp>` heading). Do NOT add a `## Progress` section to `assignment.md` — that section is removed as of protocol v2.0.
|
|
18
|
+
- Bump `entryCount` and `updated` in `progress.md`'s frontmatter.
|
|
19
19
|
|
|
20
20
|
## When you complete an acceptance criterion:
|
|
21
|
-
- Check it off in the `## Acceptance Criteria` section immediately
|
|
21
|
+
- Check it off in the `## Acceptance Criteria` section of `assignment.md` immediately
|
|
22
22
|
- Do not batch these up -- mark them as you go
|
|
23
23
|
|
|
24
|
+
## When you have a question, note, or piece of feedback:
|
|
25
|
+
- Run `syntaur comment <slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>]`
|
|
26
|
+
- Never edit `comments.md` directly — all writes are CLI-mediated
|
|
27
|
+
- Questions carry a `resolved` flag that can be toggled from the dashboard
|
|
28
|
+
|
|
24
29
|
## When starting work:
|
|
25
|
-
-
|
|
30
|
+
- Append an entry to `progress.md` noting you've begun and what your approach is
|
|
26
31
|
- If any plan files exist (plan.md, plan-v2.md, ...), update their task checkboxes as you complete steps
|
|
27
32
|
|
|
28
33
|
## When stopping or handing off:
|
|
29
|
-
-
|
|
34
|
+
- Append a final entry to `progress.md` summarizing current state
|
|
35
|
+
- Write a structured handoff entry in `handoff.md`
|
|
30
36
|
- Note anything the next agent needs to know
|
|
@@ -4,7 +4,7 @@ slug: read-before-plan
|
|
|
4
4
|
description: "Agents must read all project context files before creating or modifying a plan"
|
|
5
5
|
when_to_use: "Before creating or modifying any plan file (plan.md, plan-v2.md, ...)"
|
|
6
6
|
created: "2026-04-02T00:00:00Z"
|
|
7
|
-
updated: "2026-04-
|
|
7
|
+
updated: "2026-04-20T00:00:00Z"
|
|
8
8
|
tags:
|
|
9
9
|
- protocol
|
|
10
10
|
- planning
|
|
@@ -14,14 +14,17 @@ tags:
|
|
|
14
14
|
|
|
15
15
|
Before creating or modifying any plan file (plan.md, plan-v2.md, ...), read these files in order:
|
|
16
16
|
|
|
17
|
+
For project-nested assignments:
|
|
17
18
|
1. `manifest.md` -- understand the project structure
|
|
18
19
|
2. `project.md` -- understand the goal and scope
|
|
19
|
-
3. `
|
|
20
|
-
4. `
|
|
21
|
-
5. `
|
|
20
|
+
3. `assignment.md` -- understand your specific task, acceptance criteria, and dependencies. Frontmatter includes `project: <slug> | null` and `type: <classification> | null`.
|
|
21
|
+
4. `progress.md` (if exists) -- reverse-chron log of what has been done on this assignment
|
|
22
|
+
5. `comments.md` (if exists) -- open questions, notes, and feedback
|
|
22
23
|
6. `handoff.md` (if exists) -- understand what previous agents did and learned
|
|
23
24
|
7. `decision-record.md` (if exists) -- understand past decisions and their rationale
|
|
24
25
|
|
|
26
|
+
For standalone assignments (at `~/.syntaur/assignments/<uuid>/`), skip `manifest.md` and `project.md` — those only exist for project-nested assignments.
|
|
27
|
+
|
|
25
28
|
Do NOT skip files because you think you know what's in them. Context from prior agents is often critical.
|
|
26
29
|
|
|
27
|
-
If the assignment has `dependsOn` entries, read those assignments too --
|
|
30
|
+
If the assignment has `dependsOn` entries, read those assignments too -- and read **their** `decision-record.md` first. Upstream decisions are binding constraints you must not silently contradict. (The grab-assignment skill auto-loads these.)
|
|
@@ -44,4 +44,4 @@ graph TD
|
|
|
44
44
|
|
|
45
45
|
- **0 blocked** assignments
|
|
46
46
|
- **0 failed** assignments
|
|
47
|
-
- **1
|
|
47
|
+
- **1 open** question in [implement-jwt-middleware/comments.md](./assignments/implement-jwt-middleware/comments.md)
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
id: d1e2f3a4-b5c6-7890-abcd-111111111111
|
|
3
3
|
slug: design-auth-schema
|
|
4
4
|
title: Design Auth Database Schema
|
|
5
|
+
project: build-auth-system
|
|
6
|
+
type: feature
|
|
5
7
|
status: completed
|
|
6
8
|
priority: high
|
|
7
9
|
created: "2026-03-15T09:30:00Z"
|
|
@@ -40,25 +42,10 @@ Design the PostgreSQL database schema for the authentication system. This includ
|
|
|
40
42
|
|
|
41
43
|
This is the foundational data layer for the auth system. The schema must support the JWT middleware (implement-jwt-middleware) and be testable (write-auth-tests). See [Auth Requirements](../../resources/auth-requirements.md) for functional specs.
|
|
42
44
|
|
|
43
|
-
## Questions & Answers
|
|
44
|
-
|
|
45
|
-
### Q: Should we use UUIDs or auto-incrementing integers for user IDs?
|
|
46
|
-
**Asked:** 2026-03-16T10:00:00Z
|
|
47
|
-
**A:** Use UUIDs (v4). They avoid enumeration attacks and simplify future sharding. Generate them in the application layer, not the database.
|
|
48
|
-
|
|
49
|
-
## Progress
|
|
50
|
-
|
|
51
|
-
### 2026-03-17T10:00:00Z
|
|
52
|
-
Completed all migration scripts and schema design. Final schema includes three tables: `users`, `sessions`, and `refresh_tokens`. Added composite index on `sessions(user_id, revoked_at)` for the active-session lookup query. All migrations tested against a clean database. Ready for handoff to JWT middleware implementation.
|
|
53
|
-
|
|
54
|
-
### 2026-03-16T14:00:00Z
|
|
55
|
-
Draft schema complete for users and sessions tables. Working on refresh token rotation tracking. Decided to add a `token_family` column to detect reuse of old refresh tokens.
|
|
56
|
-
|
|
57
|
-
### 2026-03-16T09:30:00Z
|
|
58
|
-
Started schema design. Reviewed auth requirements document. Planning three tables: users, sessions, refresh_tokens.
|
|
59
|
-
|
|
60
45
|
## Links
|
|
61
46
|
|
|
47
|
+
- [Progress](./progress.md)
|
|
48
|
+
- [Comments](./comments.md)
|
|
62
49
|
- [Scratchpad](./scratchpad.md)
|
|
63
50
|
- [Handoff](./handoff.md)
|
|
64
51
|
- [Decision Record](./decision-record.md)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
assignment: design-auth-schema
|
|
3
|
+
entryCount: 2
|
|
4
|
+
generated: "2026-03-17T10:00:00Z"
|
|
5
|
+
updated: "2026-03-16T10:05:00Z"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Comments
|
|
9
|
+
|
|
10
|
+
## c-1
|
|
11
|
+
|
|
12
|
+
**Recorded:** 2026-03-16T10:00:00Z
|
|
13
|
+
**Author:** claude-2
|
|
14
|
+
**Type:** question
|
|
15
|
+
**Resolved:** true
|
|
16
|
+
|
|
17
|
+
Should we use UUIDs or auto-incrementing integers for user IDs?
|
|
18
|
+
|
|
19
|
+
## c-2
|
|
20
|
+
|
|
21
|
+
**Recorded:** 2026-03-16T10:05:00Z
|
|
22
|
+
**Author:** human
|
|
23
|
+
**Type:** note
|
|
24
|
+
**Reply to:** c-1
|
|
25
|
+
|
|
26
|
+
Use UUIDs (v4). They avoid enumeration attacks and simplify future sharding. Generate them in the application layer, not the database.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
assignment: design-auth-schema
|
|
3
|
+
entryCount: 3
|
|
4
|
+
generated: "2026-03-16T09:30:00Z"
|
|
5
|
+
updated: "2026-03-17T10:00:00Z"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Progress
|
|
9
|
+
|
|
10
|
+
## 2026-03-17T10:00:00Z
|
|
11
|
+
|
|
12
|
+
Completed all migration scripts and schema design. Final schema includes three tables: `users`, `sessions`, and `refresh_tokens`. Added composite index on `sessions(user_id, revoked_at)` for the active-session lookup query. All migrations tested against a clean database. Ready for handoff to JWT middleware implementation.
|
|
13
|
+
|
|
14
|
+
## 2026-03-16T14:00:00Z
|
|
15
|
+
|
|
16
|
+
Draft schema complete for users and sessions tables. Working on refresh token rotation tracking. Decided to add a `token_family` column to detect reuse of old refresh tokens.
|
|
17
|
+
|
|
18
|
+
## 2026-03-16T09:30:00Z
|
|
19
|
+
|
|
20
|
+
Started schema design. Reviewed auth requirements document. Planning three tables: users, sessions, refresh_tokens.
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
id: d1e2f3a4-b5c6-7890-abcd-222222222222
|
|
3
3
|
slug: implement-jwt-middleware
|
|
4
4
|
title: Implement JWT Authentication Middleware
|
|
5
|
+
project: build-auth-system
|
|
6
|
+
type: feature
|
|
5
7
|
status: in_progress
|
|
6
8
|
priority: high
|
|
7
9
|
created: "2026-03-15T09:30:00Z"
|
|
@@ -44,25 +46,10 @@ Implement Express.js middleware that validates JWT access tokens on protected ro
|
|
|
44
46
|
|
|
45
47
|
Depends on the database schema from [design-auth-schema](../design-auth-schema/assignment.md). The schema is complete — see the [handoff notes](../design-auth-schema/handoff.md) for integration details. Key table: `sessions` with `jti` column for token validation. See [Auth Requirements](../../resources/auth-requirements.md) for full specs.
|
|
46
48
|
|
|
47
|
-
## Questions & Answers
|
|
48
|
-
|
|
49
|
-
### Q: Should the refresh token endpoint require the old access token or just the refresh token?
|
|
50
|
-
**Asked:** 2026-03-18T11:00:00Z
|
|
51
|
-
**A:** pending
|
|
52
|
-
|
|
53
|
-
## Progress
|
|
54
|
-
|
|
55
|
-
### 2026-03-18T14:30:00Z
|
|
56
|
-
Implemented role-based route guard middleware (`requireRole`). Working on the refresh token endpoint next. The token generation and basic validation middleware are working and passing manual tests. Need to wire up the refresh token rotation logic using the `token_family` pattern from the schema design.
|
|
57
|
-
|
|
58
|
-
### 2026-03-18T10:00:00Z
|
|
59
|
-
JWT validation middleware is functional. It extracts the token from the Authorization header, verifies the RS256 signature, checks expiry, and looks up the `jti` in the sessions table to confirm the session is not revoked. Added proper error responses for expired, invalid, and revoked tokens.
|
|
60
|
-
|
|
61
|
-
### 2026-03-17T10:30:00Z
|
|
62
|
-
Started implementation. Set up RS256 key pair loading from environment variables. Implemented `generateAccessToken` and `generateRefreshToken` functions. Created the login endpoint that authenticates with bcrypt and returns both tokens.
|
|
63
|
-
|
|
64
49
|
## Links
|
|
65
50
|
|
|
51
|
+
- [Progress](./progress.md)
|
|
52
|
+
- [Comments](./comments.md)
|
|
66
53
|
- [Scratchpad](./scratchpad.md)
|
|
67
54
|
- [Handoff](./handoff.md)
|
|
68
55
|
- [Decision Record](./decision-record.md)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
assignment: implement-jwt-middleware
|
|
3
|
+
entryCount: 1
|
|
4
|
+
generated: "2026-03-18T11:00:00Z"
|
|
5
|
+
updated: "2026-03-18T11:00:00Z"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Comments
|
|
9
|
+
|
|
10
|
+
## c-1
|
|
11
|
+
|
|
12
|
+
**Recorded:** 2026-03-18T11:00:00Z
|
|
13
|
+
**Author:** claude-1
|
|
14
|
+
**Type:** question
|
|
15
|
+
**Resolved:** false
|
|
16
|
+
|
|
17
|
+
Should the refresh token endpoint require the old access token or just the refresh token?
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
assignment: implement-jwt-middleware
|
|
3
|
+
entryCount: 3
|
|
4
|
+
generated: "2026-03-17T10:30:00Z"
|
|
5
|
+
updated: "2026-03-18T14:30:00Z"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Progress
|
|
9
|
+
|
|
10
|
+
## 2026-03-18T14:30:00Z
|
|
11
|
+
|
|
12
|
+
Implemented role-based route guard middleware (`requireRole`). Working on the refresh token endpoint next. The token generation and basic validation middleware are working and passing manual tests. Need to wire up the refresh token rotation logic using the `token_family` pattern from the schema design.
|
|
13
|
+
|
|
14
|
+
## 2026-03-18T10:00:00Z
|
|
15
|
+
|
|
16
|
+
JWT validation middleware is functional. It extracts the token from the Authorization header, verifies the RS256 signature, checks expiry, and looks up the `jti` in the sessions table to confirm the session is not revoked. Added proper error responses for expired, invalid, and revoked tokens.
|
|
17
|
+
|
|
18
|
+
## 2026-03-17T10:30:00Z
|
|
19
|
+
|
|
20
|
+
Started implementation. Set up RS256 key pair loading from environment variables. Implemented `generateAccessToken` and `generateRefreshToken` functions. Created the login endpoint that authenticates with bcrypt and returns both tokens.
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
id: d1e2f3a4-b5c6-7890-abcd-333333333333
|
|
3
3
|
slug: write-auth-tests
|
|
4
4
|
title: Write Auth System Tests
|
|
5
|
+
project: build-auth-system
|
|
6
|
+
type: feature
|
|
5
7
|
status: pending
|
|
6
8
|
priority: medium
|
|
7
9
|
created: "2026-03-15T09:30:00Z"
|
|
@@ -42,16 +44,10 @@ Write comprehensive unit and integration tests for the authentication system, co
|
|
|
42
44
|
|
|
43
45
|
This assignment depends on [implement-jwt-middleware](../implement-jwt-middleware/assignment.md) being completed. Tests will cover both the schema layer (from design-auth-schema) and the middleware/endpoint layer (from implement-jwt-middleware). Use Jest as the test framework with `supertest` for HTTP integration tests.
|
|
44
46
|
|
|
45
|
-
## Questions & Answers
|
|
46
|
-
|
|
47
|
-
No questions yet.
|
|
48
|
-
|
|
49
|
-
## Progress
|
|
50
|
-
|
|
51
|
-
No progress yet.
|
|
52
|
-
|
|
53
47
|
## Links
|
|
54
48
|
|
|
49
|
+
- [Progress](./progress.md)
|
|
50
|
+
- [Comments](./comments.md)
|
|
55
51
|
- [Scratchpad](./scratchpad.md)
|
|
56
52
|
- [Handoff](./handoff.md)
|
|
57
53
|
- [Decision Record](./decision-record.md)
|
package/package.json
CHANGED
|
@@ -46,8 +46,6 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
46
46
|
<project-slug>/
|
|
47
47
|
manifest.md # Derived: root navigation
|
|
48
48
|
project.md # Human-authored: goal, context, success criteria
|
|
49
|
-
agent.md # Human-authored: universal agent instructions
|
|
50
|
-
claude.md # Human-authored: Claude Code-specific instructions
|
|
51
49
|
_index-assignments.md # Derived: assignment summary table
|
|
52
50
|
_index-plans.md # Derived: plan status summary
|
|
53
51
|
_index-decisions.md # Derived: decision record summary
|
|
@@ -56,6 +54,8 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
56
54
|
<assignment-slug>/
|
|
57
55
|
assignment.md # Agent-writable: source of truth for state (includes ## Todos)
|
|
58
56
|
plan*.md # Agent-writable: versioned implementation plans (0+, optional)
|
|
57
|
+
progress.md # Agent-writable, append-only: timestamped progress log
|
|
58
|
+
comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
|
|
59
59
|
scratchpad.md # Agent-writable: working notes
|
|
60
60
|
handoff.md # Agent-writable: append-only handoff log
|
|
61
61
|
decision-record.md # Agent-writable: append-only decision log
|
|
@@ -65,6 +65,15 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
65
65
|
memories/
|
|
66
66
|
_index.md # Derived
|
|
67
67
|
<memory-slug>.md # Shared-writable
|
|
68
|
+
assignments/
|
|
69
|
+
<assignment-id>/ # Standalone assignments — folder = UUID, project: null, slug display-only
|
|
70
|
+
assignment.md
|
|
71
|
+
plan*.md
|
|
72
|
+
progress.md
|
|
73
|
+
comments.md
|
|
74
|
+
scratchpad.md
|
|
75
|
+
handoff.md
|
|
76
|
+
decision-record.md
|
|
68
77
|
```
|
|
69
78
|
|
|
70
79
|
---
|
|
@@ -73,18 +82,21 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
73
82
|
|
|
74
83
|
### Human-Authored (READ-ONLY for agents)
|
|
75
84
|
- `project.md` — project overview, goal, context, success criteria
|
|
76
|
-
- `agent.md` — universal agent instructions
|
|
77
|
-
- `claude.md` — Claude Code-specific instructions
|
|
78
85
|
|
|
79
86
|
### Agent-Writable (single-writer per assignment)
|
|
80
|
-
- `assignment.md` — source of truth for assignment state (includes `## Todos` checklist)
|
|
87
|
+
- `assignment.md` — source of truth for assignment state (includes `## Todos` checklist). `## Todos` is also the landing spot for cross-assignment requests.
|
|
81
88
|
- `plan*.md` — versioned implementation plans (optional, one per `## Todos` entry: `plan.md`, `plan-v2.md`, ...)
|
|
89
|
+
- `progress.md` — append-only timestamped progress log (newest first). Replaces the old `## Progress` body section.
|
|
82
90
|
- `scratchpad.md` — unstructured working notes
|
|
83
91
|
- `handoff.md` — append-only handoff log
|
|
84
92
|
- `decision-record.md` — append-only decision log
|
|
85
93
|
|
|
86
94
|
Only the assigned agent may write to its own assignment folder.
|
|
87
95
|
|
|
96
|
+
### CLI-Mediated Shared-Writable
|
|
97
|
+
- `comments.md` — threaded questions/notes/feedback. Writes via `syntaur comment <slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>]`. Never edit directly.
|
|
98
|
+
- Another assignment's `## Todos` — writes via `syntaur request <source> <target> "text"`. Appends annotated `(from: <source>)`.
|
|
99
|
+
|
|
88
100
|
### Shared-Writable (any agent or human)
|
|
89
101
|
- `resources/<slug>.md` — reference material
|
|
90
102
|
- `memories/<slug>.md` — learnings discovered
|
|
@@ -155,8 +167,14 @@ Only the assigned agent may write to its own assignment folder.
|
|
|
155
167
|
| Command | Description |
|
|
156
168
|
|---------|-------------|
|
|
157
169
|
| `syntaur create-project <title> [--slug S] [--dir D]` | Create new project with full scaffolding |
|
|
158
|
-
| `syntaur create-assignment <title> --project M [--priority P] [--depends-on D] [--slug S]` | Create assignment in a project |
|
|
159
|
-
| `syntaur create-assignment <title> --one-off` | Create standalone
|
|
170
|
+
| `syntaur create-assignment <title> --project M [--priority P] [--depends-on D] [--slug S] [--type T]` | Create assignment in a project |
|
|
171
|
+
| `syntaur create-assignment <title> --one-off [--type T]` | Create standalone assignment at `~/.syntaur/assignments/<uuid>/` (project: null, slug display-only) |
|
|
172
|
+
|
|
173
|
+
### Coordination (CLI-mediated writes)
|
|
174
|
+
| Command | Description |
|
|
175
|
+
|---------|-------------|
|
|
176
|
+
| `syntaur comment <slug-or-uuid> "body" --type question\|note\|feedback [--reply-to <id>] [--project <slug>]` | Append to `comments.md`. Questions carry a resolve flag toggleable in the dashboard. |
|
|
177
|
+
| `syntaur request <target> "text" [--from <source>] [--project <slug>]` | Append a todo to another assignment's `## Todos`, annotated `(from: <source>)`. |
|
|
160
178
|
|
|
161
179
|
### State Transitions
|
|
162
180
|
| Command | Description |
|
|
@@ -295,10 +313,14 @@ Adapters embed protocol knowledge (write boundaries, lifecycle states, CLI comma
|
|
|
295
313
|
|
|
296
314
|
### Frontmatter Fields by File Type
|
|
297
315
|
|
|
298
|
-
**assignment.md:** id, slug, title, status, priority, created, updated, assignee, externalIds, dependsOn, blockedReason, workspace (repository, worktreePath, branch, parentBranch), tags
|
|
316
|
+
**assignment.md:** id, slug, title, **project (slug or null)**, **type (string or null)**, status, priority, created, updated, assignee, externalIds, dependsOn, blockedReason, workspace (repository, worktreePath, branch, parentBranch), tags
|
|
299
317
|
|
|
300
318
|
**plan files (plan.md, plan-v2.md, ...):** assignment, status (draft/approved/in_progress/completed), created, updated — zero or more per assignment, each linked from a todo in `assignment.md`'s `## Todos` section
|
|
301
319
|
|
|
320
|
+
**progress.md:** assignment, entryCount, generated, updated — body is reverse-chron `## <timestamp>` entries
|
|
321
|
+
|
|
322
|
+
**comments.md:** assignment, entryCount, generated, updated — body entries are `## <id>` with structured metadata lines (Recorded, Author, Type, optional Reply to, optional Resolved)
|
|
323
|
+
|
|
302
324
|
**handoff.md:** assignment, updated, handoffCount
|
|
303
325
|
|
|
304
326
|
**decision-record.md:** assignment, updated, decisionCount
|
|
@@ -307,13 +329,13 @@ Adapters embed protocol knowledge (write boundaries, lifecycle states, CLI comma
|
|
|
307
329
|
|
|
308
330
|
**manifest.md:** version, project, generated
|
|
309
331
|
|
|
310
|
-
**_status.md:** project, generated, status, progress (total/completed/in_progress/blocked/pending/review/failed), needsAttention (blockedCount/failedCount
|
|
332
|
+
**_status.md:** project, generated, status, progress (total/completed/in_progress/blocked/pending/review/failed), needsAttention (blockedCount/failedCount/**openQuestions**). `openQuestions` is counted from every assignment's `comments.md` (entries where `Type: question` and `Resolved: false` or absent).
|
|
311
333
|
|
|
312
334
|
### Conventions
|
|
313
335
|
- **Timestamps:** RFC 3339 / ISO 8601 with UTC: `2026-03-18T14:30:00Z`
|
|
314
336
|
- **Paths:** Absolute expanded form in YAML (never `~`), relative in markdown links
|
|
315
|
-
- **Slugs:** Lowercase, hyphen-separated, match folder names
|
|
316
|
-
- **Protocol version:** `"
|
|
337
|
+
- **Slugs:** Lowercase, hyphen-separated, match folder names (project-nested). For standalone assignments, the folder is named by UUID and `slug` is display-only.
|
|
338
|
+
- **Protocol version:** `"2.0"` (string, not number)
|
|
317
339
|
|
|
318
340
|
---
|
|
319
341
|
|
|
@@ -376,7 +398,13 @@ A: Use `/grab-assignment <project-slug>` — it lists pending assignments. Or ch
|
|
|
376
398
|
A: No. Single-writer guarantee — one agent per assignment folder. Use separate assignments for parallel work.
|
|
377
399
|
|
|
378
400
|
**Q: What if I need to ask the human a question?**
|
|
379
|
-
A:
|
|
401
|
+
A: Run `syntaur comment <slug> "question text" --type question`. It appends to `comments.md`, which replaces the old `## Questions & Answers` body section. The question rolls up into `_status.md`'s `openQuestions` counter and shows on the dashboard. Do NOT set status to `blocked` for questions — `blocked` is for runtime obstacles only.
|
|
402
|
+
|
|
403
|
+
**Q: What goes in `progress.md` vs `handoff.md`?**
|
|
404
|
+
A: `progress.md` is a continuous reverse-chron log of what you've done — append an entry per meaningful work unit. `handoff.md` is only written when you hand off work (to another agent or human), and summarizes the state at that transition.
|
|
405
|
+
|
|
406
|
+
**Q: How do I route work to another assignment without breaking the single-writer rule?**
|
|
407
|
+
A: Run `syntaur request <target> "text"` — it appends a todo to the target's `## Todos` annotated `(from: <source>)`. This is a CLI-mediated exception to the single-writer rule.
|
|
380
408
|
|
|
381
409
|
**Q: How do indexes get updated?**
|
|
382
410
|
A: Derived files are rebuilt by tooling. They are projections of assignment frontmatter. When divergence occurs, re-run rebuild.
|
|
@@ -7,8 +7,6 @@ Agents must NEVER modify these files:
|
|
|
7
7
|
| File | Location |
|
|
8
8
|
|------|----------|
|
|
9
9
|
| `project.md` | `<project>/project.md` |
|
|
10
|
-
| `agent.md` | `<project>/agent.md` |
|
|
11
|
-
| `claude.md` | `<project>/claude.md` |
|
|
12
10
|
|
|
13
11
|
## Agent-Writable (YOUR assignment folder ONLY)
|
|
14
12
|
|
|
@@ -18,11 +16,25 @@ You may ONLY write to files inside your assigned assignment folder:
|
|
|
18
16
|
|------|---------|
|
|
19
17
|
| `assignment.md` | Assignment record, source of truth for state (includes `## Todos` checklist) |
|
|
20
18
|
| `plan*.md` | Versioned implementation plans (optional, 0 or more: `plan.md`, `plan-v2.md`, ...) — each linked from a todo in `assignment.md` |
|
|
19
|
+
| `progress.md` | Append-only timestamped progress log (newest first). Replaces the old `## Progress` body section. |
|
|
21
20
|
| `scratchpad.md` | Working notes |
|
|
22
21
|
| `handoff.md` | Append-only handoff log |
|
|
23
22
|
| `decision-record.md` | Append-only decision log |
|
|
24
23
|
|
|
25
|
-
Path pattern: `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
24
|
+
Path pattern (project-nested): `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
25
|
+
Path pattern (standalone): `~/.syntaur/assignments/<your-assignment-uuid>/`
|
|
26
|
+
|
|
27
|
+
## CLI-Mediated Shared-Writable
|
|
28
|
+
|
|
29
|
+
Do NOT edit these files directly. Use the listed CLI commands:
|
|
30
|
+
|
|
31
|
+
| File | Mediator |
|
|
32
|
+
|------|----------|
|
|
33
|
+
| `comments.md` (any assignment) | `syntaur comment <slug-or-uuid> "body" [--type question\|note\|feedback] [--reply-to <id>]` |
|
|
34
|
+
| `## Todos` in another assignment's `assignment.md` (cross-assignment request) | `syntaur request <source> <target> "text"` |
|
|
35
|
+
| Question resolution | `PATCH /api/.../comments/:id/resolved` (dashboard) or toggle in dashboard UI |
|
|
36
|
+
|
|
37
|
+
These are bounded exceptions to the single-writer rule for assignment folders — the CLI serializes writes to avoid conflicts.
|
|
26
38
|
|
|
27
39
|
## Shared-Writable (any agent or human)
|
|
28
40
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Syntaur Protocol Summary
|
|
2
2
|
|
|
3
|
+
Protocol version: **2.0**
|
|
4
|
+
|
|
3
5
|
## Directory Structure
|
|
4
6
|
|
|
5
7
|
```
|
|
@@ -13,12 +15,12 @@
|
|
|
13
15
|
_index-plans.md # Derived (read-only)
|
|
14
16
|
_index-decisions.md # Derived (read-only)
|
|
15
17
|
_status.md # Derived (read-only)
|
|
16
|
-
claude.md # Human-authored: Claude-specific instructions (read-only)
|
|
17
|
-
agent.md # Human-authored: universal agent instructions (read-only)
|
|
18
18
|
assignments/
|
|
19
19
|
<assignment-slug>/
|
|
20
20
|
assignment.md # Agent-writable: source of truth for state (includes ## Todos checklist)
|
|
21
21
|
plan*.md # Agent-writable: versioned implementation plans (optional, 0 or more: plan.md, plan-v2.md, ...)
|
|
22
|
+
progress.md # Agent-writable, append-only: timestamped progress log
|
|
23
|
+
comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
|
|
22
24
|
scratchpad.md # Agent-writable: working notes
|
|
23
25
|
handoff.md # Agent-writable: append-only handoff log
|
|
24
26
|
decision-record.md # Agent-writable: append-only decision log
|
|
@@ -28,6 +30,15 @@
|
|
|
28
30
|
memories/
|
|
29
31
|
_index.md # Derived (read-only)
|
|
30
32
|
<memory-slug>.md # Shared-writable
|
|
33
|
+
assignments/
|
|
34
|
+
<assignment-id>/ # Standalone assignments — folder named by UUID, `project: null`
|
|
35
|
+
assignment.md # Same schema as project-nested, `slug` is display-only
|
|
36
|
+
plan*.md
|
|
37
|
+
progress.md
|
|
38
|
+
comments.md
|
|
39
|
+
scratchpad.md
|
|
40
|
+
handoff.md
|
|
41
|
+
decision-record.md
|
|
31
42
|
playbooks/
|
|
32
43
|
manifest.md # Derived: playbook listing (read-only)
|
|
33
44
|
<slug>.md # User-authored: behavioral rules for agents
|
|
@@ -62,10 +73,13 @@
|
|
|
62
73
|
## Key Rules
|
|
63
74
|
|
|
64
75
|
1. **Assignment frontmatter is the single source of truth** for all assignment state.
|
|
65
|
-
2. **
|
|
76
|
+
2. **Project-nested assignments** live at `projects/<slug>/assignments/<aslug>/` (folder name = slug). **Standalone assignments** live at `assignments/<uuid>/` (folder name = UUID, `project: null`, slug display-only).
|
|
66
77
|
3. **Derived files** (underscore-prefixed) are never edited manually.
|
|
67
78
|
4. **Slugs** are lowercase, hyphen-separated.
|
|
68
|
-
5. **Dependencies** are declared via `dependsOn` in assignment frontmatter.
|
|
79
|
+
5. **Dependencies** are declared via `dependsOn` in assignment frontmatter. Only valid within the same project — standalone assignments cannot declare `dependsOn`.
|
|
69
80
|
6. An assignment cannot transition from `pending` to `in_progress` while any dependency is not `completed`.
|
|
70
81
|
7. **Playbooks** in `~/.syntaur/playbooks/` define behavioral rules agents must follow. Read `manifest.md` for a summary, then read each referenced playbook before starting work.
|
|
71
|
-
8. **Todos** in the `## Todos` section of `assignment.md` are an informal markdown checklist. Items may be simple tasks or link to plan files. When a plan is superseded, mark the old todo: `- [x] ~~Execute [plan](./plan.md)~~ (superseded by plan-v2)` — never delete it.
|
|
82
|
+
8. **Todos** in the `## Todos` section of `assignment.md` are an informal markdown checklist. Items may be simple tasks or link to plan files. When a plan is superseded, mark the old todo: `- [x] ~~Execute [plan](./plan.md)~~ (superseded by plan-v2)` — never delete it. `## Todos` is also the landing spot for cross-assignment requests via `syntaur request`.
|
|
83
|
+
9. **Progress** is appended to `progress.md` as timestamped entries (newest first). Do not add a `## Progress` section to `assignment.md`.
|
|
84
|
+
10. **Comments** are appended to `comments.md` via `syntaur comment <slug> "body" [--type question|note|feedback] [--reply-to <id>]`. Never edit `comments.md` directly. Questions carry a `resolved` flag.
|
|
85
|
+
11. **Cross-assignment work** is requested via `syntaur request <source> <target> "text"` — appends to the target's `## Todos` annotated `(from: <source>)`.
|
|
@@ -51,6 +51,20 @@ If any acceptance criteria are unmet OR any todo is still `- [ ]` and not supers
|
|
|
51
51
|
|
|
52
52
|
If the user says no, stop.
|
|
53
53
|
|
|
54
|
+
## Step 2.5: Append a Final Progress Entry
|
|
55
|
+
|
|
56
|
+
Before writing the handoff, append a final entry to `<assignmentDir>/progress.md` summarizing what was completed. The entry goes at the **top** of the body (reverse-chron order) under a new `## <RFC 3339 timestamp>` heading:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
## <ISO 8601 timestamp>
|
|
60
|
+
|
|
61
|
+
<One paragraph summarizing the final state of work: what was implemented, what verifications passed, and any deliberate scope exclusions.>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Update `progress.md`'s frontmatter: bump `entryCount` and set `updated` to the current timestamp.
|
|
65
|
+
|
|
66
|
+
Do NOT add a `## Progress` section to `assignment.md` — progress entries live exclusively in `progress.md` as of protocol v2.0.
|
|
67
|
+
|
|
54
68
|
## Step 3: Write Handoff Entry
|
|
55
69
|
|
|
56
70
|
Read `<assignmentDir>/handoff.md` to see its current content and frontmatter.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: create-assignment
|
|
3
3
|
description: Create a new Syntaur assignment within a project (or as a one-off)
|
|
4
|
-
argument-hint: <title> --project <slug> [--priority <level>] [--depends-on <slugs>] [--one-off]
|
|
4
|
+
argument-hint: <title> --project <slug> [--priority <level>] [--depends-on <slugs>] [--type <type>] [--one-off]
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Bash
|
|
7
7
|
- Read
|
|
@@ -18,10 +18,11 @@ The user provided: $ARGUMENTS
|
|
|
18
18
|
Parse the arguments:
|
|
19
19
|
- First argument (required): the assignment title (e.g., `"Add login endpoint"`)
|
|
20
20
|
- `--project <slug>` (required unless `--one-off`): the project to add the assignment to
|
|
21
|
-
- `--one-off` (optional): create a standalone
|
|
21
|
+
- `--one-off` (optional): create a **standalone** assignment at `~/.syntaur/assignments/<uuid>/` with `project: null`. Folder is named by UUID; `slug` is display-only. `--depends-on` is not permitted for standalone assignments.
|
|
22
22
|
- `--slug` (optional): override the auto-generated assignment slug
|
|
23
23
|
- `--priority` (optional): `low`, `medium` (default), `high`, or `critical`
|
|
24
|
-
- `--
|
|
24
|
+
- `--type` (optional): classification such as `feature`, `bug`, `refactor`, `research`, `chore`. Defaults to `feature`. When `~/.syntaur/config.md` defines `types.definitions`, the CLI validates against that list.
|
|
25
|
+
- `--depends-on` (optional, project-nested only): comma-separated list of assignment slugs this depends on
|
|
25
26
|
- `--dir` (optional): override the default project directory
|
|
26
27
|
|
|
27
28
|
If no title was provided, ask the user what the assignment should be called.
|
|
@@ -35,13 +36,13 @@ If there is no active context and no project flag, ask the user which project to
|
|
|
35
36
|
Build the command from the parsed arguments. Use `dangerouslyDisableSandbox: true` since the CLI writes to `~/.syntaur/` which is outside the project sandbox.
|
|
36
37
|
|
|
37
38
|
```bash
|
|
38
|
-
syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--dir <path>]
|
|
39
|
+
syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--type <type>] [--dir <path>]
|
|
39
40
|
```
|
|
40
41
|
|
|
41
|
-
Or for one-off:
|
|
42
|
+
Or for one-off (standalone at `~/.syntaur/assignments/<uuid>/`):
|
|
42
43
|
|
|
43
44
|
```bash
|
|
44
|
-
syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]
|
|
45
|
+
syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--type <type>] [--dir <path>]
|
|
45
46
|
```
|
|
46
47
|
|
|
47
48
|
If the command fails (e.g., project not found, slug collision), report the error and suggest fixes.
|
|
@@ -57,9 +58,10 @@ cat ~/.syntaur/projects/<project-slug>/assignments/<assignment-slug>/assignment.
|
|
|
57
58
|
## Step 3: Guide Next Steps
|
|
58
59
|
|
|
59
60
|
Tell the user:
|
|
60
|
-
- The assignment was created with its slug, priority, and location
|
|
61
|
-
- List the files created
|
|
61
|
+
- The assignment was created with its slug, priority, type, and location. For standalone assignments, the location is `~/.syntaur/assignments/<uuid>/` — note the UUID (not slug) is the folder name.
|
|
62
|
+
- List the files created: `assignment.md`, `progress.md`, `comments.md`, `scratchpad.md`, `handoff.md`, `decision-record.md`. `plan.md` is NOT scaffolded — plan files are optional and created on demand by `/plan-assignment`.
|
|
63
|
+
- Remind the user: `progress.md` is where timestamped progress entries go (not `assignment.md`), and `comments.md` is written only via `syntaur comment <slug-or-uuid> "body" --type question|note|feedback`.
|
|
62
64
|
- Suggest they edit `assignment.md` to fill in the objective, acceptance criteria, context, and any initial todos. The `## Todos` section accepts simple tasks or markdown links to plan files.
|
|
63
65
|
- Or suggest running `/plan-assignment` after grabbing — it creates a plan file and auto-appends a linked todo to `## Todos`.
|
|
64
|
-
- If dependencies were set, note them
|
|
65
|
-
- Suggest running `/grab-assignment <project-slug> <assignment-slug>` to claim and start working on it
|
|
66
|
+
- If dependencies were set, note them. (Standalone assignments cannot declare dependencies.)
|
|
67
|
+
- Suggest running `/grab-assignment <project-slug> <assignment-slug>` (or `/grab-assignment --id <uuid>` for standalone) to claim and start working on it.
|