@open-code-review/agents 1.1.0 → 1.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.
- package/README.md +51 -42
- package/commands/post.md +3 -2
- package/commands/review.md +31 -21
- package/commands/show.md +3 -2
- package/package.json +1 -1
- package/skills/ocr/AGENTS.md +2 -0
- package/skills/ocr/SKILL.md +13 -7
- package/skills/ocr/references/context-discovery.md +2 -2
- package/skills/ocr/references/discourse.md +8 -8
- package/skills/ocr/references/session-files.md +215 -0
- package/skills/ocr/references/session-state.md +81 -39
- package/skills/ocr/references/synthesis.md +9 -9
- package/skills/ocr/references/workflow.md +79 -40
package/README.md
CHANGED
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
# @open-code-review/agents
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The skill definitions, reviewer personas, and workflow references that power Open Code Review.
|
|
4
4
|
|
|
5
5
|
## What This Package Contains
|
|
6
6
|
|
|
7
|
-
This package provides the AI-readable assets that power multi-agent code review:
|
|
8
|
-
|
|
9
7
|
```
|
|
10
8
|
agents/
|
|
11
|
-
├── skills/ocr/
|
|
12
|
-
│ ├── SKILL.md
|
|
9
|
+
├── skills/ocr/ # The OCR skill
|
|
10
|
+
│ ├── SKILL.md # Tech Lead orchestration logic
|
|
13
11
|
│ ├── references/
|
|
14
|
-
│ │ ├── workflow.md
|
|
15
|
-
│ │ ├── discourse.md
|
|
16
|
-
│ │ ├── synthesis.md
|
|
17
|
-
│ │ └── reviewers/
|
|
18
|
-
│ │ ├── principal.md
|
|
19
|
-
│ │ ├── quality.md
|
|
20
|
-
│ │ ├── security.md
|
|
21
|
-
│ │ └── testing.md
|
|
12
|
+
│ │ ├── workflow.md # 8-phase review workflow
|
|
13
|
+
│ │ ├── discourse.md # Multi-agent debate rules
|
|
14
|
+
│ │ ├── synthesis.md # Finding aggregation guide
|
|
15
|
+
│ │ └── reviewers/ # Persona definitions (customizable)
|
|
16
|
+
│ │ ├── principal.md # Architecture, design patterns
|
|
17
|
+
│ │ ├── quality.md # Code style, best practices
|
|
18
|
+
│ │ ├── security.md # Auth, data handling, vulnerabilities
|
|
19
|
+
│ │ └── testing.md # Coverage, edge cases
|
|
22
20
|
│ └── assets/
|
|
23
|
-
│ ├── config.yaml
|
|
21
|
+
│ ├── config.yaml # Default configuration
|
|
24
22
|
│ └── reviewer-template.md
|
|
25
|
-
├── commands/
|
|
23
|
+
├── commands/ # Slash command definitions
|
|
26
24
|
│ ├── review.md
|
|
27
25
|
│ ├── doctor.md
|
|
28
26
|
│ ├── history.md
|
|
29
27
|
│ ├── show.md
|
|
30
28
|
│ ├── reviewers.md
|
|
31
29
|
│ └── post.md
|
|
32
|
-
└── .claude-plugin/
|
|
30
|
+
└── .claude-plugin/ # Claude Code plugin manifest
|
|
33
31
|
└── plugin.json
|
|
34
32
|
```
|
|
35
33
|
|
|
@@ -37,7 +35,7 @@ agents/
|
|
|
37
35
|
|
|
38
36
|
### Via CLI (Recommended)
|
|
39
37
|
|
|
40
|
-
The CLI copies these assets to your project's `.ocr/` directory
|
|
38
|
+
The CLI copies these assets to your project's `.ocr/` directory:
|
|
41
39
|
|
|
42
40
|
```bash
|
|
43
41
|
npx @open-code-review/cli init
|
|
@@ -45,46 +43,57 @@ npx @open-code-review/cli init
|
|
|
45
43
|
|
|
46
44
|
### Via Claude Code Plugin
|
|
47
45
|
|
|
48
|
-
For Claude Code users who prefer plugin-based installation:
|
|
49
|
-
|
|
50
46
|
```bash
|
|
51
|
-
# Add the marketplace
|
|
52
47
|
/plugin marketplace add spencermarx/open-code-review
|
|
53
|
-
|
|
54
|
-
# Install the plugin
|
|
55
|
-
/plugin install open-code-review@spencermarx-open-code-review
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Local Development
|
|
59
|
-
|
|
60
|
-
Test the plugin locally with Claude Code:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
claude --plugin-dir ./packages/agents
|
|
48
|
+
/plugin install ocr@aclarify
|
|
64
49
|
```
|
|
65
50
|
|
|
66
51
|
## Skill Architecture
|
|
67
52
|
|
|
68
|
-
The `
|
|
53
|
+
The `SKILL.md` file defines the **Tech Lead** role—the orchestrator that:
|
|
69
54
|
|
|
70
55
|
1. Discovers project context (config, OpenSpec, reference files)
|
|
71
56
|
2. Analyzes changes and identifies risk areas
|
|
72
|
-
3. Selects and spawns reviewer personas
|
|
57
|
+
3. Selects and spawns reviewer personas based on your team configuration
|
|
73
58
|
4. Facilitates discourse between reviewers
|
|
74
59
|
5. Synthesizes findings into a unified review
|
|
75
60
|
|
|
76
|
-
Each reviewer in `references/reviewers/` is a specialized persona
|
|
61
|
+
Each reviewer in `references/reviewers/` is a specialized persona. You can customize the built-in reviewers or add your own.
|
|
62
|
+
|
|
63
|
+
## Session Structure
|
|
64
|
+
|
|
65
|
+
OCR uses a **round-first architecture** for session storage:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
.ocr/sessions/{YYYY-MM-DD}-{branch}/
|
|
69
|
+
├── state.json # Workflow state (current_round, phase)
|
|
70
|
+
├── discovered-standards.md # Project context (shared across rounds)
|
|
71
|
+
├── context.md # Change analysis (shared)
|
|
72
|
+
└── rounds/
|
|
73
|
+
├── round-1/
|
|
74
|
+
│ ├── reviews/ # Individual reviewer outputs
|
|
75
|
+
│ ├── discourse.md # Cross-reviewer discussion
|
|
76
|
+
│ └── final.md # Synthesized review
|
|
77
|
+
└── round-2/ # Created on re-review
|
|
78
|
+
└── ...
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Multi-round reviews**: Running `/ocr-review` again on an existing session creates a new round (`round-2/`, `round-3/`, etc.) if the previous round is complete. This enables iterative "review → fix → re-review" workflows while preserving history.
|
|
82
|
+
|
|
83
|
+
See `references/session-files.md` for the complete file manifest.
|
|
77
84
|
|
|
78
85
|
## Commands
|
|
79
86
|
|
|
80
|
-
| File |
|
|
81
|
-
|
|
82
|
-
| `review.md` | `/ocr-review` | `/
|
|
83
|
-
| `doctor.md` | `/ocr-doctor` | `/
|
|
84
|
-
| `reviewers.md` | `/ocr-reviewers` | `/
|
|
85
|
-
| `history.md` | `/ocr-history` | `/
|
|
86
|
-
| `show.md` | `/ocr-show` | `/
|
|
87
|
-
| `post.md` | `/ocr-post` | `/
|
|
87
|
+
| File | Windsurf | Claude Code / Cursor |
|
|
88
|
+
|------|----------|----------------------|
|
|
89
|
+
| `review.md` | `/ocr-review` | `/ocr:review` |
|
|
90
|
+
| `doctor.md` | `/ocr-doctor` | `/ocr:doctor` |
|
|
91
|
+
| `reviewers.md` | `/ocr-reviewers` | `/ocr:reviewers` |
|
|
92
|
+
| `history.md` | `/ocr-history` | `/ocr:history` |
|
|
93
|
+
| `show.md` | `/ocr-show` | `/ocr:show` |
|
|
94
|
+
| `post.md` | `/ocr-post` | `/ocr:post` |
|
|
95
|
+
|
|
96
|
+
**Why two formats?** Windsurf requires flat command files with a prefix (`/ocr-command`), while Claude Code and Cursor support subdirectories (`/ocr:command`). Both invoke the same underlying functionality.
|
|
88
97
|
|
|
89
98
|
## License
|
|
90
99
|
|
package/commands/post.md
CHANGED
|
@@ -21,8 +21,9 @@ tags: [ocr, github, pr]
|
|
|
21
21
|
|
|
22
22
|
1. Verify `gh` is available and authenticated
|
|
23
23
|
2. Find the PR for current branch
|
|
24
|
-
3.
|
|
25
|
-
4.
|
|
24
|
+
3. Determine current round from `state.json` → `current_round` (or enumerate `rounds/` directory)
|
|
25
|
+
4. Read the session's `rounds/round-{current_round}/final.md`
|
|
26
|
+
5. Post as PR comment via `gh pr comment`
|
|
26
27
|
|
|
27
28
|
**Reference**
|
|
28
29
|
- Run `/ocr-doctor` to check GitHub CLI status
|
package/commands/review.md
CHANGED
|
@@ -45,15 +45,18 @@ ls -la .ocr/sessions/$(date +%Y-%m-%d)-* 2>/dev/null
|
|
|
45
45
|
|
|
46
46
|
### Step 2: If session exists, verify state
|
|
47
47
|
|
|
48
|
-
Read `state.json` AND verify actual files match:
|
|
48
|
+
Read `state.json` AND verify actual files match (see `references/session-files.md` for authoritative names):
|
|
49
49
|
|
|
50
|
-
| Phase |
|
|
51
|
-
|
|
52
|
-
| context |
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
50
|
+
| Phase | Verify file exists |
|
|
51
|
+
|-------|-------------------|
|
|
52
|
+
| context | `.ocr/sessions/{id}/discovered-standards.md` |
|
|
53
|
+
| change-context | `.ocr/sessions/{id}/context.md` |
|
|
54
|
+
| analysis | `.ocr/sessions/{id}/context.md` (with Tech Lead guidance section) |
|
|
55
|
+
| reviews | At least 2 files in `.ocr/sessions/{id}/rounds/round-{n}/reviews/` |
|
|
56
|
+
| discourse | `.ocr/sessions/{id}/rounds/round-{n}/discourse.md` |
|
|
57
|
+
| synthesis | `.ocr/sessions/{id}/rounds/round-{n}/final.md` |
|
|
58
|
+
|
|
59
|
+
> **Note**: Phase completion is derived from filesystem (file existence), not from `state.json`. The `current_phase` field indicates which phase is active.
|
|
57
60
|
|
|
58
61
|
### Step 3: Determine action
|
|
59
62
|
|
|
@@ -67,27 +70,34 @@ Read `state.json` AND verify actual files match:
|
|
|
67
70
|
|
|
68
71
|
## ⚠️ CRITICAL: Required Artifacts (Must Create In Order)
|
|
69
72
|
|
|
73
|
+
> **See `references/session-files.md` for the authoritative file manifest.**
|
|
74
|
+
|
|
70
75
|
You MUST create these files sequentially. **Do NOT skip to `final.md`.**
|
|
71
76
|
|
|
72
77
|
```
|
|
73
|
-
.ocr/sessions/{
|
|
74
|
-
├──
|
|
78
|
+
.ocr/sessions/{YYYY-MM-DD}-{branch}/
|
|
79
|
+
├── state.json # Phase 1: session state (REQUIRED)
|
|
75
80
|
├── discovered-standards.md # Phase 1: merged project standards
|
|
76
|
-
├──
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
├──
|
|
82
|
-
|
|
81
|
+
├── requirements.md # Phase 1: user requirements (if provided)
|
|
82
|
+
├── context.md # Phase 2+3: change summary + Tech Lead guidance
|
|
83
|
+
└── rounds/
|
|
84
|
+
└── round-1/ # Review round (increments on re-review)
|
|
85
|
+
├── reviews/
|
|
86
|
+
│ ├── principal-1.md # Phase 4: reviewer output
|
|
87
|
+
│ ├── principal-2.md # Phase 4: reviewer output
|
|
88
|
+
│ ├── quality-1.md # Phase 4: reviewer output
|
|
89
|
+
│ └── quality-2.md # Phase 4: reviewer output
|
|
90
|
+
├── discourse.md # Phase 6: reviewer cross-discussion
|
|
91
|
+
└── final.md # Phase 7: ONLY after all above exist
|
|
83
92
|
```
|
|
84
93
|
|
|
85
94
|
### Checkpoint Rules
|
|
86
95
|
|
|
87
|
-
1. **Before Phase
|
|
88
|
-
2. **Before Phase
|
|
89
|
-
3. **Before Phase
|
|
90
|
-
4. **
|
|
96
|
+
1. **Before Phase 2** (Change Analysis): `discovered-standards.md` MUST exist
|
|
97
|
+
2. **Before Phase 4** (Spawn Reviewers): `context.md` MUST exist
|
|
98
|
+
3. **Before Phase 6** (Discourse): At least 2 files in `rounds/round-{n}/reviews/` MUST exist
|
|
99
|
+
4. **Before Phase 7** (Synthesis): `rounds/round-{n}/discourse.md` MUST exist
|
|
100
|
+
5. **NEVER** write `rounds/round-{n}/final.md` without completing Phases 1-6
|
|
91
101
|
|
|
92
102
|
### Why This Matters
|
|
93
103
|
|
package/commands/show.md
CHANGED
|
@@ -16,8 +16,9 @@ tags: [ocr, history, sessions]
|
|
|
16
16
|
**Steps**
|
|
17
17
|
|
|
18
18
|
1. If no session specified, find most recent in `.ocr/sessions/`
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
19
|
+
2. Determine current round from `state.json` → `current_round` (or enumerate `rounds/` directory)
|
|
20
|
+
3. Read and display `rounds/round-{current_round}/final.md` (synthesized review)
|
|
21
|
+
4. Optionally show individual reviewer files from `rounds/round-{n}/reviews/` if requested
|
|
21
22
|
|
|
22
23
|
**Reference**
|
|
23
24
|
- Use `/ocr-history` to list all sessions
|
package/package.json
CHANGED
package/skills/ocr/AGENTS.md
CHANGED
|
@@ -36,6 +36,8 @@ When asked to perform a code review:
|
|
|
36
36
|
|
|
37
37
|
- `SKILL.md` - Core skill definition and Tech Lead role
|
|
38
38
|
- `references/workflow.md` - Complete 8-phase workflow
|
|
39
|
+
- `references/session-files.md` - **Authoritative session file manifest**
|
|
40
|
+
- `references/session-state.md` - State management and progress tracking
|
|
39
41
|
- `references/synthesis.md` - How to synthesize findings
|
|
40
42
|
- `references/discourse.md` - Multi-agent discourse rules
|
|
41
43
|
- `references/reviewers/` - Reviewer persona definitions
|
package/skills/ocr/SKILL.md
CHANGED
|
@@ -135,13 +135,19 @@ For complete workflow details, see `references/workflow.md`.
|
|
|
135
135
|
|
|
136
136
|
## Session Storage
|
|
137
137
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
138
|
+
> **See `references/session-files.md` for the authoritative file manifest.**
|
|
139
|
+
|
|
140
|
+
All review artifacts are stored in `.ocr/sessions/{YYYY-MM-DD}-{branch}/`:
|
|
141
|
+
|
|
142
|
+
| File | Description |
|
|
143
|
+
|------|-------------|
|
|
144
|
+
| `state.json` | Session state for progress tracking |
|
|
145
|
+
| `discovered-standards.md` | Merged project context (shared) |
|
|
146
|
+
| `requirements.md` | User-provided requirements (shared, if any) |
|
|
147
|
+
| `context.md` | Change summary and Tech Lead guidance (shared) |
|
|
148
|
+
| `rounds/round-{n}/reviews/{type}-{n}.md` | Individual reviewer outputs (per-round) |
|
|
149
|
+
| `rounds/round-{n}/discourse.md` | Cross-reviewer discussion (per-round) |
|
|
150
|
+
| `rounds/round-{n}/final.md` | Synthesized final review (per-round) |
|
|
145
151
|
|
|
146
152
|
## Commands
|
|
147
153
|
|
|
@@ -145,10 +145,10 @@ done
|
|
|
145
145
|
|
|
146
146
|
## Output Format
|
|
147
147
|
|
|
148
|
-
Save discovered context to session directory:
|
|
148
|
+
Save discovered context to session directory (see `references/session-files.md` for authoritative file names):
|
|
149
149
|
|
|
150
150
|
```
|
|
151
|
-
.ocr/sessions/{
|
|
151
|
+
.ocr/sessions/{YYYY-MM-DD}-{branch}/discovered-standards.md
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
### Example Output
|
|
@@ -29,14 +29,14 @@ Reviewers use these fixed response types (not user-configurable):
|
|
|
29
29
|
|
|
30
30
|
### Step 1: Compile Individual Reviews
|
|
31
31
|
|
|
32
|
-
Gather all individual review outputs:
|
|
32
|
+
Gather all individual review outputs from the current round (see `references/session-files.md` for naming convention):
|
|
33
33
|
```
|
|
34
|
-
reviews/principal-1.md
|
|
35
|
-
reviews/principal-2.md
|
|
36
|
-
reviews/quality-1.md
|
|
37
|
-
reviews/quality-2.md
|
|
38
|
-
reviews/security-1.md (if
|
|
39
|
-
reviews/testing-1.md (if
|
|
34
|
+
rounds/round-{n}/reviews/principal-1.md
|
|
35
|
+
rounds/round-{n}/reviews/principal-2.md
|
|
36
|
+
rounds/round-{n}/reviews/quality-1.md
|
|
37
|
+
rounds/round-{n}/reviews/quality-2.md
|
|
38
|
+
rounds/round-{n}/reviews/security-1.md (if assigned)
|
|
39
|
+
rounds/round-{n}/reviews/testing-1.md (if assigned)
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
### Step 2: Present All Findings
|
|
@@ -110,7 +110,7 @@ SURFACE
|
|
|
110
110
|
|
|
111
111
|
### Step 5: Compile Discourse Results
|
|
112
112
|
|
|
113
|
-
Save to `discourse.md`:
|
|
113
|
+
Save to `rounds/round-{n}/discourse.md`:
|
|
114
114
|
|
|
115
115
|
```markdown
|
|
116
116
|
# Discourse Results
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Session File Manifest
|
|
2
|
+
|
|
3
|
+
> **This is the authoritative reference for session file naming.** All other documentation should reference this file for file names and structure.
|
|
4
|
+
|
|
5
|
+
## Session Directory Structure
|
|
6
|
+
|
|
7
|
+
Every OCR session creates files in `.ocr/sessions/{session-id}/`:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
.ocr/sessions/{YYYY-MM-DD}-{branch}/
|
|
11
|
+
├── state.json # Session state (REQUIRED)
|
|
12
|
+
├── discovered-standards.md # Merged project context (shared across rounds)
|
|
13
|
+
├── requirements.md # User-provided requirements (if any, shared)
|
|
14
|
+
├── context.md # Phase 2+3: Change summary + Tech Lead guidance (shared)
|
|
15
|
+
└── rounds/ # All round-specific artifacts
|
|
16
|
+
├── round-1/ # First review round
|
|
17
|
+
│ ├── reviews/ # Individual reviewer outputs
|
|
18
|
+
│ │ ├── principal-1.md
|
|
19
|
+
│ │ ├── principal-2.md
|
|
20
|
+
│ │ ├── quality-1.md
|
|
21
|
+
│ │ ├── quality-2.md
|
|
22
|
+
│ │ ├── security-1.md # (if security reviewer assigned)
|
|
23
|
+
│ │ ├── testing-1.md # (if testing reviewer assigned)
|
|
24
|
+
│ │ └── {type}-{n}.md # (additional assigned custom reviewers)
|
|
25
|
+
│ ├── discourse.md # Cross-reviewer discussion for round 1
|
|
26
|
+
│ └── final.md # Synthesized final review for round 1
|
|
27
|
+
└── round-2/ # Subsequent rounds (created on re-review)
|
|
28
|
+
├── reviews/
|
|
29
|
+
│ └── ... # Same structure as round-1
|
|
30
|
+
├── discourse.md
|
|
31
|
+
└── final.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Review Rounds
|
|
35
|
+
|
|
36
|
+
OCR uses a **round-first architecture** where all round-specific artifacts live under `rounds/round-{n}/`. This makes multi-round reviews a first-class concept.
|
|
37
|
+
|
|
38
|
+
**Round behavior**:
|
|
39
|
+
- First `/ocr-review` creates `rounds/round-1/` with `reviews/`, `discourse.md`, `final.md`
|
|
40
|
+
- Subsequent `/ocr-review` on same day/branch creates `rounds/round-{n+1}/`
|
|
41
|
+
- Previous rounds are preserved (never overwritten)
|
|
42
|
+
- Each round has its own `discourse.md` and `final.md`
|
|
43
|
+
- `state.json` tracks `current_round`; round metadata derived from filesystem
|
|
44
|
+
|
|
45
|
+
**Shared vs per-round artifacts**:
|
|
46
|
+
| Shared (session root) | Per-round (`rounds/round-{n}/`) |
|
|
47
|
+
|----------------------|--------------------------------|
|
|
48
|
+
| `state.json` | `reviews/*.md` |
|
|
49
|
+
| `discovered-standards.md` | `discourse.md` |
|
|
50
|
+
| `requirements.md` | `final.md` |
|
|
51
|
+
| `context.md` | |
|
|
52
|
+
|
|
53
|
+
**When to use multiple rounds**:
|
|
54
|
+
- Author addresses feedback and requests re-review
|
|
55
|
+
- Scope changes mid-review
|
|
56
|
+
- Different reviewer team composition needed
|
|
57
|
+
|
|
58
|
+
## File Specifications
|
|
59
|
+
|
|
60
|
+
### Required Files
|
|
61
|
+
|
|
62
|
+
| File | Phase | Description | Used By |
|
|
63
|
+
|------|-------|-------------|---------|
|
|
64
|
+
| `state.json` | 1 | Session state for progress tracking | CLI, resume logic |
|
|
65
|
+
| `discovered-standards.md` | 1 | Merged project context from config + references | All reviewers |
|
|
66
|
+
| `context.md` | 2 | Change summary, diff analysis, Tech Lead guidance | All reviewers |
|
|
67
|
+
| `rounds/round-{n}/reviews/{type}-{n}.md` | 4 | Individual reviewer outputs | Discourse, Synthesis |
|
|
68
|
+
| `rounds/round-{n}/discourse.md` | 6 | Cross-reviewer discussion results | Synthesis |
|
|
69
|
+
| `rounds/round-{n}/final.md` | 7 | Synthesized final review | Show, Post commands |
|
|
70
|
+
|
|
71
|
+
### Optional Files
|
|
72
|
+
|
|
73
|
+
| File | When Created | Description |
|
|
74
|
+
|------|--------------|-------------|
|
|
75
|
+
| `requirements.md` | Phase 1 | User-provided requirements, specs, or acceptance criteria |
|
|
76
|
+
|
|
77
|
+
## Reviewer File Naming
|
|
78
|
+
|
|
79
|
+
**Pattern**: `{type}-{n}.md`
|
|
80
|
+
|
|
81
|
+
- `{type}`: One of `principal`, `quality`, `security`, `testing`, or custom reviewer name
|
|
82
|
+
- `{n}`: Sequential number starting at 1
|
|
83
|
+
|
|
84
|
+
**Examples** (for round 1):
|
|
85
|
+
```
|
|
86
|
+
rounds/round-1/reviews/principal-1.md
|
|
87
|
+
rounds/round-1/reviews/principal-2.md
|
|
88
|
+
rounds/round-1/reviews/quality-1.md
|
|
89
|
+
rounds/round-1/reviews/quality-2.md
|
|
90
|
+
rounds/round-1/reviews/security-1.md
|
|
91
|
+
rounds/round-1/reviews/testing-1.md
|
|
92
|
+
rounds/round-1/reviews/performance-1.md # Custom reviewer
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Rules**:
|
|
96
|
+
- Always lowercase
|
|
97
|
+
- Use hyphens, not underscores
|
|
98
|
+
- Instance numbers are sequential per reviewer type
|
|
99
|
+
- Custom reviewers follow the same `{type}-{n}.md` pattern
|
|
100
|
+
|
|
101
|
+
## Phase-to-File Mapping
|
|
102
|
+
|
|
103
|
+
| Phase | Phase Name | Files to Create/Update |
|
|
104
|
+
|-------|------------|------------------------|
|
|
105
|
+
| 1 | Context Discovery | `state.json`, `discovered-standards.md`, `requirements.md` (if provided) |
|
|
106
|
+
| 2 | Change Analysis | `context.md`, update `state.json` |
|
|
107
|
+
| 3 | Tech Lead Analysis | Update `context.md` with guidance, update `state.json` |
|
|
108
|
+
| 4 | Parallel Reviews | `rounds/round-{n}/reviews/{type}-{n}.md` for each reviewer, update `state.json` |
|
|
109
|
+
| 5 | Aggregation | (Inline analysis), update `state.json` |
|
|
110
|
+
| 6 | Discourse | `rounds/round-{n}/discourse.md`, update `state.json` |
|
|
111
|
+
| 7 | Synthesis | `rounds/round-{n}/final.md`, update `state.json` |
|
|
112
|
+
| 8 | Presentation | Set `state.json` status to `"closed"` |
|
|
113
|
+
|
|
114
|
+
## State Transitions and File Validation
|
|
115
|
+
|
|
116
|
+
When updating `state.json`, verify the corresponding file exists:
|
|
117
|
+
|
|
118
|
+
| Phase | Verify file exists |
|
|
119
|
+
|---------------------------|-------------------|
|
|
120
|
+
| `"context"` | `discovered-standards.md` |
|
|
121
|
+
| `"change-context"` | `context.md` |
|
|
122
|
+
| `"analysis"` | `context.md` (with Tech Lead guidance) |
|
|
123
|
+
| `"reviews"` | At least 2 files in `rounds/round-{current_round}/reviews/` |
|
|
124
|
+
| `"discourse"` | `rounds/round-{current_round}/discourse.md` |
|
|
125
|
+
| `"synthesis"` | `rounds/round-{current_round}/final.md` |
|
|
126
|
+
|
|
127
|
+
## Session ID Format
|
|
128
|
+
|
|
129
|
+
**Pattern**: `{YYYY-MM-DD}-{branch-name}`
|
|
130
|
+
|
|
131
|
+
> **Shorthand**: In documentation, `{id}` and `{session-id}` are aliases for the full `{YYYY-MM-DD}-{branch-name}` format.
|
|
132
|
+
|
|
133
|
+
- Date in ISO format (YYYY-MM-DD)
|
|
134
|
+
- Branch name with `/` replaced by `-`
|
|
135
|
+
|
|
136
|
+
**Examples**:
|
|
137
|
+
```
|
|
138
|
+
2026-01-27-main
|
|
139
|
+
2026-01-27-feat-add-auth
|
|
140
|
+
2026-01-27-fix-bug-123
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Generation**:
|
|
144
|
+
```bash
|
|
145
|
+
SESSION_ID="$(date +%Y-%m-%d)-$(git branch --show-current | tr '/' '-')"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## File Content Requirements
|
|
149
|
+
|
|
150
|
+
### state.json (Minimal Schema)
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"session_id": "{session-id}",
|
|
155
|
+
"status": "active",
|
|
156
|
+
"current_phase": "{phase-name}",
|
|
157
|
+
"phase_number": 4,
|
|
158
|
+
"current_round": 1,
|
|
159
|
+
"started_at": "{ISO-8601-timestamp}",
|
|
160
|
+
"round_started_at": "{ISO-8601-timestamp}",
|
|
161
|
+
"updated_at": "{ISO-8601-timestamp}"
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
> **Note**: `round_started_at` is set when starting a new round (> 1) for accurate per-round timing display.
|
|
166
|
+
|
|
167
|
+
**Derived from filesystem** (not stored in state.json):
|
|
168
|
+
- Round count: enumerate `rounds/round-*/` directories
|
|
169
|
+
- Round completion: check for `final.md` in round directory
|
|
170
|
+
- Reviewers in round: list files in `rounds/round-{n}/reviews/`
|
|
171
|
+
- Discourse complete: check for `discourse.md` in round directory
|
|
172
|
+
|
|
173
|
+
See `references/session-state.md` for complete state management details.
|
|
174
|
+
|
|
175
|
+
### Reviewer Files
|
|
176
|
+
|
|
177
|
+
Each `rounds/round-{n}/reviews/{type}-{n}.md` must include:
|
|
178
|
+
- Summary section
|
|
179
|
+
- Findings with severity, location, and suggestions
|
|
180
|
+
- What's Working Well section
|
|
181
|
+
- Questions for Other Reviewers section
|
|
182
|
+
|
|
183
|
+
See `references/reviewer-task.md` for complete output format.
|
|
184
|
+
|
|
185
|
+
### final.md
|
|
186
|
+
|
|
187
|
+
Must include:
|
|
188
|
+
- Verdict (APPROVE / REQUEST CHANGES / NEEDS DISCUSSION)
|
|
189
|
+
- Blockers section (if any)
|
|
190
|
+
- Suggestions section
|
|
191
|
+
- Requirements Assessment (if requirements provided)
|
|
192
|
+
- Clarifying Questions section
|
|
193
|
+
- Individual Reviews table with file references
|
|
194
|
+
|
|
195
|
+
See `references/synthesis.md` for complete template.
|
|
196
|
+
|
|
197
|
+
## CLI Dependencies
|
|
198
|
+
|
|
199
|
+
The `ocr progress` CLI depends on these exact file names:
|
|
200
|
+
|
|
201
|
+
| CLI Feature | Files Read |
|
|
202
|
+
|-------------|-----------|
|
|
203
|
+
| Session detection | `state.json` |
|
|
204
|
+
| Phase tracking | `state.json` → `current_phase` |
|
|
205
|
+
| Current round | `state.json` → `current_round` (reconciled with filesystem) |
|
|
206
|
+
| Reviewer progress | `rounds/round-{n}/reviews/*.md` file existence |
|
|
207
|
+
| Round completion | `rounds/round-{n}/final.md` existence |
|
|
208
|
+
| Elapsed time | `state.json` → `started_at` |
|
|
209
|
+
|
|
210
|
+
**Filesystem as truth**: The CLI derives round metadata from the filesystem, using `state.json` as a hint. If state.json is missing or inconsistent, the CLI reconstructs state by:
|
|
211
|
+
1. Enumerating `rounds/round-*/` to count rounds
|
|
212
|
+
2. Checking `final.md` presence to determine completion
|
|
213
|
+
3. Listing `reviews/*.md` to identify reviewers
|
|
214
|
+
|
|
215
|
+
**IMPORTANT**: Non-standard file names will break progress tracking.
|
|
@@ -18,25 +18,36 @@ This means:
|
|
|
18
18
|
- Running `npx @open-code-review/cli progress` from any project picks up the session state
|
|
19
19
|
- No configuration needed — the CLI always looks in `.ocr/sessions/`
|
|
20
20
|
|
|
21
|
-
## State File Format
|
|
21
|
+
## State File Format (Minimal Schema)
|
|
22
22
|
|
|
23
23
|
```json
|
|
24
24
|
{
|
|
25
|
-
"session_id": "
|
|
26
|
-
"branch": "main",
|
|
25
|
+
"session_id": "{session-id}",
|
|
27
26
|
"status": "active",
|
|
28
|
-
"started_at": "2026-01-26T17:00:00Z",
|
|
29
27
|
"current_phase": "reviews",
|
|
30
28
|
"phase_number": 4,
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
},
|
|
36
|
-
"updated_at": "2026-01-26T17:05:00Z"
|
|
29
|
+
"current_round": 1,
|
|
30
|
+
"started_at": "{ISO-8601-TIMESTAMP}",
|
|
31
|
+
"round_started_at": "{ISO-8601-TIMESTAMP}",
|
|
32
|
+
"updated_at": "{ISO-8601-TIMESTAMP}"
|
|
37
33
|
}
|
|
38
34
|
```
|
|
39
35
|
|
|
36
|
+
**Minimal by design**: Round metadata is derived from the filesystem, not stored in state.json.
|
|
37
|
+
|
|
38
|
+
**Field descriptions**:
|
|
39
|
+
- `started_at`: When the session was created (first `/ocr-review`)
|
|
40
|
+
- `round_started_at`: When the current round began (updated when starting round > 1)
|
|
41
|
+
- `updated_at`: Last modification time (updated at every phase transition)
|
|
42
|
+
|
|
43
|
+
**Derived from filesystem** (not stored):
|
|
44
|
+
- Round count: enumerate `rounds/round-*/` directories
|
|
45
|
+
- Round completion: check for `final.md` in round directory
|
|
46
|
+
- Reviewers in round: list files in `rounds/round-{n}/reviews/`
|
|
47
|
+
- Discourse complete: check for `discourse.md` in round directory
|
|
48
|
+
|
|
49
|
+
**IMPORTANT**: Timestamps MUST be generated dynamically using the current time in ISO 8601 format (e.g., `new Date().toISOString()` → `"2026-01-27T09:45:00.000Z"`). Do NOT copy example timestamps.
|
|
50
|
+
|
|
40
51
|
## Session Status
|
|
41
52
|
|
|
42
53
|
The `status` field controls session visibility:
|
|
@@ -55,54 +66,78 @@ The `ocr progress` command only auto-detects sessions with `status: "active"`. C
|
|
|
55
66
|
|
|
56
67
|
## Phase Transitions
|
|
57
68
|
|
|
69
|
+
> **See `references/session-files.md` for the authoritative file manifest.**
|
|
70
|
+
|
|
58
71
|
The Tech Lead MUST update `state.json` at each phase boundary:
|
|
59
72
|
|
|
60
|
-
| Phase | When to Update |
|
|
61
|
-
|
|
62
|
-
| context | After writing `discovered-standards.md` |
|
|
63
|
-
|
|
|
64
|
-
| analysis | After
|
|
65
|
-
| reviews | After
|
|
66
|
-
| discourse | After
|
|
67
|
-
| synthesis | After
|
|
68
|
-
| complete | After presenting to user
|
|
73
|
+
| Phase | When to Update | File Created |
|
|
74
|
+
|-------|---------------|--------------|
|
|
75
|
+
| context | After writing project standards | `discovered-standards.md` |
|
|
76
|
+
| change-context | After writing change summary | `context.md`, `requirements.md` (if provided) |
|
|
77
|
+
| analysis | After adding Tech Lead guidance | Update `context.md` |
|
|
78
|
+
| reviews | After each reviewer completes | `rounds/round-{n}/reviews/{type}-{n}.md` |
|
|
79
|
+
| discourse | After cross-reviewer discussion | `rounds/round-{n}/discourse.md` |
|
|
80
|
+
| synthesis | After final review | `rounds/round-{n}/final.md` |
|
|
81
|
+
| complete | After presenting to user | Set `status: "closed"` |
|
|
69
82
|
|
|
70
83
|
## Writing State
|
|
71
84
|
|
|
72
|
-
|
|
85
|
+
**CRITICAL**: Always generate timestamps dynamically using the current UTC time in ISO 8601 format.
|
|
86
|
+
|
|
87
|
+
### Generating Timestamps
|
|
73
88
|
|
|
74
89
|
```bash
|
|
75
|
-
#
|
|
76
|
-
|
|
90
|
+
# macOS/Linux
|
|
91
|
+
date -u +"%Y-%m-%dT%H:%M:%SZ"
|
|
92
|
+
# Output: 2026-01-27T09:45:00Z
|
|
93
|
+
|
|
94
|
+
# Windows (PowerShell)
|
|
95
|
+
Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ" -AsUTC
|
|
96
|
+
|
|
97
|
+
# Node.js / JavaScript
|
|
98
|
+
new Date().toISOString()
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
When creating a new session (Phase 1 start):
|
|
102
|
+
|
|
103
|
+
```json
|
|
77
104
|
{
|
|
78
|
-
"session_id": "{id}",
|
|
105
|
+
"session_id": "{session-id}",
|
|
106
|
+
"status": "active",
|
|
107
|
+
"current_phase": "context",
|
|
108
|
+
"phase_number": 1,
|
|
109
|
+
"current_round": 1,
|
|
110
|
+
"started_at": "{CURRENT_ISO_TIMESTAMP}",
|
|
111
|
+
"updated_at": "{CURRENT_ISO_TIMESTAMP}"
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
When transitioning phases (preserve `started_at`, update `updated_at`):
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"session_id": "{session-id}",
|
|
79
120
|
"status": "active",
|
|
80
121
|
"current_phase": "reviews",
|
|
81
122
|
"phase_number": 4,
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
"complete": []
|
|
86
|
-
},
|
|
87
|
-
"updated_at": "2026-01-26T17:05:00Z"
|
|
123
|
+
"current_round": 1,
|
|
124
|
+
"started_at": "{PRESERVE_ORIGINAL}",
|
|
125
|
+
"updated_at": "{CURRENT_ISO_TIMESTAMP}"
|
|
88
126
|
}
|
|
89
|
-
EOF
|
|
90
127
|
```
|
|
91
128
|
|
|
92
129
|
When closing a session (Phase 8 complete):
|
|
93
130
|
|
|
94
|
-
```
|
|
95
|
-
# Update state.json to close the session
|
|
96
|
-
cat > .ocr/sessions/{id}/state.json << 'EOF'
|
|
131
|
+
```json
|
|
97
132
|
{
|
|
98
|
-
"session_id": "{id}",
|
|
133
|
+
"session_id": "{session-id}",
|
|
99
134
|
"status": "closed",
|
|
100
135
|
"current_phase": "complete",
|
|
101
136
|
"phase_number": 8,
|
|
102
|
-
"
|
|
103
|
-
"
|
|
137
|
+
"current_round": 1,
|
|
138
|
+
"started_at": "{PRESERVE_ORIGINAL}",
|
|
139
|
+
"updated_at": "{CURRENT_ISO_TIMESTAMP}"
|
|
104
140
|
}
|
|
105
|
-
EOF
|
|
106
141
|
```
|
|
107
142
|
|
|
108
143
|
## Benefits
|
|
@@ -115,6 +150,13 @@ EOF
|
|
|
115
150
|
|
|
116
151
|
## Important
|
|
117
152
|
|
|
118
|
-
The `state.json` file is **
|
|
153
|
+
The `state.json` file is the **primary** source for workflow progress. However, with the round-first architecture:
|
|
154
|
+
|
|
155
|
+
- **Filesystem is truth for round data**: Round count, completion, and reviewers are derived from `rounds/` directory structure
|
|
156
|
+
- **state.json is truth for workflow state**: `current_phase`, `phase_number`, `status`, timestamps
|
|
157
|
+
- **Reconciliation**: If state.json and filesystem disagree, the CLI reconciles by trusting the filesystem for round data
|
|
119
158
|
|
|
120
|
-
|
|
159
|
+
If `state.json` is missing entirely, the CLI will show "Waiting for session..." until the orchestrating agent creates `state.json`. Future versions may implement filesystem reconstruction to derive:
|
|
160
|
+
1. Round count from `rounds/round-*/` directories
|
|
161
|
+
2. Round completion from `final.md` presence
|
|
162
|
+
3. Approximate phase from file existence
|
|
@@ -28,11 +28,11 @@ This synthesis process is designed to mirror how high-performing engineering tea
|
|
|
28
28
|
|
|
29
29
|
### Step 1: Gather All Feedback
|
|
30
30
|
|
|
31
|
-
Collect without filtering:
|
|
32
|
-
- All individual reviews (`reviews
|
|
33
|
-
- Discourse results (`discourse.md`) if available
|
|
31
|
+
Collect without filtering (see `references/session-files.md` for file names):
|
|
32
|
+
- All individual reviews from current round (`rounds/round-{n}/reviews/{type}-{n}.md`)
|
|
33
|
+
- Discourse results (`rounds/round-{n}/discourse.md`) if available
|
|
34
34
|
- Requirements context (`requirements.md`) if provided
|
|
35
|
-
- Tech Lead's original analysis
|
|
35
|
+
- Tech Lead's original analysis from `context.md`
|
|
36
36
|
|
|
37
37
|
**Critical**: Do not discard or "deduplicate away" any reviewer feedback at this stage.
|
|
38
38
|
|
|
@@ -270,13 +270,13 @@ Full reviews available in session directory:
|
|
|
270
270
|
|
|
271
271
|
| Reviewer | Blockers | Suggestions | File |
|
|
272
272
|
|----------|----------|-------------|------|
|
|
273
|
-
| @principal-1 | 0 | 3 | `reviews/principal-1.md` |
|
|
274
|
-
| @principal-2 | 0 | 2 | `reviews/principal-2.md` |
|
|
275
|
-
| @quality-1 | 0 | 4 | `reviews/quality-1.md` |
|
|
276
|
-
| @security-1 | 1 | 2 | `reviews/security-1.md` |
|
|
273
|
+
| @principal-1 | 0 | 3 | `rounds/round-{n}/reviews/principal-1.md` |
|
|
274
|
+
| @principal-2 | 0 | 2 | `rounds/round-{n}/reviews/principal-2.md` |
|
|
275
|
+
| @quality-1 | 0 | 4 | `rounds/round-{n}/reviews/quality-1.md` |
|
|
276
|
+
| @security-1 | 1 | 2 | `rounds/round-{n}/reviews/security-1.md` |
|
|
277
277
|
|
|
278
278
|
**Session**: `.ocr/sessions/{session-id}/`
|
|
279
|
-
**Discourse**: `discourse.md`
|
|
279
|
+
**Discourse**: `rounds/round-{n}/discourse.md`
|
|
280
280
|
```
|
|
281
281
|
|
|
282
282
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Complete 8-phase process for multi-agent code review.
|
|
4
4
|
|
|
5
|
-
> ⚠️ **CRITICAL**: You MUST update `state.json`
|
|
5
|
+
> ⚠️ **CRITICAL**: You MUST update `state.json` **BEFORE starting work** on each phase. The `ocr progress` CLI reads this file for real-time tracking. Update the `current_phase` and `phase_number` immediately when transitioning—do not wait until the phase is complete.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -27,21 +27,54 @@ ls -la "$SESSION_DIR" 2>/dev/null
|
|
|
27
27
|
Delete the existing session and start from scratch:
|
|
28
28
|
```bash
|
|
29
29
|
rm -rf "$SESSION_DIR"
|
|
30
|
-
mkdir -p "$SESSION_DIR/reviews"
|
|
30
|
+
mkdir -p "$SESSION_DIR/rounds/round-1/reviews"
|
|
31
31
|
```
|
|
32
32
|
Then proceed to Phase 1.
|
|
33
33
|
|
|
34
34
|
### Step 3: If session exists, verify state matches files
|
|
35
35
|
|
|
36
|
-
Read `state.json` and verify actual files exist:
|
|
36
|
+
Read `state.json` and verify actual files exist (see `references/session-files.md` for authoritative names):
|
|
37
37
|
|
|
38
|
-
| Phase Complete? |
|
|
39
|
-
|
|
40
|
-
| context | `
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
38
|
+
| Phase Complete? | File check |
|
|
39
|
+
|-----------------|------------|
|
|
40
|
+
| context | `discovered-standards.md` exists |
|
|
41
|
+
| change-context | `context.md` exists |
|
|
42
|
+
| analysis | `context.md` has Tech Lead guidance section |
|
|
43
|
+
| reviews | ≥2 files in `rounds/round-{current_round}/reviews/` |
|
|
44
|
+
| discourse | `rounds/round-{current_round}/discourse.md` exists |
|
|
45
|
+
| synthesis | `rounds/round-{current_round}/final.md` exists |
|
|
46
|
+
|
|
47
|
+
> **Note**: Phase completion is derived from filesystem (file existence). The `current_phase` field in `state.json` indicates which phase is active, not what's complete.
|
|
48
|
+
|
|
49
|
+
### Step 3b: Round Resolution Algorithm
|
|
50
|
+
|
|
51
|
+
Determine which round to use:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
ROUNDS_DIR="$SESSION_DIR/rounds"
|
|
55
|
+
|
|
56
|
+
# Count existing rounds
|
|
57
|
+
if [ ! -d "$ROUNDS_DIR" ]; then
|
|
58
|
+
CURRENT_ROUND=1
|
|
59
|
+
mkdir -p "$ROUNDS_DIR/round-1/reviews"
|
|
60
|
+
else
|
|
61
|
+
# Find highest round number
|
|
62
|
+
HIGHEST=$(ls -1 "$ROUNDS_DIR" | grep -E '^round-[0-9]+$' | sed 's/round-//' | sort -n | tail -1)
|
|
63
|
+
HIGHEST=${HIGHEST:-0}
|
|
64
|
+
|
|
65
|
+
# Check if highest round is complete (has final.md)
|
|
66
|
+
if [ -f "$ROUNDS_DIR/round-$HIGHEST/final.md" ]; then
|
|
67
|
+
# Start new round
|
|
68
|
+
CURRENT_ROUND=$((HIGHEST + 1))
|
|
69
|
+
mkdir -p "$ROUNDS_DIR/round-$CURRENT_ROUND/reviews"
|
|
70
|
+
else
|
|
71
|
+
# Resume existing round
|
|
72
|
+
CURRENT_ROUND=$HIGHEST
|
|
73
|
+
fi
|
|
74
|
+
fi
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Update `state.json` with `current_round` value. **When starting a new round (CURRENT_ROUND > 1), also set `round_started_at` to the current timestamp** so the CLI progress timer shows elapsed time for the current round, not the entire session.
|
|
45
78
|
|
|
46
79
|
### Step 4: Determine resume point
|
|
47
80
|
|
|
@@ -56,7 +89,6 @@ Before proceeding, tell the user:
|
|
|
56
89
|
```
|
|
57
90
|
📍 Session: {session_id}
|
|
58
91
|
📊 Current phase: {current_phase} (Phase {phase_number}/8)
|
|
59
|
-
✅ Completed: {completed_phases}
|
|
60
92
|
🔄 Action: [Starting fresh | Resuming from Phase X]
|
|
61
93
|
```
|
|
62
94
|
|
|
@@ -72,30 +104,37 @@ At **every phase transition**, update `.ocr/sessions/{id}/state.json`:
|
|
|
72
104
|
"status": "active",
|
|
73
105
|
"current_phase": "reviews",
|
|
74
106
|
"phase_number": 4,
|
|
75
|
-
"
|
|
76
|
-
"started_at": "
|
|
77
|
-
"
|
|
107
|
+
"current_round": 1,
|
|
108
|
+
"started_at": "{PRESERVE_ORIGINAL}",
|
|
109
|
+
"round_started_at": "{CURRENT_ISO_TIMESTAMP}",
|
|
110
|
+
"updated_at": "{CURRENT_ISO_TIMESTAMP}"
|
|
78
111
|
}
|
|
79
112
|
```
|
|
80
113
|
|
|
114
|
+
**Minimal schema** — round metadata is derived from filesystem, not stored in state.json.
|
|
115
|
+
|
|
116
|
+
**CRITICAL**: Generate timestamps dynamically (e.g., `date -u +"%Y-%m-%dT%H:%M:%SZ"` on macOS/Linux). Preserve `started_at` from session creation; set `round_started_at` when starting a new round (> 1); always update `updated_at` with current time.
|
|
117
|
+
|
|
81
118
|
**Status values**: `active` (in progress), `closed` (complete and dismissed)
|
|
82
119
|
|
|
83
|
-
**Phase values**: `context`, `
|
|
120
|
+
**Phase values**: `context`, `change-context`, `analysis`, `reviews`, `aggregation`, `discourse`, `synthesis`, `complete`
|
|
84
121
|
|
|
85
122
|
## Artifact Checklist
|
|
86
123
|
|
|
124
|
+
> **See `references/session-files.md` for the authoritative file manifest.**
|
|
125
|
+
|
|
87
126
|
Before proceeding to each phase, verify the required artifacts exist:
|
|
88
127
|
|
|
89
128
|
| Phase | Required Before Starting | Artifact to Create |
|
|
90
129
|
|-------|-------------------------|-------------------|
|
|
91
|
-
| 1 | Session directory created | `discovered-standards.md`, `
|
|
92
|
-
| 2 |
|
|
93
|
-
| 3 | `context.md` exists | Tech Lead guidance
|
|
94
|
-
| 4 | `context.md` exists | `reviews/{
|
|
95
|
-
| 5 | ≥2 files in `reviews/` | Aggregated findings (inline), update `state.json` |
|
|
96
|
-
| 6 | Reviews complete | `discourse.md`, update `state.json` |
|
|
97
|
-
| 7 | `discourse.md` exists | `final.md`, update `state.json` |
|
|
98
|
-
| 8 | `final.md` exists | Present to user, set `status: "closed"` and `current_phase: "complete"` |
|
|
130
|
+
| 1 | Session directory created | `state.json`, `discovered-standards.md`, `requirements.md` (if provided) |
|
|
131
|
+
| 2 | `discovered-standards.md` exists | `context.md`, `rounds/round-1/reviews/` directory, update `state.json` |
|
|
132
|
+
| 3 | `context.md` exists | Update `context.md` with Tech Lead guidance, update `state.json` |
|
|
133
|
+
| 4 | `context.md` exists | `rounds/round-{n}/reviews/{type}-{n}.md` for each reviewer, update `state.json` |
|
|
134
|
+
| 5 | ≥2 files in `rounds/round-{n}/reviews/` | Aggregated findings (inline), update `state.json` |
|
|
135
|
+
| 6 | Reviews complete | `rounds/round-{n}/discourse.md`, update `state.json` |
|
|
136
|
+
| 7 | `rounds/round-{n}/discourse.md` exists | `rounds/round-{n}/final.md`, update `state.json` |
|
|
137
|
+
| 8 | `rounds/round-{n}/final.md` exists | Present to user, set `status: "closed"` and `current_phase: "complete"` |
|
|
99
138
|
|
|
100
139
|
**NEVER skip directly to `final.md`** — this breaks progress tracking.
|
|
101
140
|
|
|
@@ -241,7 +280,7 @@ See `references/context-discovery.md` for detailed algorithm.
|
|
|
241
280
|
3. Create session directory:
|
|
242
281
|
```bash
|
|
243
282
|
SESSION_ID="$(date +%Y-%m-%d)-$(git branch --show-current | tr '/' '-')"
|
|
244
|
-
mkdir -p .ocr/sessions/$SESSION_ID/reviews
|
|
283
|
+
mkdir -p .ocr/sessions/$SESSION_ID/rounds/round-1/reviews
|
|
245
284
|
```
|
|
246
285
|
|
|
247
286
|
4. Save context to `context.md`:
|
|
@@ -265,7 +304,7 @@ See `references/context-discovery.md` for detailed algorithm.
|
|
|
265
304
|
|
|
266
305
|
**STOP and verify before proceeding:**
|
|
267
306
|
- [ ] Session directory created: `.ocr/sessions/{id}/`
|
|
268
|
-
- [ ] `reviews/` subdirectory created
|
|
307
|
+
- [ ] `rounds/round-1/reviews/` subdirectory created
|
|
269
308
|
- [ ] `context.md` written with change summary
|
|
270
309
|
|
|
271
310
|
---
|
|
@@ -368,16 +407,16 @@ See `references/context-discovery.md` for detailed algorithm.
|
|
|
368
407
|
- The diff to review
|
|
369
408
|
- **Instruction to explore codebase with full agency**
|
|
370
409
|
|
|
371
|
-
4. Save each review to `.ocr/sessions/{id}/reviews/{
|
|
410
|
+
4. Save each review to `.ocr/sessions/{id}/rounds/round-{current_round}/reviews/{type}-{n}.md`.
|
|
372
411
|
|
|
373
412
|
See `references/reviewer-task.md` for the task template.
|
|
374
413
|
|
|
375
414
|
### ✅ Phase 4 Checkpoint
|
|
376
415
|
|
|
377
416
|
**STOP and verify before proceeding:**
|
|
378
|
-
- [ ] At least 4 review files exist in `reviews/` directory
|
|
417
|
+
- [ ] At least 4 review files exist in `rounds/round-{n}/reviews/` directory
|
|
379
418
|
- [ ] Each review file contains findings (even if "no issues found")
|
|
380
|
-
- [ ] File naming follows `{
|
|
419
|
+
- [ ] File naming follows `{type}-{n}.md` pattern (e.g., `principal-1.md`, `quality-2.md`)
|
|
381
420
|
|
|
382
421
|
---
|
|
383
422
|
|
|
@@ -423,14 +462,14 @@ See `references/reviewer-task.md` for the task template.
|
|
|
423
462
|
- **CONNECT**: "This relates to my maintainability concern..."
|
|
424
463
|
- **SURFACE**: "Based on this discussion, I notice..."
|
|
425
464
|
|
|
426
|
-
3. Save discourse to `.ocr/sessions/{id}/discourse.md`.
|
|
465
|
+
3. Save discourse to `.ocr/sessions/{id}/rounds/round-{current_round}/discourse.md`.
|
|
427
466
|
|
|
428
467
|
See `references/discourse.md` for detailed instructions.
|
|
429
468
|
|
|
430
469
|
### ✅ Phase 6 Checkpoint
|
|
431
470
|
|
|
432
471
|
**STOP and verify before proceeding:**
|
|
433
|
-
- [ ] `discourse.md` written to
|
|
472
|
+
- [ ] `rounds/round-{n}/discourse.md` written to round directory
|
|
434
473
|
- [ ] Contains AGREE/CHALLENGE/CONNECT/SURFACE responses
|
|
435
474
|
- [ ] (Or if `--quick` flag: skip this phase, proceed to synthesis)
|
|
436
475
|
|
|
@@ -472,14 +511,14 @@ See `references/discourse.md` for detailed instructions.
|
|
|
472
511
|
|
|
473
512
|
These go in a prominent "Clarifying Questions" section for stakeholder response.
|
|
474
513
|
|
|
475
|
-
7. Save to `.ocr/sessions/{id}/final.md`.
|
|
514
|
+
7. Save to `.ocr/sessions/{id}/rounds/round-{current_round}/final.md`.
|
|
476
515
|
|
|
477
516
|
See `references/synthesis.md` for template.
|
|
478
517
|
|
|
479
518
|
### ✅ Phase 7 Checkpoint
|
|
480
519
|
|
|
481
520
|
**STOP and verify before proceeding:**
|
|
482
|
-
- [ ] `final.md` written to
|
|
521
|
+
- [ ] `rounds/round-{n}/final.md` written to round directory
|
|
483
522
|
- [ ] Contains prioritized findings (Must Fix, Should Fix, Consider)
|
|
484
523
|
- [ ] Contains Clarifying Questions section (if any)
|
|
485
524
|
- [ ] If requirements provided: Contains Requirements Assessment
|
|
@@ -517,7 +556,7 @@ See `references/synthesis.md` for template.
|
|
|
517
556
|
"status": "closed",
|
|
518
557
|
"current_phase": "complete",
|
|
519
558
|
"phase_number": 8,
|
|
520
|
-
"
|
|
559
|
+
"current_round": 1,
|
|
521
560
|
"updated_at": "{now}"
|
|
522
561
|
}
|
|
523
562
|
```
|
|
@@ -530,7 +569,7 @@ See `references/synthesis.md` for template.
|
|
|
530
569
|
4. Confirm session saved:
|
|
531
570
|
```
|
|
532
571
|
✓ Review complete
|
|
533
|
-
→ .ocr/sessions/{id}/final.md
|
|
572
|
+
→ .ocr/sessions/{id}/rounds/round-{n}/final.md
|
|
534
573
|
```
|
|
535
574
|
|
|
536
575
|
---
|
|
@@ -539,11 +578,11 @@ See `references/synthesis.md` for template.
|
|
|
539
578
|
|
|
540
579
|
| Phase | Command/Action | Output |
|
|
541
580
|
|-------|---------------|--------|
|
|
542
|
-
| 1 | Search for context files | discovered-standards.md |
|
|
543
|
-
| 2 | git diff, create session | context.md |
|
|
544
|
-
| 3 | Analyze, select reviewers | guidance in context.md |
|
|
545
|
-
| 4 | Spawn reviewer tasks | reviews/*.md |
|
|
581
|
+
| 1 | Search for context files | `discovered-standards.md` |
|
|
582
|
+
| 2 | git diff, create session | `context.md`, `rounds/round-1/reviews/` |
|
|
583
|
+
| 3 | Analyze, select reviewers | guidance in `context.md` |
|
|
584
|
+
| 4 | Spawn reviewer tasks | `rounds/round-{n}/reviews/*.md` |
|
|
546
585
|
| 5 | Compare redundant runs | aggregated findings |
|
|
547
|
-
| 6 | Reviewer discourse | discourse.md |
|
|
548
|
-
| 7 | Synthesize and prioritize | final.md |
|
|
586
|
+
| 6 | Reviewer discourse | `rounds/round-{n}/discourse.md` |
|
|
587
|
+
| 7 | Synthesize and prioritize | `rounds/round-{n}/final.md` |
|
|
549
588
|
| 8 | Display/post | Terminal output, GitHub |
|