Compare commits
314 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dc99722bf8 | |||
| 2c680e23e4 | |||
| 3f5a2b0659 | |||
| 7e828cbd61 | |||
| ae9cc1d494 | |||
| 53721a7796 | |||
| 12bee9aba6 | |||
| 0d7293d59e | |||
| fe207c1e42 | |||
| ed86731701 | |||
| 41656d6b7c | |||
| 06ff9299e2 | |||
| ea33a49f15 | |||
| f503eb5de3 | |||
| 36de54a9e0 | |||
| ef98f6d1a1 | |||
| 0440be0288 | |||
| 161d8da882 | |||
| 0908f8fa28 | |||
| 4c9fc99cd4 | |||
| 2f3a8283f9 | |||
| 78204ac392 | |||
| 39fcf12a6b | |||
| f7136c5fff | |||
| 3493a95144 | |||
| 5d060a477d | |||
| aacfb1ff56 | |||
| f619e05021 | |||
| fe10892d48 | |||
| 8c98a3bc42 | |||
| 1eac425287 | |||
| eb5cc68b51 | |||
| 01a12d6eaf | |||
| 3512708edc | |||
| 8ab8202257 | |||
| 4c3f989257 | |||
| 8996a3c92d | |||
| 8ac3385a56 | |||
| 3a47dede4b | |||
| fa0ba73035 | |||
| e9ae8cc459 | |||
| 3470629ef6 | |||
| 8a560cc627 | |||
| 2d2d88fb81 | |||
| 4e882e15fa | |||
| 48ddd15ca2 | |||
| 38430fd312 | |||
| 887589d1bc | |||
| f63769ac1a | |||
| ad8ba4d001 | |||
| ef0ba85e7b | |||
| 053f28b633 | |||
| 7c02fd3625 | |||
| 6c94405e21 | |||
| 0c4a7621d4 | |||
| 9434e4c6e9 | |||
| ee3eee6955 | |||
| b2ca7a0e1b | |||
| 5037f48fcc | |||
| 670a919e4e | |||
| 7d90518627 | |||
| 82468611ba | |||
| 26dd92581c | |||
| 98b6d808dc | |||
| 0522252f3d | |||
| 06898ca5a6 | |||
| 508baa69b6 | |||
| 137868a193 | |||
| d795327901 | |||
| 27f2c25f1c | |||
| deae250019 | |||
| deecd9314c | |||
| a57e01e49c | |||
| 2688cf82e4 | |||
| 2b07ea895d | |||
| ac7a1e31a9 | |||
| 86cb6a4e39 | |||
| f0dcf12dc7 | |||
| f2ff92d84f | |||
| 9cfbf7357a | |||
| d1dd7c5229 | |||
| 7e31cfafdb | |||
| 23009e7407 | |||
| 049774d620 | |||
| 1e4e31cc52 | |||
| 0ccc76d7c8 | |||
| a5008f73fd | |||
| cebca72c75 | |||
| 545e19bbd1 | |||
| 1dc5ec32a9 | |||
| 9e2cd9d3f8 | |||
| c4578565c8 | |||
| 10323e00e1 | |||
| 3a3928f7dc | |||
| 696ab969ed | |||
| c53d3d03df | |||
| 9ec435899b | |||
| ba8a2e63f6 | |||
| b64a1110a4 | |||
| d55f9f8635 | |||
| 4f4697c698 | |||
| 686537f729 | |||
| 0b2bda5271 | |||
| 16ede50988 | |||
| ebc1ad2f75 | |||
| 751e2d51b8 | |||
| aeb1f0bf1c | |||
| f4b2f308a1 | |||
| d3ea6b4812 | |||
| 12c28f16ed | |||
| 111c4f550b | |||
| 4787ee93cc | |||
| 5078d4e787 | |||
| 33634b4697 | |||
| 32610beb43 | |||
| d7b7986be7 | |||
| 7f1f19461c | |||
| 2ef7f4d643 | |||
| 424d0444d0 | |||
| 2a48e0d164 | |||
| b97fed2538 | |||
| 8e6bff4865 | |||
| 874e88c635 | |||
| bb1ddcabc7 | |||
| ca0a5ee9c6 | |||
| 1fa6c7be64 | |||
| e41a79e33c | |||
| ef80a60965 | |||
| b3dfcfed92 | |||
| 4fcf59e7be | |||
| a2d56f705a | |||
| d7839ac0f9 | |||
| 5a76563894 | |||
| 9d90079fe3 | |||
| eb272cb7fd | |||
| b2d0a0b997 | |||
| 126af2779e | |||
| ec3406b68d | |||
| e34ad5222a | |||
| 344cd953ce | |||
| 98977f5c5e | |||
| ab37b5e558 | |||
| ae690e9a59 | |||
| e28a2ae215 | |||
| 9a72e90499 | |||
| 1e952b84b8 | |||
| 72f6fbf006 | |||
| 4ed2e71ad2 | |||
| 7a0eb0f66e | |||
| a8781f06c4 | |||
| dde47b3456 | |||
| e1abc2e0cd | |||
| 045dff2cad | |||
| 4e81e84c92 | |||
| 2eb2fb8d74 | |||
| c7714813a7 | |||
| d7455ab9b3 | |||
| 9ffa469f48 | |||
| 6e89d0ca1c | |||
| 73116199b7 | |||
| 9dd2c318fb | |||
| 8e5c5ae378 | |||
| 2a1b1698b9 | |||
| 19738b52e7 | |||
| 95ef712017 | |||
| 79124774ec | |||
| e8d3578f2e | |||
| 694000f83f | |||
| a4e1d7d1b2 | |||
| dd153b1de1 | |||
| 3fcf7dccb5 | |||
| b696b30f22 | |||
| b193df100f | |||
| a89d0cb30e | |||
| f130cc6813 | |||
| 6664086968 | |||
| b2ebe25d71 | |||
| 9656bf2e88 | |||
| 883f7ec5c1 | |||
| ebca201d39 | |||
| bea5d6b151 | |||
| 3155518305 | |||
| a527f6224f | |||
| 5df938805e | |||
| 7d7f88f823 | |||
| 4d2179c38f | |||
| 17e3a37b41 | |||
| 8cf4b57a74 | |||
| ead7cf2869 | |||
| e9275236f2 | |||
| 4692d01c54 | |||
| 85ae99c6a5 | |||
| cf8eab9f79 | |||
| cd272e5c8e | |||
| 8ef66e0287 | |||
| 465433e067 | |||
| 9d3222ddc0 | |||
| 454fac1bff | |||
| a758f0a4c9 | |||
| 782530ba6d | |||
| 8407742a14 | |||
| 559db09ce4 | |||
| 5b0f932c4b | |||
| 68352ee206 | |||
| 831499622d | |||
| 71e01dfee7 | |||
| e9a19523d6 | |||
| c9f30abffc | |||
| bbbfbd3947 | |||
| 6ba4bdde48 | |||
| 7b0d116479 | |||
| b2aebbc97f | |||
| 40764252f4 | |||
| b082cb158c | |||
| 35831084f5 | |||
| 2ddaeb52c1 | |||
| e13d8b9b8a | |||
| 068411ee0b | |||
| bfebb71871 | |||
| 8162f629c2 | |||
| ce0564fef6 | |||
| 9d6a30467f | |||
| cdc0f1405c | |||
| 09d6a9c7c8 | |||
| fa3e5381fe | |||
| 2d07df594d | |||
| 77ee0c68fd | |||
| c8094ec225 | |||
| 412494d205 | |||
| 02320a13ea | |||
| fa488ccfc6 | |||
| 462860de54 | |||
| b5baaaaab7 | |||
| a3e587280e | |||
| 62fc04b172 | |||
| 5ba69aaa6c | |||
| 0340925d3e | |||
| ee36eaed9a | |||
| 545ccee118 | |||
| 64485a7859 | |||
| f4dfb84681 | |||
| 41c8678b28 | |||
| fcba9e8935 | |||
| 6f4832b6a7 | |||
| 524bff6eb9 | |||
| 444ee13f7f | |||
| 3423cc35a0 | |||
| 8b7b8b96c7 | |||
| 46f0ec152a | |||
| e80d2952bc | |||
| b9228f3ca4 | |||
| e5a8a84381 | |||
| 84372a9ae0 | |||
| 9d1fef738a | |||
| 3ff759ad66 | |||
| f463edf93d | |||
| 2b4c6c7a56 | |||
| fde60ce864 | |||
| c7db143688 | |||
| 9cfbb980bd | |||
| 4d0bd47bbf | |||
| a9b9cf3960 | |||
| b803f56d58 | |||
| b6adb15666 | |||
| 864100b4a7 | |||
| 2d5ce12c7b | |||
| 792dd7d430 | |||
| f0eba0c5eb | |||
| 03b0403a35 | |||
| cc23a0586d | |||
| ebd4704324 | |||
| 9f268fd3e2 | |||
| c6593278ab | |||
| a4b8158f01 | |||
| 5a0453b3b9 | |||
| 342638e158 | |||
| 0ea6dc24f6 | |||
| 0b8bf0793b | |||
| ddc4cb7d60 | |||
| f5a08634b3 | |||
| 0ba0acf567 | |||
| 1c31c603e9 | |||
| fedfa6efc8 | |||
| 6323b3ec56 | |||
| 9010e69007 | |||
| 945751b99a | |||
| 9d8fc90415 | |||
| 25c5dbbc71 | |||
| 078a84b608 | |||
| 6f57c893cd | |||
| 60ce940204 | |||
| cc98205642 | |||
| c1da0f9942 | |||
| fefc152602 | |||
| 0b00671b8b | |||
| 1867d1c6f2 | |||
| 2e52944b5f | |||
| 8beab7c8c2 | |||
| ff8640501f | |||
| 6179af4165 | |||
| 1f932cc766 | |||
| e5f37e7443 | |||
| 7c046ee7b4 | |||
| 9a6fd8066b | |||
| 71a36d8db0 | |||
| 70dc0550c2 | |||
| 195c626ad8 | |||
| e48bca01d5 | |||
| 2c447af10b | |||
| ebd9ad3119 | |||
| 093bafe51b | |||
| ee7b1e263e | |||
| 1e46753b8c | |||
| 3d668ef526 |
@@ -33,3 +33,5 @@ conductor/archive/analysis/video_analysis_*/artifacts/*.mp4
|
||||
conductor/archive/analysis/video_analysis_*/artifacts/*.vtt
|
||||
# video.log intentionally committed (small text, useful for debugging)
|
||||
conductor/archive/analysis/video_analysis_deob_warmup_20260621/samples
|
||||
scripts/twitter_threads/cookies.txt
|
||||
conductor/tracks/twitter_threads_extraction_20260705/cookies_netscape.txt
|
||||
|
||||
@@ -1,82 +1 @@
|
||||
---
|
||||
description: Fast, read-only agent for exploring the codebase structure
|
||||
mode: subagent
|
||||
model: minimax-coding-plan/MiniMax-M2.7
|
||||
temperature: 0.2
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git status*": allow
|
||||
"git diff*": allow
|
||||
"git log*": allow
|
||||
"ls*": allow
|
||||
"dir*": allow
|
||||
'manual-slop_*': allow
|
||||
---
|
||||
|
||||
You are a fast, read-only agent specialized for exploring codebases. Use this when you need to quickly find files by patterns, search code for keywords, or answer about the codebase.
|
||||
|
||||
## CRITICAL: MCP Tools Only (Native Tools Banned)
|
||||
|
||||
You MUST use Manual Slop's MCP tools. Native OpenCode tools are unreliable.
|
||||
|
||||
### Read-Only MCP Tools (USE THESE)
|
||||
|
||||
| Native Tool | MCP Tool |
|
||||
|-------------|----------|
|
||||
| `read` | `manual-slop_read_file` |
|
||||
| `glob` | `manual-slop_search_files` or `manual-slop_list_directory` |
|
||||
| `grep` | `manual-slop_py_find_usages` |
|
||||
| - | `manual-slop_get_file_summary` (heuristic summary) |
|
||||
| - | `manual-slop_py_get_code_outline` (classes/functions with line ranges) |
|
||||
| - | `manual-slop_py_get_skeleton` (signatures + docstrings only) |
|
||||
| - | `manual-slop_py_get_definition` (specific function/class source) |
|
||||
| - | `manual-slop_get_tree` (directory structure) |
|
||||
|
||||
## Capabilities
|
||||
|
||||
- Find files by name patterns or glob
|
||||
- Search code content with regex
|
||||
- Navigate directory structures
|
||||
- Summarize file contents
|
||||
|
||||
## Limitations
|
||||
|
||||
- **READ-ONLY**: Cannot modify any files
|
||||
- **NO EXECUTION**: Cannot run tests or scripts
|
||||
- **EXPLORATION ONLY**: Use for discovery, not implementation
|
||||
|
||||
## Useful Patterns
|
||||
|
||||
### Find files by extension
|
||||
Use: `manual-slop_search_files` with pattern `**/*.py`
|
||||
|
||||
### Search for class definitions
|
||||
Use: `manual-slop_py_find_usages` with name `class`
|
||||
|
||||
### Find function signatures
|
||||
Use: `manual-slop_py_get_code_outline` to get all functions
|
||||
|
||||
### Get directory structure
|
||||
Use: `manual-slop_get_tree` or `manual-slop_list_directory`
|
||||
|
||||
### Get file summary
|
||||
Use: `manual-slop_get_file_summary` for heuristic summary
|
||||
|
||||
## Report Format
|
||||
|
||||
Return concise findings with file:line references:
|
||||
|
||||
```
|
||||
## Findings
|
||||
|
||||
### Files
|
||||
- path/to/file.py - [brief description]
|
||||
|
||||
### Matches
|
||||
- path/to/file.py:123 - [matched line context]
|
||||
|
||||
### Summary
|
||||
[One-paragraph summary of findings]
|
||||
```
|
||||
---description: Fast, read-only agent for exploring the codebase structuremode: subagentmodel: minimax-coding-plan/MiniMax-M2.7temperature: 0.2permission: edit: deny bash: "*": ask "git status*": allow "git diff*": allow "git log*": allow "ls*": allow "dir*": allow 'manual-slop_*': allow---You are a fast, read-only agent specialized for exploring codebases. Use this when you need to quickly find files by patterns, search code for keywords, or answer about the codebase.## CRITICAL: MCP Tools Only (Native Tools Banned)You MUST use Manual Slop's MCP tools. Native OpenCode tools are unreliable.### Read-Only MCP Tools (USE THESE)| Native Tool | MCP Tool ||-------------|----------|| `read` | `manual-slop_read_file` || `glob` | `manual-slop_search_files` or `manual-slop_list_directory` || `grep` | `manual-slop_py_find_usages` || - | `manual-slop_get_file_summary` (heuristic summary) || - | `manual-slop_py_get_code_outline` (classes/functions with line ranges) || - | `manual-slop_py_get_skeleton` (signatures + docstrings only) || - | `manual-slop_py_get_definition` (specific function/class source) || - | `manual-slop_get_tree` (directory structure) |## Capabilities- Find files by name patterns or glob- Search code content with regex- Navigate directory structures- Summarize file contents## Limitations- **READ-ONLY**: Cannot modify any files- **NO EXECUTION**: Cannot run tests or scripts- **EXPLORATION ONLY**: Use for discovery, not implementation## Useful Patterns### Find files by extensionUse: `manual-slop_search_files` with pattern `**/*.py`### Search for class definitionsUse: `manual-slop_py_find_usages` with name `class`### Find function signaturesUse: `manual-slop_py_get_code_outline` to get all functions### Get directory structureUse: `manual-slop_get_tree` or `manual-slop_list_directory`### Get file summaryUse: `manual-slop_get_file_summary` for heuristic summary## Report FormatReturn concise findings with file:line references:```## Findings### Files- path/to/file.py - [brief description]### Matches- path/to/file.py:123 - [matched line context]### Summary[One-paragraph summary of findings]```
|
||||
@@ -1,84 +1 @@
|
||||
---
|
||||
description: General-purpose agent for researching complex questions and executing multi-step tasks
|
||||
mode: subagent
|
||||
model: minimax-coding-plan/MiniMax-M2.7
|
||||
temperature: 0.3
|
||||
---
|
||||
|
||||
A general-purpose agent for researching complex questions and executing multi-step tasks. Has full tool access (except todo), so it can make file changes when needed.
|
||||
|
||||
## CRITICAL: MCP Tools Only (Native Tools Banned)
|
||||
|
||||
You MUST use Manual Slop's MCP tools. Native OpenCode tools are unreliable.
|
||||
|
||||
### Read MCP Tools (USE THESE)
|
||||
|
||||
| Native Tool | MCP Tool |
|
||||
|-------------|----------|
|
||||
| `read` | `manual-slop_read_file` |
|
||||
| `glob` | `manual-slop_search_files` or `manual-slop_list_directory` |
|
||||
| `grep` | `manual-slop_py_find_usages` |
|
||||
| - | `manual-slop_get_file_summary` (heuristic summary) |
|
||||
| - | `manual-slop_py_get_code_outline` (classes/functions with line ranges) |
|
||||
| - | `manual-slop_py_get_skeleton` (signatures + docstrings only) |
|
||||
| - | `manual-slop_py_get_definition` (specific function/class source) |
|
||||
| - | `manual-slop_get_git_diff` (file changes) |
|
||||
| - | `manual-slop_get_tree` (directory structure) |
|
||||
|
||||
### Edit MCP Tools (USE THESE)
|
||||
|
||||
| Native Tool | MCP Tool |
|
||||
|-------------|----------|
|
||||
| `edit` | `manual-slop_edit_file` (find/replace, preserves indentation) |
|
||||
| `edit` | `manual-slop_py_update_definition` (replace function/class) |
|
||||
| `edit` | `manual-slop_set_file_slice` (replace line range) |
|
||||
| `edit` | `manual-slop_py_set_signature` (replace signature only) |
|
||||
| `edit` | `manual-slop_py_set_var_declaration` (replace variable) |
|
||||
|
||||
### Shell Commands
|
||||
|
||||
| Native Tool | MCP Tool |
|
||||
|-------------|----------|
|
||||
| `bash` | `manual-slop_run_powershell` |
|
||||
|
||||
## Capabilities
|
||||
|
||||
- Research and answer complex questions
|
||||
- Execute multi-step tasks autonomously
|
||||
- Read and write files as needed
|
||||
- Run shell commands for verification
|
||||
- Coordinate multiple operations
|
||||
|
||||
## When to Use
|
||||
|
||||
- Complex research requiring multiple file reads
|
||||
- Multi-step implementation tasks
|
||||
- Tasks requiring autonomous decision-making
|
||||
- Parallel execution of related operations
|
||||
|
||||
## Code Style (for Python)
|
||||
|
||||
- 1-space indentation
|
||||
- NO COMMENTS unless explicitly requested
|
||||
- Type hints where appropriate
|
||||
|
||||
## Report Format
|
||||
|
||||
Return detailed findings with evidence:
|
||||
|
||||
```
|
||||
## Task: [Original task]
|
||||
|
||||
### Actions Taken
|
||||
1. [Action with file/tool reference]
|
||||
2. [Action with result]
|
||||
|
||||
### Findings
|
||||
- [Finding with evidence]
|
||||
|
||||
### Results
|
||||
- [Outcome or deliverable]
|
||||
|
||||
### Recommendations
|
||||
- [Suggested next steps if applicable]
|
||||
```
|
||||
---description: General-purpose agent for researching complex questions and executing multi-step tasksmode: subagentmodel: minimax-coding-plan/MiniMax-M2.7temperature: 0.3---A general-purpose agent for researching complex questions and executing multi-step tasks. Has full tool access (except todo), so it can make file changes when needed.## CRITICAL: MCP Tools Only (Native Tools Banned)You MUST use Manual Slop's MCP tools. Native OpenCode tools are unreliable.### Read MCP Tools (USE THESE)| Native Tool | MCP Tool ||-------------|----------|| `read` | `manual-slop_read_file` || `glob` | `manual-slop_search_files` or `manual-slop_list_directory` || `grep` | `manual-slop_py_find_usages` || - | `manual-slop_get_file_summary` (heuristic summary) || - | `manual-slop_py_get_code_outline` (classes/functions with line ranges) || - | `manual-slop_py_get_skeleton` (signatures + docstrings only) || - | `manual-slop_py_get_definition` (specific function/class source) || - | `manual-slop_get_git_diff` (file changes) || - | `manual-slop_get_tree` (directory structure) |### Edit MCP Tools (USE THESE)| Native Tool | MCP Tool ||-------------|----------|| `edit` | `manual-slop_edit_file` (find/replace, preserves indentation) || `edit` | `manual-slop_py_update_definition` (replace function/class) || `edit` | `manual-slop_set_file_slice` (replace line range) || `edit` | `manual-slop_py_set_signature` (replace signature only) || `edit` | `manual-slop_py_set_var_declaration` (replace variable) |### Shell Commands| Native Tool | MCP Tool ||-------------|----------|| `bash` | `manual-slop_run_powershell` |## Capabilities- Research and answer complex questions- Execute multi-step tasks autonomously- Read and write files as needed- Run shell commands for verification- Coordinate multiple operations## When to Use- Complex research requiring multiple file reads- Multi-step implementation tasks- Tasks requiring autonomous decision-making- Parallel execution of related operations## Code Style (for Python)- 1-space indentation- NO COMMENTS unless explicitly requested- Type hints where appropriate## Report FormatReturn detailed findings with evidence:```## Task: [Original task]### Actions Taken1. [Action with file/tool reference]2. [Action with result]### Findings- [Finding with evidence]### Results- [Outcome or deliverable]### Recommendations- [Suggested next steps if applicable]```
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,109 +1 @@
|
||||
---
|
||||
description: Resume or start track implementation following TDD protocol
|
||||
agent: tier2-tech-lead
|
||||
---
|
||||
|
||||
# /conductor-implement
|
||||
|
||||
Resume or start implementation of the active track following TDD protocol.
|
||||
|
||||
## Prerequisites
|
||||
- Run `/conductor-setup` first to load context
|
||||
- Ensure a track is active (has `[~]` tasks)
|
||||
|
||||
## CRITICAL: Use MCP Tools Only
|
||||
|
||||
All research and file operations must use Manual Slop's MCP tools:
|
||||
- `manual-slop_py_get_code_outline` - structure analysis
|
||||
- `manual-slop_py_get_skeleton` - signatures + docstrings
|
||||
- `manual-slop_py_find_usages` - find references
|
||||
- `manual-slop_get_git_diff` - recent changes
|
||||
- `manual-slop_run_powershell` - shell commands
|
||||
|
||||
## Implementation Protocol
|
||||
|
||||
1. **Identify Current Task:**
|
||||
- Read active track's `plan.md` via `manual-slop_read_file`
|
||||
- Find the first `[~]` (in-progress) or `[ ]` (pending) task
|
||||
- If phase has no pending tasks, move to next phase
|
||||
|
||||
2. **Research Phase (MANDATORY):**
|
||||
Before implementing, use MCP tools to understand context:
|
||||
- `manual-slop_py_get_code_outline` on target files
|
||||
- `manual-slop_py_get_skeleton` on dependencies
|
||||
- `manual-slop_py_find_usages` for related patterns
|
||||
- `manual-slop_get_git_diff` for recent changes
|
||||
- Audit `__init__` methods for existing state
|
||||
|
||||
3. **TDD Cycle:**
|
||||
|
||||
### Red Phase (Write Failing Tests)
|
||||
- Stage current progress: `manual-slop_run_powershell` with `git add .`
|
||||
- Delegate test creation to @tier3-worker:
|
||||
```
|
||||
@tier3-worker
|
||||
|
||||
Write tests for: [task description]
|
||||
|
||||
WHERE: tests/test_file.py:line-range
|
||||
WHAT: Test [specific functionality]
|
||||
HOW: Use pytest, assert [expected behavior]
|
||||
SAFETY: [thread-safety constraints]
|
||||
|
||||
Use 1-space indentation. Use MCP tools only.
|
||||
```
|
||||
- Run tests: `manual-slop_run_powershell` with `uv run pytest tests/test_file.py -v`
|
||||
- **CONFIRM TESTS FAIL** - this is the Red phase
|
||||
|
||||
### Green Phase (Implement to Pass)
|
||||
- Stage current progress: `manual-slop_run_powershell` with `git add .`
|
||||
- Delegate implementation to @tier3-worker:
|
||||
```
|
||||
@tier3-worker
|
||||
|
||||
Implement: [task description]
|
||||
|
||||
WHERE: src/file.py:line-range
|
||||
WHAT: [specific change]
|
||||
HOW: [API calls, patterns to use]
|
||||
SAFETY: [thread-safety constraints]
|
||||
|
||||
Use 1-space indentation. Use MCP tools only.
|
||||
```
|
||||
- Run tests: `manual-slop_run_powershell` with `uv run pytest tests/test_file.py -v`
|
||||
- **CONFIRM TESTS PASS** - this is the Green phase
|
||||
|
||||
### Refactor Phase (Optional)
|
||||
- With passing tests, refactor for clarity
|
||||
- Re-run tests to verify
|
||||
|
||||
4. **Commit Protocol (ATOMIC PER-TASK):**
|
||||
Use `manual-slop_run_powershell`:
|
||||
```powershell
|
||||
git add .
|
||||
git commit -m "feat(scope): description"
|
||||
$hash = git log -1 --format="%H"
|
||||
git notes add -m "Task: [summary]" $hash
|
||||
```
|
||||
- Update `plan.md`: Change `[~]` to `[x]` with commit SHA
|
||||
- Commit plan update: `git add plan.md && git commit -m "conductor(plan): Mark task complete"`
|
||||
|
||||
5. **Repeat for Next Task**
|
||||
|
||||
## Error Handling
|
||||
If tests fail after Green phase:
|
||||
- Delegate analysis to @tier4-qa:
|
||||
```
|
||||
@tier4-qa
|
||||
|
||||
Analyze this test failure:
|
||||
|
||||
[test output]
|
||||
|
||||
DO NOT fix - provide analysis only. Use MCP tools only.
|
||||
```
|
||||
- Maximum 2 fix attempts before escalating to user
|
||||
|
||||
## Phase Completion
|
||||
When all tasks in a phase are `[x]`:
|
||||
- Run `/conductor-verify` for checkpoint
|
||||
---description: Resume or start track implementation following TDD protocolagent: tier2-tech-lead---# /conductor-implementResume or start implementation of the active track following TDD protocol.## Prerequisites- Run `/conductor-setup` first to load context- Ensure a track is active (has `[~]` tasks)## CRITICAL: Use MCP Tools OnlyAll research and file operations must use Manual Slop's MCP tools:- `manual-slop_py_get_code_outline` - structure analysis- `manual-slop_py_get_skeleton` - signatures + docstrings- `manual-slop_py_find_usages` - find references- `manual-slop_get_git_diff` - recent changes- `manual-slop_run_powershell` - shell commands## Implementation Protocol1. **Identify Current Task:** - Read active track's `plan.md` via `manual-slop_read_file` - Find the first `[~]` (in-progress) or `[ ]` (pending) task - If phase has no pending tasks, move to next phase2. **Research Phase (MANDATORY):** Before implementing, use MCP tools to understand context: - `manual-slop_py_get_code_outline` on target files - `manual-slop_py_get_skeleton` on dependencies - `manual-slop_py_find_usages` for related patterns - `manual-slop_get_git_diff` for recent changes - Audit `__init__` methods for existing state3. **TDD Cycle:** ### Red Phase (Write Failing Tests) - Stage current progress: `manual-slop_run_powershell` with `git add .` - Delegate test creation to @tier3-worker: ``` @tier3-worker Write tests for: [task description] WHERE: tests/test_file.py:line-range WHAT: Test [specific functionality] HOW: Use pytest, assert [expected behavior] SAFETY: [thread-safety constraints] Use 1-space indentation. Use MCP tools only. ``` - Run tests: `manual-slop_run_powershell` with `uv run pytest tests/test_file.py -v` - **CONFIRM TESTS FAIL** - this is the Red phase ### Green Phase (Implement to Pass) - Stage current progress: `manual-slop_run_powershell` with `git add .` - Delegate implementation to @tier3-worker: ``` @tier3-worker Implement: [task description] WHERE: src/file.py:line-range WHAT: [specific change] HOW: [API calls, patterns to use] SAFETY: [thread-safety constraints] Use 1-space indentation. Use MCP tools only. ``` - Run tests: `manual-slop_run_powershell` with `uv run pytest tests/test_file.py -v` - **CONFIRM TESTS PASS** - this is the Green phase ### Refactor Phase (Optional) - With passing tests, refactor for clarity - Re-run tests to verify4. **Commit Protocol (ATOMIC PER-TASK):** Use `manual-slop_run_powershell`: ```powershell git add . git commit -m "feat(scope): description" $hash = git log -1 --format="%H" git notes add -m "Task: [summary]" $hash ``` - Update `plan.md`: Change `[~]` to `[x]` with commit SHA - Commit plan update: `git add plan.md && git commit -m "conductor(plan): Mark task complete"`5. **Repeat for Next Task**## Error HandlingIf tests fail after Green phase:- Delegate analysis to @tier4-qa: ``` @tier4-qa Analyze this test failure: [test output] DO NOT fix - provide analysis only. Use MCP tools only. ```- Maximum 2 fix attempts before escalating to user## Phase CompletionWhen all tasks in a phase are `[x]`:- Run `/conductor-verify` for checkpoint
|
||||
@@ -1,147 +1 @@
|
||||
---
|
||||
description: Create a new conductor track with spec, plan, and metadata
|
||||
agent: tier1-orchestrator
|
||||
subtask: true
|
||||
---
|
||||
|
||||
# /conductor-new-track
|
||||
|
||||
Create a new conductor track following the Surgical Methodology.
|
||||
|
||||
## Arguments
|
||||
$ARGUMENTS - Track name and brief description
|
||||
|
||||
## Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)
|
||||
|
||||
**Added 2026-06-27.** This project has extensive canonical documentation. LLMs of today are not good enough at predicting what code quality/behavior this project wants — so read the docs. Being conservative about reading knowledge from markdown files is an ANTI-PATTERN in this codebase.
|
||||
|
||||
Before writing the spec, read:
|
||||
|
||||
1. `AGENTS.md` — the project-root agent-facing rules; especially the HARD BANs (git restore/checkout/reset, opaque types in non-boundary code)
|
||||
2. `conductor/workflow.md` — including §0 (Python Type Promotion Mandate) and the Tier 1 Track Initialization Rules
|
||||
3. `conductor/tech-stack.md` — including the Core Value reference at the top
|
||||
4. `conductor/product.md` — product vision + primary use cases
|
||||
5. `conductor/product-guidelines.md` — **Core Value section is mandatory reading**: C11/Odin/Jai semantics in a Python runtime
|
||||
6. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate
|
||||
7. `conductor/code_styleguides/python.md` §17 — the LLM Default Anti-Patterns (banned patterns)
|
||||
8. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type
|
||||
9. `conductor/code_styleguides/error_handling.md` — Result[T] + NIL_T sentinels
|
||||
10. The relevant `docs/guide_*.md` for the layers the track touches
|
||||
11. `conductor/tracks.md` — check existing tracks for similar work (don't re-invent)
|
||||
|
||||
## Protocol
|
||||
|
||||
1. **Audit Before Specifying (MANDATORY):**
|
||||
Before writing any spec, research the existing codebase:
|
||||
- Use `py_get_code_outline` on relevant files
|
||||
- Use `py_get_definition` on target classes
|
||||
- Use `grep` to find related patterns
|
||||
- Use `get_git_diff` to understand recent changes
|
||||
|
||||
Document findings in a "Current State Audit" section.
|
||||
|
||||
2. **Apply the Python Type Promotion Mandate (workflow.md §0):**
|
||||
- NO `dict[str, Any]` outside the wire boundary
|
||||
- NO `Any` parameter, return, or field type
|
||||
- NO `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels)
|
||||
- NO `hasattr()` for entity type dispatch (use typed Union or per-entity function)
|
||||
- Direct field access on typed `@dataclass(frozen=True, slots=True)` instances
|
||||
|
||||
If the track proposes lifting entities into `dict[str, Any]` or `Any`, REJECT the design and rewrite.
|
||||
|
||||
3. **Generate Track ID:**
|
||||
Format: `{name}_{YYYYMMDD}`
|
||||
Example: `async_tool_execution_20260303`
|
||||
|
||||
4. **Create Track Directory:**
|
||||
`conductor/tracks/{track_id}/`
|
||||
|
||||
5. **Create spec.md:**
|
||||
```markdown
|
||||
# Track Specification: {Title}
|
||||
|
||||
## Overview
|
||||
[One-paragraph description]
|
||||
|
||||
## Current State Audit (as of {commit_sha})
|
||||
### Already Implemented (DO NOT re-implement)
|
||||
- [Existing feature with file:line reference]
|
||||
|
||||
### Gaps to Fill (This Track's Scope)
|
||||
- [What's missing that this track will address]
|
||||
|
||||
## Goals
|
||||
- [Specific, measurable goals]
|
||||
|
||||
## Functional Requirements
|
||||
- [Detailed requirements]
|
||||
|
||||
## Non-Functional Requirements
|
||||
- [Performance, security, etc.]
|
||||
|
||||
## Architecture Reference
|
||||
- docs/guide_architecture.md#section
|
||||
- docs/guide_tools.md#section
|
||||
- `conductor/code_styleguides/data_oriented_design.md` §8.5 (the Python Type Promotion Mandate)
|
||||
|
||||
## Out of Scope
|
||||
- [What this track will NOT do]
|
||||
```
|
||||
|
||||
6. **Create plan.md:**
|
||||
```markdown
|
||||
# Implementation Plan: {Title}
|
||||
|
||||
## Phase 1: {Name}
|
||||
Focus: {One-sentence scope}
|
||||
|
||||
- [ ] Task 1.1: {Surgical description with file:line refs}
|
||||
- [ ] Task 1.2: ...
|
||||
- [ ] Task 1.N: Write tests for Phase 1 changes
|
||||
- [ ] Task 1.X: Conductor - User Manual Verification
|
||||
|
||||
## Phase 2: {Name}
|
||||
...
|
||||
```
|
||||
|
||||
7. **Create metadata.json:**
|
||||
```json
|
||||
{
|
||||
"id": "{track_id}",
|
||||
"title": "{title}",
|
||||
"type": "feature|fix|refactor|docs",
|
||||
"status": "planned",
|
||||
"priority": "high|medium|low",
|
||||
"created": "{YYYY-MM-DD}",
|
||||
"depends_on": [],
|
||||
"blocks": []
|
||||
}
|
||||
```
|
||||
|
||||
8. **Update tracks.md:**
|
||||
Add entry to `conductor/tracks.md` registry.
|
||||
|
||||
9. **Report:**
|
||||
```
|
||||
## Track Created
|
||||
|
||||
**ID:** {track_id}
|
||||
**Location:** conductor/tracks/{track_id}/
|
||||
**Files Created:**
|
||||
- spec.md
|
||||
- plan.md
|
||||
- metadata.json
|
||||
|
||||
**Next Steps:**
|
||||
1. Review spec.md for completeness
|
||||
2. Run `/conductor-implement` to begin execution
|
||||
```
|
||||
|
||||
## Surgical Methodology Checklist
|
||||
- [ ] Audited existing code before writing spec
|
||||
- [ ] Documented existing implementations with file:line refs
|
||||
- [ ] Framed requirements as gaps, not features
|
||||
- [ ] Tasks are worker-ready (WHERE/WHAT/HOW/SAFETY)
|
||||
- [ ] Referenced architecture docs
|
||||
- [ ] Mapped dependencies in metadata
|
||||
- [ ] Applied the Python Type Promotion Mandate (workflow.md §0) — no dict[str, Any], no Any, no Optional[T], no hasattr() for entity dispatch
|
||||
---description: Create a new conductor track with spec, plan, and metadataagent: tier1-orchestratorsubtask: true---# /conductor-new-trackCreate a new conductor track following the Surgical Methodology.## Arguments$ARGUMENTS - Track name and brief description## Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)**Added 2026-06-27.** This project has extensive canonical documentation. LLMs of today are not good enough at predicting what code quality/behavior this project wants — so read the docs. Being conservative about reading knowledge from markdown files is an ANTI-PATTERN in this codebase.Before writing the spec, read:1. `AGENTS.md` — the project-root agent-facing rules; especially the HARD BANs (git restore/checkout/reset, opaque types in non-boundary code)2. `conductor/workflow.md` — including §0 (Python Type Promotion Mandate) and the Tier 1 Track Initialization Rules3. `conductor/tech-stack.md` — including the Core Value reference at the top4. `conductor/product.md` — product vision + primary use cases5. `conductor/product-guidelines.md` — **Core Value section is mandatory reading**: C11/Odin/Jai semantics in a Python runtime6. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate7. `conductor/code_styleguides/python.md` §17 — the LLM Default Anti-Patterns (banned patterns)8. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type9. `conductor/code_styleguides/error_handling.md` — Result[T] + NIL_T sentinels10. The relevant `docs/guide_*.md` for the layers the track touches11. `conductor/tracks.md` — check existing tracks for similar work (don't re-invent)## Protocol1. **Audit Before Specifying (MANDATORY):** Before writing any spec, research the existing codebase: - Use `py_get_code_outline` on relevant files - Use `py_get_definition` on target classes - Use `grep` to find related patterns - Use `get_git_diff` to understand recent changes Document findings in a "Current State Audit" section.2. **Apply the Python Type Promotion Mandate (workflow.md §0):** - NO `dict[str, Any]` outside the wire boundary - NO `Any` parameter, return, or field type - NO `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels) - NO `hasattr()` for entity type dispatch (use typed Union or per-entity function) - Direct field access on typed `@dataclass(frozen=True, slots=True)` instances If the track proposes lifting entities into `dict[str, Any]` or `Any`, REJECT the design and rewrite.3. **Generate Track ID:** Format: `{name}_{YYYYMMDD}` Example: `async_tool_execution_20260303`4. **Create Track Directory:** `conductor/tracks/{track_id}/`5. **Create spec.md:** ```markdown # Track Specification: {Title} ## Overview [One-paragraph description] ## Current State Audit (as of {commit_sha}) ### Already Implemented (DO NOT re-implement) - [Existing feature with file:line reference] ### Gaps to Fill (This Track's Scope) - [What's missing that this track will address] ## Goals - [Specific, measurable goals] ## Functional Requirements - [Detailed requirements] ## Non-Functional Requirements - [Performance, security, etc.] ## Architecture Reference - docs/guide_architecture.md#section - docs/guide_tools.md#section - `conductor/code_styleguides/data_oriented_design.md` §8.5 (the Python Type Promotion Mandate) ## Out of Scope - [What this track will NOT do] ```6. **Create plan.md:** ```markdown # Implementation Plan: {Title} ## Phase 1: {Name} Focus: {One-sentence scope} - [ ] Task 1.1: {Surgical description with file:line refs} - [ ] Task 1.2: ... - [ ] Task 1.N: Write tests for Phase 1 changes - [ ] Task 1.X: Conductor - User Manual Verification ## Phase 2: {Name} ... ```7. **Create metadata.json:** ```json { "id": "{track_id}", "title": "{title}", "type": "feature|fix|refactor|docs", "status": "planned", "priority": "high|medium|low", "created": "{YYYY-MM-DD}", "depends_on": [], "blocks": [] } ```8. **Update tracks.md:** Add entry to `conductor/tracks.md` registry.9. **Report:** ``` ## Track Created **ID:** {track_id} **Location:** conductor/tracks/{track_id}/ **Files Created:** - spec.md - plan.md - metadata.json **Next Steps:** 1. Review spec.md for completeness 2. Run `/conductor-implement` to begin execution ```## Surgical Methodology Checklist- [ ] Audited existing code before writing spec- [ ] Documented existing implementations with file:line refs- [ ] Framed requirements as gaps, not features- [ ] Tasks are worker-ready (WHERE/WHAT/HOW/SAFETY)- [ ] Referenced architecture docs- [ ] Mapped dependencies in metadata- [ ] Applied the Python Type Promotion Mandate (workflow.md §0) — no dict[str, Any], no Any, no Optional[T], no hasattr() for entity dispatch
|
||||
@@ -1,47 +1 @@
|
||||
---
|
||||
description: Initialize conductor context — read product docs, verify structure, report readiness
|
||||
agent: tier1-orchestrator
|
||||
subtask: true
|
||||
---
|
||||
|
||||
# /conductor-setup
|
||||
|
||||
Bootstrap the session with full conductor context. Run this at session start.
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Read Core Documents:**
|
||||
- `conductor/index.md` — navigation hub
|
||||
- `conductor/product.md` — product vision
|
||||
- `conductor/product-guidelines.md` — UX/code standards
|
||||
- `conductor/tech-stack.md` — technology constraints
|
||||
- `conductor/workflow.md` — task lifecycle (skim; reference during implementation)
|
||||
|
||||
2. **Check Active Tracks:**
|
||||
- List all directories in `conductor/tracks/`
|
||||
- Read each `metadata.json` for status
|
||||
- Read each `plan.md` for current task state
|
||||
- Identify the track with `[~]` in-progress tasks
|
||||
|
||||
3. **Check Session Context:**
|
||||
- Read `conductor/tracks.md` if it exists — check for IN_PROGRESS or BLOCKED tasks
|
||||
- Read last 3 entries in `JOURNAL.md` for recent activity
|
||||
- Run `git log --oneline -10` for recent commits
|
||||
|
||||
4. **Report Readiness:**
|
||||
Present a session startup summary:
|
||||
```
|
||||
## Session Ready
|
||||
|
||||
**Active Track:** {track name} — Phase {N}, Task: {current task description}
|
||||
**Recent Activity:** {last journal entry title}
|
||||
**Last Commit:** {git log -1 oneline}
|
||||
|
||||
Ready to:
|
||||
- `/conductor-implement` — resume active track
|
||||
- `/conductor-status` — full status overview
|
||||
- `/conductor-new-track` — start new work
|
||||
```
|
||||
|
||||
## Important
|
||||
- This is READ-ONLY — do not modify files
|
||||
---description: Initialize conductor context ΓÇö read product docs, verify structure, report readinessagent: tier1-orchestratorsubtask: true---# /conductor-setupBootstrap the session with full conductor context. Run this at session start.## Steps1. **Read Core Documents:** - `conductor/index.md` ΓÇö navigation hub - `conductor/product.md` ΓÇö product vision - `conductor/product-guidelines.md` ΓÇö UX/code standards - `conductor/tech-stack.md` ΓÇö technology constraints - `conductor/workflow.md` ΓÇö task lifecycle (skim; reference during implementation)2. **Check Active Tracks:** - List all directories in `conductor/tracks/` - Read each `metadata.json` for status - Read each `plan.md` for current task state - Identify the track with `[~]` in-progress tasks3. **Check Session Context:** - Read `conductor/tracks.md` if it exists ΓÇö check for IN_PROGRESS or BLOCKED tasks - Read last 3 entries in `JOURNAL.md` for recent activity - Run `git log --oneline -10` for recent commits4. **Report Readiness:** Present a session startup summary: ``` ## Session Ready **Active Track:** {track name} ΓÇö Phase {N}, Task: {current task description} **Recent Activity:** {last journal entry title} **Last Commit:** {git log -1 oneline} Ready to: - `/conductor-implement` ΓÇö resume active track - `/conductor-status` ΓÇö full status overview - `/conductor-new-track` ΓÇö start new work ```## Important- This is READ-ONLY ΓÇö do not modify files
|
||||
@@ -1,59 +1 @@
|
||||
---
|
||||
description: Display full status of all conductor tracks and tasks
|
||||
agent: tier1-orchestrator
|
||||
subtask: true
|
||||
---
|
||||
|
||||
# /conductor-status
|
||||
|
||||
Display comprehensive status of the conductor system.
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Read Track Index:**
|
||||
- `conductor/tracks.md` — track registry
|
||||
- `conductor/index.md` — navigation hub
|
||||
|
||||
2. **Scan All Tracks:**
|
||||
For each track in `conductor/tracks/`:
|
||||
- Read `metadata.json` for status and timestamps
|
||||
- Read `plan.md` for task progress
|
||||
- Count completed vs total tasks
|
||||
|
||||
3. **Check conductor/tracks.md:**
|
||||
- List IN_PROGRESS tasks
|
||||
- List BLOCKED tasks
|
||||
- List pending tasks by priority
|
||||
|
||||
4. **Recent Activity:**
|
||||
- `git log --oneline -5`
|
||||
- Last 2 entries from `JOURNAL.md`
|
||||
|
||||
5. **Report Format:**
|
||||
```
|
||||
## Conductor Status
|
||||
|
||||
### Active Tracks
|
||||
| Track | Status | Progress | Current Task |
|
||||
|-------|--------|----------|--------------|
|
||||
| ... | ... | N/M tasks | ... |
|
||||
|
||||
### Task Registry (conductor/tracks.md)
|
||||
**In Progress:**
|
||||
- [ ] Task description
|
||||
|
||||
**Blocked:**
|
||||
- [ ] Task description (reason)
|
||||
|
||||
### Recent Commits
|
||||
- `abc1234` commit message
|
||||
|
||||
### Recent Journal
|
||||
- YYYY-MM-DD: Entry title
|
||||
|
||||
### Recommendations
|
||||
- [Next action suggestion]
|
||||
```
|
||||
|
||||
## Important
|
||||
- This is READ-ONLY — do not modify files
|
||||
---description: Display full status of all conductor tracks and tasksagent: tier1-orchestratorsubtask: true---# /conductor-statusDisplay comprehensive status of the conductor system.## Steps1. **Read Track Index:** - `conductor/tracks.md` ΓÇö track registry - `conductor/index.md` ΓÇö navigation hub2. **Scan All Tracks:** For each track in `conductor/tracks/`: - Read `metadata.json` for status and timestamps - Read `plan.md` for task progress - Count completed vs total tasks3. **Check conductor/tracks.md:** - List IN_PROGRESS tasks - List BLOCKED tasks - List pending tasks by priority4. **Recent Activity:** - `git log --oneline -5` - Last 2 entries from `JOURNAL.md`5. **Report Format:** ``` ## Conductor Status ### Active Tracks | Track | Status | Progress | Current Task | |-------|--------|----------|--------------| | ... | ... | N/M tasks | ... | ### Task Registry (conductor/tracks.md) **In Progress:** - [ ] Task description **Blocked:** - [ ] Task description (reason) ### Recent Commits - `abc1234` commit message ### Recent Journal - YYYY-MM-DD: Entry title ### Recommendations - [Next action suggestion] ```## Important- This is READ-ONLY ΓÇö do not modify files
|
||||
@@ -1,92 +1 @@
|
||||
---
|
||||
description: Verify phase completion and create checkpoint commit
|
||||
agent: tier2-tech-lead
|
||||
---
|
||||
|
||||
# /conductor-verify
|
||||
|
||||
Execute phase completion verification and create checkpoint.
|
||||
|
||||
## Prerequisites
|
||||
- All tasks in the current phase must be marked `[x]`
|
||||
- All changes must be committed
|
||||
|
||||
## CRITICAL: Use MCP Tools Only
|
||||
|
||||
All operations must use Manual Slop's MCP tools:
|
||||
- `manual-slop_read_file` - read files
|
||||
- `manual-slop_get_git_diff` - check changes
|
||||
- `manual-slop_run_powershell` - shell commands
|
||||
|
||||
## Verification Protocol
|
||||
|
||||
1. **Announce Protocol Start:**
|
||||
Inform user that phase verification has begun.
|
||||
|
||||
2. **Determine Phase Scope:**
|
||||
- Find previous phase checkpoint SHA in `plan.md` via `manual-slop_read_file`
|
||||
- If no previous checkpoint, scope is all changes since first commit
|
||||
|
||||
3. **List Changed Files:**
|
||||
Use `manual-slop_run_powershell`:
|
||||
```powershell
|
||||
git diff --name-only <previous_checkpoint_sha> HEAD
|
||||
```
|
||||
|
||||
4. **Verify Test Coverage:**
|
||||
For each code file changed (exclude `.json`, `.md`, `.yaml`):
|
||||
- Check if corresponding test file exists via `manual-slop_search_files`
|
||||
- If missing, create test file via @tier3-worker
|
||||
|
||||
5. **Execute Tests in Batches:**
|
||||
**CRITICAL**: Do NOT run full suite. Run max 4 test files at a time.
|
||||
|
||||
Announce command before execution:
|
||||
```
|
||||
I will now run: uv run pytest tests/test_file1.py tests/test_file2.py -v
|
||||
```
|
||||
|
||||
Use `manual-slop_run_powershell` to execute.
|
||||
|
||||
If tests fail with large output:
|
||||
- Pipe to log file
|
||||
- Delegate analysis to @tier4-qa
|
||||
- Maximum 2 fix attempts before escalating
|
||||
|
||||
6. **Present Results:**
|
||||
```
|
||||
## Phase Verification Results
|
||||
|
||||
**Phase:** {phase name}
|
||||
**Files Changed:** {count}
|
||||
**Tests Run:** {count}
|
||||
**Tests Passed:** {count}
|
||||
**Tests Failed:** {count}
|
||||
|
||||
[Detailed results or failure analysis]
|
||||
```
|
||||
|
||||
7. **Await User Confirmation:**
|
||||
**PAUSE** and wait for explicit user approval before proceeding.
|
||||
|
||||
8. **Create Checkpoint:**
|
||||
Use `manual-slop_run_powershell`:
|
||||
```powershell
|
||||
git add .
|
||||
git commit --allow-empty -m "conductor(checkpoint): Phase {N} complete"
|
||||
$hash = git log -1 --format="%H"
|
||||
git notes add -m "Verification: [report summary]" $hash
|
||||
```
|
||||
|
||||
9. **Update Plan:**
|
||||
- Add `[checkpoint: {sha}]` to phase heading in `plan.md`
|
||||
- Use `manual-slop_set_file_slice` or `manual-slop_read_file` + write
|
||||
- Commit: `git add plan.md && git commit -m "conductor(plan): Mark phase complete"`
|
||||
|
||||
10. **Announce Completion:**
|
||||
Inform user that phase is complete with checkpoint created.
|
||||
|
||||
## Error Handling
|
||||
- If any verification fails: HALT and present logs
|
||||
- Do NOT proceed without user confirmation
|
||||
- Maximum 2 fix attempts per failure
|
||||
---description: Verify phase completion and create checkpoint commitagent: tier2-tech-lead---# /conductor-verifyExecute phase completion verification and create checkpoint.## Prerequisites- All tasks in the current phase must be marked `[x]`- All changes must be committed## CRITICAL: Use MCP Tools OnlyAll operations must use Manual Slop's MCP tools:- `manual-slop_read_file` - read files- `manual-slop_get_git_diff` - check changes- `manual-slop_run_powershell` - shell commands## Verification Protocol1. **Announce Protocol Start:** Inform user that phase verification has begun.2. **Determine Phase Scope:** - Find previous phase checkpoint SHA in `plan.md` via `manual-slop_read_file` - If no previous checkpoint, scope is all changes since first commit3. **List Changed Files:** Use `manual-slop_run_powershell`: ```powershell git diff --name-only <previous_checkpoint_sha> HEAD ```4. **Verify Test Coverage:** For each code file changed (exclude `.json`, `.md`, `.yaml`): - Check if corresponding test file exists via `manual-slop_search_files` - If missing, create test file via @tier3-worker5. **Execute Tests in Batches:** **CRITICAL**: Do NOT run full suite. Run max 4 test files at a time. Announce command before execution: ``` I will now run: uv run pytest tests/test_file1.py tests/test_file2.py -v ``` Use `manual-slop_run_powershell` to execute. If tests fail with large output: - Pipe to log file - Delegate analysis to @tier4-qa - Maximum 2 fix attempts before escalating6. **Present Results:** ``` ## Phase Verification Results **Phase:** {phase name} **Files Changed:** {count} **Tests Run:** {count} **Tests Passed:** {count} **Tests Failed:** {count} [Detailed results or failure analysis] ```7. **Await User Confirmation:** **PAUSE** and wait for explicit user approval before proceeding.8. **Create Checkpoint:** Use `manual-slop_run_powershell`: ```powershell git add . git commit --allow-empty -m "conductor(checkpoint): Phase {N} complete" $hash = git log -1 --format="%H" git notes add -m "Verification: [report summary]" $hash ```9. **Update Plan:** - Add `[checkpoint: {sha}]` to phase heading in `plan.md` - Use `manual-slop_set_file_slice` or `manual-slop_read_file` + write - Commit: `git add plan.md && git commit -m "conductor(plan): Mark phase complete"`10. **Announce Completion:** Inform user that phase is complete with checkpoint created.## Error Handling- If any verification fails: HALT and present logs- Do NOT proceed without user confirmation- Maximum 2 fix attempts per failure
|
||||
@@ -1,65 +1 @@
|
||||
---
|
||||
description: Invoke Tier 1 Orchestrator for product alignment, high-level planning, and track initialization
|
||||
agent: tier1-orchestrator
|
||||
---
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
You are now acting as Tier 1 Orchestrator in the **META-TOOLING** domain (per `docs/guide_meta_boundary.md`). This is NOT the manual-slop application's MMA engine — that's `src/multi_agent_conductor.py` in the APPLICATION domain.
|
||||
|
||||
### Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)
|
||||
|
||||
**Added 2026-06-27.** This project has extensive canonical documentation. Read the docs. Don't skim.
|
||||
|
||||
Before ANY planning or track initialization, read:
|
||||
|
||||
1. `AGENTS.md` — project-root rules; especially the HARD BANs
|
||||
2. `conductor/workflow.md` — including §0 (Python Type Promotion Mandate)
|
||||
3. `conductor/tech-stack.md` — Core Value reference at top
|
||||
4. `conductor/product-guidelines.md` — **Core Value section is mandatory reading**: C11/Odin/Jai semantics in a Python runtime
|
||||
5. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate
|
||||
6. `conductor/code_styleguides/python.md` §17 — LLM Default Anti-Patterns (banned patterns)
|
||||
7. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type
|
||||
8. `conductor/tracks.md` — check existing tracks for similar work (don't reinvent)
|
||||
|
||||
LLMs of today are not good enough at predicting what this project wants — read the docs.
|
||||
|
||||
### Primary Responsibilities
|
||||
- Product alignment and strategic planning
|
||||
- Track initialization (`/conductor-new-track`)
|
||||
- Session setup (`/conductor-setup`)
|
||||
- Delegate execution to Tier 2 Tech Lead via the OpenCode Task tool
|
||||
- Write an end-of-session report (`docs/reports/SESSION_<date>.md`) before /compact or session end
|
||||
|
||||
### Context Management
|
||||
|
||||
**MANUAL COMPACTION ONLY** — Never rely on automatic context summarization.
|
||||
Preserve full context during track planning and spec creation.
|
||||
|
||||
**Before /compact or session end:** write `docs/reports/SESSION_<date>.md` capturing what was done, what remains, the current branch.
|
||||
|
||||
**Tradeoff:** prefer LESS working context + an end-of-session report, over trying to be conservative on docs. The user explicitly rejected LLM conservatism.
|
||||
|
||||
### The Surgical Methodology (MANDATORY)
|
||||
|
||||
1. **AUDIT BEFORE SPECIFYING**: Never write a spec without first reading actual code using MCP tools. Document existing implementations with file:line references.
|
||||
2. **IDENTIFY GAPS, NOT FEATURES**: Frame requirements around what's MISSING.
|
||||
3. **WRITE WORKER-READY TASKS**: Each task must specify WHERE/WHAT/HOW/SAFETY.
|
||||
4. **REFERENCE ARCHITECTURE DOCS**: Link to `docs/guide_*.md` sections.
|
||||
5. **APPLY THE PYTHON TYPE PROMOTION MANDATE** (conductor/workflow.md §0): every track spec/plan MUST respect the C11/Odin/Jai-in-Python rules:
|
||||
- No `dict[str, Any]` outside the wire boundary
|
||||
- No `Any` parameter, return, or field type
|
||||
- No `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels)
|
||||
- No `hasattr()` for entity type dispatch
|
||||
- Direct field access on typed `@dataclass(frozen=True, slots=True)` instances
|
||||
|
||||
If a track proposes lifting entities into `dict[str, Any]` or `Any`, REJECT the design and rewrite.
|
||||
|
||||
### Limitations
|
||||
- READ-ONLY: Do NOT write code or edit files (except track spec/plan/metadata)
|
||||
- Do NOT execute tracks — delegate to Tier 2
|
||||
- Do NOT implement features — delegate to Tier 3 Workers
|
||||
---description: Invoke Tier 1 Orchestrator for product alignment, high-level planning, and track initializationagent: tier1-orchestrator---$ARGUMENTS---## ContextYou are now acting as Tier 1 Orchestrator in the **META-TOOLING** domain (per `docs/guide_meta_boundary.md`). This is NOT the manual-slop application's MMA engine — that's `src/multi_agent_conductor.py` in the APPLICATION domain.### Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)**Added 2026-06-27.** This project has extensive canonical documentation. Read the docs. Don't skim.Before ANY planning or track initialization, read:1. `AGENTS.md` — project-root rules; especially the HARD BANs2. `conductor/workflow.md` — including §0 (Python Type Promotion Mandate)3. `conductor/tech-stack.md` — Core Value reference at top4. `conductor/product-guidelines.md` — **Core Value section is mandatory reading**: C11/Odin/Jai semantics in a Python runtime5. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate6. `conductor/code_styleguides/python.md` §17 — LLM Default Anti-Patterns (banned patterns)7. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type8. `conductor/tracks.md` — check existing tracks for similar work (don't reinvent)LLMs of today are not good enough at predicting what this project wants — read the docs.### Primary Responsibilities- Product alignment and strategic planning- Track initialization (`/conductor-new-track`)- Session setup (`/conductor-setup`)- Delegate execution to Tier 2 Tech Lead via the OpenCode Task tool- Write an end-of-session report (`docs/reports/SESSION_<date>.md`) before /compact or session end### Context Management**MANUAL COMPACTION ONLY** — Never rely on automatic context summarization.Preserve full context during track planning and spec creation.**Before /compact or session end:** write `docs/reports/SESSION_<date>.md` capturing what was done, what remains, the current branch.**Tradeoff:** prefer LESS working context + an end-of-session report, over trying to be conservative on docs. The user explicitly rejected LLM conservatism.### The Surgical Methodology (MANDATORY)1. **AUDIT BEFORE SPECIFYING**: Never write a spec without first reading actual code using MCP tools. Document existing implementations with file:line references.2. **IDENTIFY GAPS, NOT FEATURES**: Frame requirements around what's MISSING.3. **WRITE WORKER-READY TASKS**: Each task must specify WHERE/WHAT/HOW/SAFETY.4. **REFERENCE ARCHITECTURE DOCS**: Link to `docs/guide_*.md` sections.5. **APPLY THE PYTHON TYPE PROMOTION MANDATE** (conductor/workflow.md §0): every track spec/plan MUST respect the C11/Odin/Jai-in-Python rules: - No `dict[str, Any]` outside the wire boundary - No `Any` parameter, return, or field type - No `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels) - No `hasattr()` for entity type dispatch - Direct field access on typed `@dataclass(frozen=True, slots=True)` instancesIf a track proposes lifting entities into `dict[str, Any]` or `Any`, REJECT the design and rewrite.### Limitations- READ-ONLY: Do NOT write code or edit files (except track spec/plan/metadata)- Do NOT execute tracks — delegate to Tier 2- Do NOT implement features — delegate to Tier 3 Workers
|
||||
@@ -1,115 +1 @@
|
||||
---
|
||||
description: Invoke Tier 2 Tech Lead for architectural design and track execution
|
||||
agent: tier2-tech-lead
|
||||
---
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
You are now acting as Tier 2 Tech Lead in the **META-TOOLING** domain (per `docs/guide_meta_boundary.md`). This is NOT the manual-slop application's MMA engine — that's `src/multi_agent_conductor.py` in the APPLICATION domain.
|
||||
|
||||
### Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)
|
||||
|
||||
**Added 2026-06-27.** This project has extensive canonical documentation. Read the docs. Don't skim.
|
||||
|
||||
Before ANY planning, design, or delegation, read:
|
||||
|
||||
1. `AGENTS.md` — project-root rules; especially the HARD BANs
|
||||
2. `conductor/workflow.md` — including §0 (Python Type Promotion Mandate)
|
||||
3. `conductor/tech-stack.md` — Core Value reference at top
|
||||
4. `conductor/product-guidelines.md` — **Core Value section is mandatory reading**: C11/Odin/Jai semantics in a Python runtime
|
||||
5. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate
|
||||
6. `conductor/code_styleguides/python.md` §17 — LLM Default Anti-Patterns (banned patterns)
|
||||
7. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type
|
||||
8. The relevant `docs/guide_*.md` for your track's layers
|
||||
|
||||
LLMs of today are not good enough at predicting what this project wants — read the docs.
|
||||
|
||||
### Primary Responsibilities
|
||||
- Track execution (`/conductor-implement`)
|
||||
- Architectural oversight
|
||||
- Delegate to Tier 3 Workers via the OpenCode Task tool (`subagent_type: "tier3-worker"`)
|
||||
- Delegate error analysis to Tier 4 QA via the OpenCode Task tool (`subagent_type: "tier4-qa"`)
|
||||
- Maintain persistent memory throughout track execution
|
||||
- Write an end-of-session report (`docs/reports/SESSION_<date>.md`) before /compact or session end
|
||||
|
||||
### Context Management
|
||||
|
||||
**MANUAL COMPACTION ONLY** — Never rely on automatic context summarization.
|
||||
You maintain PERSISTENT MEMORY throughout track execution — do NOT apply Context Amnesia to your own session.
|
||||
|
||||
**Before /compact or session end:** write `docs/reports/SESSION_<date>.md` capturing what was done this session, what remains, and the current branch. This allows the next session to re-warm context.
|
||||
|
||||
**Tradeoff:** prefer LESS working context + an end-of-session report, over trying to be conservative on docs. The user explicitly rejected LLM conservatism on this project.
|
||||
|
||||
### Pre-Delegation Checkpoint (MANDATORY)
|
||||
|
||||
Before delegating ANY dangerous or non-trivial change to Tier 3:
|
||||
|
||||
```
|
||||
git add .
|
||||
```
|
||||
|
||||
**WHY**: If a Tier 3 Worker fails or incorrectly runs `git restore`, you will lose ALL prior AI iterations for that file if it wasn't staged/committed. (Per AGENTS.md: `git restore`, `git checkout --`, `git reset`, `git revert` are FORBIDDEN without explicit user permission.)
|
||||
|
||||
### The C11/Odin/Jai-in-Python Mandate (CRITICAL)
|
||||
|
||||
When planning or reviewing tasks:
|
||||
|
||||
**BANNED in non-boundary code:**
|
||||
- `dict[str, Any]` (use typed `@dataclass(frozen=True, slots=True)` with explicit fields)
|
||||
- `Any` type hint (use the concrete typed dataclass)
|
||||
- `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels per `error_handling.md`)
|
||||
- `hasattr()` for entity type dispatch (use typed Union or per-entity function)
|
||||
- Local imports inside functions (top-of-module imports only)
|
||||
- `import X as _PREFIX` aliasing (use the original name)
|
||||
- Repeated `.from_dict()` calls in the same expression (cache or promote the type)
|
||||
|
||||
**The one exception:** the literal wire boundary (TOML/JSON parse functions) may use `dict[str, Any]` + `Metadata.from_dict(...)`.
|
||||
|
||||
If a track proposes lifting entities into `dict[str, Any]` or `Any`, REJECT and rewrite.
|
||||
|
||||
### TDD Protocol (MANDATORY)
|
||||
|
||||
1. **Red Phase**: Write failing tests first — CONFIRM FAILURE
|
||||
2. **Green Phase**: Implement to pass — CONFIRM PASS
|
||||
3. **Refactor Phase**: Optional, with passing tests
|
||||
|
||||
### Commit Protocol (ATOMIC PER-TASK)
|
||||
|
||||
After completing each task:
|
||||
1. Stage: `git add .`
|
||||
2. Commit: `feat(scope): description`
|
||||
3. Get hash: `git log -1 --format="%H"`
|
||||
4. Attach note: `git notes add -m "summary" <hash>`
|
||||
5. Update plan.md: Mark `[x]` with SHA
|
||||
6. Commit plan update: `git add plan.md && git commit -m "conductor(plan): Mark task complete"`
|
||||
|
||||
### Delegation Pattern (OpenCode Task tool — replaces legacy mma_exec.py)
|
||||
|
||||
**Tier 3 Worker** (OpenCode Task tool):
|
||||
```
|
||||
subagent_type: "tier3-worker"
|
||||
description: "Brief task name"
|
||||
prompt: |
|
||||
WHERE: file.py:line-range
|
||||
WHAT: specific change
|
||||
HOW: API calls/patterns
|
||||
SAFETY: thread constraints
|
||||
Use 1-space indentation.
|
||||
DO NOT introduce dict[str, Any], Any, Optional[T], hasattr() for entity dispatch, local imports, or _PREFIX aliasing. See conductor/code_styleguides/python.md §17.
|
||||
```
|
||||
|
||||
**Tier 4 QA** (OpenCode Task tool):
|
||||
```
|
||||
subagent_type: "tier4-qa"
|
||||
description: "Analyze failure"
|
||||
prompt: |
|
||||
[Error output]
|
||||
DO NOT fix - provide root cause analysis only.
|
||||
```
|
||||
|
||||
**NOTE:** the legacy `mma_exec.py` and `claude_mma_exec.py` bridge scripts are DEPRECATED as of 2026-06-27. All sub-agent delegation now goes through the OpenCode Task tool.
|
||||
---description: Invoke Tier 2 Tech Lead for architectural design and track executionagent: tier2-tech-lead---$ARGUMENTS---## ContextYou are now acting as Tier 2 Tech Lead in the **META-TOOLING** domain (per `docs/guide_meta_boundary.md`). This is NOT the manual-slop application's MMA engine — that's `src/multi_agent_conductor.py` in the APPLICATION domain.### Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)**Added 2026-06-27.** This project has extensive canonical documentation. Read the docs. Don't skim.Before ANY planning, design, or delegation, read:1. `AGENTS.md` — project-root rules; especially the HARD BANs2. `conductor/workflow.md` — including §0 (Python Type Promotion Mandate)3. `conductor/tech-stack.md` — Core Value reference at top4. `conductor/product-guidelines.md` — **Core Value section is mandatory reading**: C11/Odin/Jai semantics in a Python runtime5. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate6. `conductor/code_styleguides/python.md` §17 — LLM Default Anti-Patterns (banned patterns)7. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type8. The relevant `docs/guide_*.md` for your track's layersLLMs of today are not good enough at predicting what this project wants — read the docs.### Primary Responsibilities- Track execution (`/conductor-implement`)- Architectural oversight- Delegate to Tier 3 Workers via the OpenCode Task tool (`subagent_type: "tier3-worker"`)- Delegate error analysis to Tier 4 QA via the OpenCode Task tool (`subagent_type: "tier4-qa"`)- Maintain persistent memory throughout track execution- Write an end-of-session report (`docs/reports/SESSION_<date>.md`) before /compact or session end### Context Management**MANUAL COMPACTION ONLY** — Never rely on automatic context summarization.You maintain PERSISTENT MEMORY throughout track execution — do NOT apply Context Amnesia to your own session.**Before /compact or session end:** write `docs/reports/SESSION_<date>.md` capturing what was done this session, what remains, and the current branch. This allows the next session to re-warm context.**Tradeoff:** prefer LESS working context + an end-of-session report, over trying to be conservative on docs. The user explicitly rejected LLM conservatism on this project.### Pre-Delegation Checkpoint (MANDATORY)Before delegating ANY dangerous or non-trivial change to Tier 3:```git add .```**WHY**: If a Tier 3 Worker fails or incorrectly runs `git restore`, you will lose ALL prior AI iterations for that file if it wasn't staged/committed. (Per AGENTS.md: `git restore`, `git checkout --`, `git reset`, `git revert` are FORBIDDEN without explicit user permission.)### The C11/Odin/Jai-in-Python Mandate (CRITICAL)When planning or reviewing tasks:**BANNED in non-boundary code:**- `dict[str, Any]` (use typed `@dataclass(frozen=True, slots=True)` with explicit fields)- `Any` type hint (use the concrete typed dataclass)- `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels per `error_handling.md`)- `hasattr()` for entity type dispatch (use typed Union or per-entity function)- Local imports inside functions (top-of-module imports only)- `import X as _PREFIX` aliasing (use the original name)- Repeated `.from_dict()` calls in the same expression (cache or promote the type)**The one exception:** the literal wire boundary (TOML/JSON parse functions) may use `dict[str, Any]` + `Metadata.from_dict(...)`.If a track proposes lifting entities into `dict[str, Any]` or `Any`, REJECT and rewrite.### TDD Protocol (MANDATORY)1. **Red Phase**: Write failing tests first — CONFIRM FAILURE2. **Green Phase**: Implement to pass — CONFIRM PASS3. **Refactor Phase**: Optional, with passing tests### Commit Protocol (ATOMIC PER-TASK)After completing each task:1. Stage: `git add .`2. Commit: `feat(scope): description`3. Get hash: `git log -1 --format="%H"`4. Attach note: `git notes add -m "summary" <hash>`5. Update plan.md: Mark `[x]` with SHA6. Commit plan update: `git add plan.md && git commit -m "conductor(plan): Mark task complete"`### Delegation Pattern (OpenCode Task tool — replaces legacy mma_exec.py)**Tier 3 Worker** (OpenCode Task tool):```subagent_type: "tier3-worker"description: "Brief task name"prompt: | WHERE: file.py:line-range WHAT: specific change HOW: API calls/patterns SAFETY: thread constraints Use 1-space indentation. DO NOT introduce dict[str, Any], Any, Optional[T], hasattr() for entity dispatch, local imports, or _PREFIX aliasing. See conductor/code_styleguides/python.md §17.```**Tier 4 QA** (OpenCode Task tool):```subagent_type: "tier4-qa"description: "Analyze failure"prompt: | [Error output] DO NOT fix - provide root cause analysis only.```**NOTE:** the legacy `mma_exec.py` and `claude_mma_exec.py` bridge scripts are DEPRECATED as of 2026-06-27. All sub-agent delegation now goes through the OpenCode Task tool.
|
||||
@@ -1,83 +1 @@
|
||||
---
|
||||
description: Invoke Tier 3 Worker for surgical code implementation
|
||||
agent: tier3-worker
|
||||
---
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
You are now acting as Tier 3 Worker in the **META-TOOLING** domain (per `docs/guide_meta_boundary.md`). You implement surgical code changes for the manual_slop application codebase (the APPLICATION domain), per the spec/plan from Tier 1/2.
|
||||
|
||||
### Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)
|
||||
|
||||
**Added 2026-06-27.** This project has extensive canonical documentation. Read the docs. Don't skim.
|
||||
|
||||
Before ANY implementation, read:
|
||||
|
||||
1. `AGENTS.md` — project-root rules; especially the HARD BANs
|
||||
2. `conductor/code_styleguides/python.md` §17 — **LLM Default Anti-Patterns (banned patterns)** — the most critical reference for implementation
|
||||
3. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate
|
||||
4. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type
|
||||
5. `conductor/code_styleguides/error_handling.md` — Result[T] + NIL_T sentinels
|
||||
6. The relevant `docs/guide_*.md` for the layer your task touches
|
||||
|
||||
### Key Constraints
|
||||
|
||||
- **STATELESS**: Context Amnesia — each task starts fresh
|
||||
- **MCP TOOLS ONLY**: Use `manual-slop_*` tools, NEVER native tools
|
||||
- **SURGICAL**: Follow WHERE/WHAT/HOW/SAFETY exactly
|
||||
- **1-SPACE INDENTATION**: For all Python code
|
||||
|
||||
### The Banned Patterns (DO NOT INTRODUCE)
|
||||
|
||||
From `conductor/code_styleguides/python.md` §17. The agent MUST NOT write:
|
||||
|
||||
- `dict[str, Any]` parameter/return/field types (use typed `@dataclass(frozen=True, slots=True)`)
|
||||
- `Any` types (use the concrete typed dataclass)
|
||||
- `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels)
|
||||
- `hasattr()` for entity type dispatch (use typed Union or per-entity function)
|
||||
- Local imports inside functions (top-of-module imports only)
|
||||
- `import X as _PREFIX` aliasing (use the original name)
|
||||
- Repeated `.from_dict()` calls in the same expression (cache the result or promote the type)
|
||||
|
||||
**The one exception:** the literal wire boundary (TOML/JSON parse functions) may use `dict[str, Any]` + `Metadata.from_dict(...)`.
|
||||
|
||||
### Task Execution Protocol
|
||||
|
||||
1. **Read Task Prompt**: Identify WHERE/WHAT/HOW/SAFETY
|
||||
2. **Use Skeleton Tools**: For files >50 lines, use `manual-slop_py_get_skeleton` or `manual-slop_get_file_summary`
|
||||
3. **Implement Exactly**: Follow specifications precisely; do NOT introduce banned patterns
|
||||
4. **Verify**: Run tests if specified via `manual-slop_run_powershell`
|
||||
5. **Report**: Return concise summary (what, where, issues)
|
||||
|
||||
### Edit MCP Tools (USE THESE - BAN NATIVE EDIT)
|
||||
|
||||
| Native Tool | MCP Tool |
|
||||
|-------------|----------|
|
||||
| `edit` | `manual-slop_edit_file` (find/replace, preserves indentation) |
|
||||
| `edit` | `manual-slop_py_update_definition` (replace function/class) |
|
||||
| `edit` | `manual-slop_set_file_slice` (replace line range) |
|
||||
| `edit` | `manual-slop_py_set_signature` (replace signature only) |
|
||||
| `edit` | `manual-slop_py_set_var_declaration` (replace variable) |
|
||||
|
||||
**CRITICAL**: The native `edit` tool DESTROYS 1-space indentation. ALWAYS use MCP tools.
|
||||
|
||||
### Blocking Protocol
|
||||
|
||||
If you cannot complete the task:
|
||||
|
||||
1. Start response with `BLOCKED:`
|
||||
2. Explain exactly why you cannot proceed
|
||||
3. List what information or changes would unblock you
|
||||
4. Do NOT attempt partial implementations that break the build
|
||||
|
||||
### Code Style (Python)
|
||||
|
||||
- 1-space indentation
|
||||
- NO COMMENTS unless explicitly requested
|
||||
- Type hints required
|
||||
- Internal methods/variables prefixed with underscore
|
||||
- NEVER use `git restore`, `git checkout --`, `git reset`, or `git revert` (per AGENTS.md HARD BAN)
|
||||
---description: Invoke Tier 3 Worker for surgical code implementationagent: tier3-worker---$ARGUMENTS---## ContextYou are now acting as Tier 3 Worker in the **META-TOOLING** domain (per `docs/guide_meta_boundary.md`). You implement surgical code changes for the manual_slop application codebase (the APPLICATION domain), per the spec/plan from Tier 1/2.### Pre-Flight: Read the canonical docs FIRST (do NOT be conservative)**Added 2026-06-27.** This project has extensive canonical documentation. Read the docs. Don't skim.Before ANY implementation, read:1. `AGENTS.md` — project-root rules; especially the HARD BANs2. `conductor/code_styleguides/python.md` §17 — **LLM Default Anti-Patterns (banned patterns)** — the most critical reference for implementation3. `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate4. `conductor/code_styleguides/type_aliases.md` — Metadata is the boundary type5. `conductor/code_styleguides/error_handling.md` — Result[T] + NIL_T sentinels6. The relevant `docs/guide_*.md` for the layer your task touches### Key Constraints- **STATELESS**: Context Amnesia — each task starts fresh- **MCP TOOLS ONLY**: Use `manual-slop_*` tools, NEVER native tools- **SURGICAL**: Follow WHERE/WHAT/HOW/SAFETY exactly- **1-SPACE INDENTATION**: For all Python code### The Banned Patterns (DO NOT INTRODUCE)From `conductor/code_styleguides/python.md` §17. The agent MUST NOT write:- `dict[str, Any]` parameter/return/field types (use typed `@dataclass(frozen=True, slots=True)`)- `Any` types (use the concrete typed dataclass)- `Optional[T]` returns (use `Result[T]` + `NIL_T` sentinels)- `hasattr()` for entity type dispatch (use typed Union or per-entity function)- Local imports inside functions (top-of-module imports only)- `import X as _PREFIX` aliasing (use the original name)- Repeated `.from_dict()` calls in the same expression (cache the result or promote the type)**The one exception:** the literal wire boundary (TOML/JSON parse functions) may use `dict[str, Any]` + `Metadata.from_dict(...)`.### Task Execution Protocol1. **Read Task Prompt**: Identify WHERE/WHAT/HOW/SAFETY2. **Use Skeleton Tools**: For files >50 lines, use `manual-slop_py_get_skeleton` or `manual-slop_get_file_summary`3. **Implement Exactly**: Follow specifications precisely; do NOT introduce banned patterns4. **Verify**: Run tests if specified via `manual-slop_run_powershell`5. **Report**: Return concise summary (what, where, issues)### Edit MCP Tools (USE THESE - BAN NATIVE EDIT)| Native Tool | MCP Tool ||-------------|----------|| `edit` | `manual-slop_edit_file` (find/replace, preserves indentation) || `edit` | `manual-slop_py_update_definition` (replace function/class) || `edit` | `manual-slop_set_file_slice` (replace line range) || `edit` | `manual-slop_py_set_signature` (replace signature only) || `edit` | `manual-slop_py_set_var_declaration` (replace variable) |**CRITICAL**: The native `edit` tool DESTROYS 1-space indentation. ALWAYS use MCP tools.### Blocking ProtocolIf you cannot complete the task:1. Start response with `BLOCKED:`2. Explain exactly why you cannot proceed3. List what information or changes would unblock you4. Do NOT attempt partial implementations that break the build### Code Style (Python)- 1-space indentation- NO COMMENTS unless explicitly requested- Type hints required- Internal methods/variables prefixed with underscore- NEVER use `git restore`, `git checkout --`, `git reset`, or `git revert` (per AGENTS.md HARD BAN)
|
||||
@@ -1,75 +1 @@
|
||||
---
|
||||
description: Invoke Tier 4 QA Agent for error analysis
|
||||
agent: tier4-qa
|
||||
---
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
You are now acting as Tier 4 QA Agent.
|
||||
|
||||
### Key Constraints
|
||||
|
||||
- **STATELESS**: Context Amnesia — each analysis starts fresh
|
||||
- **READ-ONLY**: Do NOT modify any files
|
||||
- **ANALYSIS ONLY**: Do NOT implement fixes
|
||||
|
||||
### Read-Only MCP Tools (USE THESE)
|
||||
|
||||
| Native Tool | MCP Tool |
|
||||
|-------------|----------|
|
||||
| `read` | `manual-slop_read_file` |
|
||||
| `glob` | `manual-slop_search_files` or `manual-slop_list_directory` |
|
||||
| `grep` | `manual-slop_py_find_usages` |
|
||||
| - | `manual-slop_get_file_summary` (heuristic summary) |
|
||||
| - | `manual-slop_py_get_code_outline` (classes/functions with line ranges) |
|
||||
| - | `manual-slop_py_get_skeleton` (signatures + docstrings only) |
|
||||
| - | `manual-slop_py_get_definition` (specific function/class source) |
|
||||
| - | `manual-slop_get_git_diff` (file changes) |
|
||||
| - | `manual-slop_get_file_slice` (read specific line range) |
|
||||
|
||||
### Analysis Protocol
|
||||
|
||||
1. **Read Error Completely**: Understand the full error/test failure
|
||||
2. **Identify Affected Files**: Parse traceback for file:line references
|
||||
3. **Use Skeleton Tools**: For files >50 lines, use `manual-slop_py_get_skeleton` first
|
||||
4. **Announce**: "Analyzing: [error summary]"
|
||||
|
||||
### Structured Output Format
|
||||
|
||||
```
|
||||
## Error Analysis
|
||||
|
||||
### Summary
|
||||
[One-sentence description of the error]
|
||||
|
||||
### Root Cause
|
||||
[Detailed explanation of why the error occurred]
|
||||
|
||||
### Evidence
|
||||
[File:line references supporting the analysis]
|
||||
|
||||
### Impact
|
||||
[What functionality is affected]
|
||||
|
||||
### Recommendations
|
||||
[Suggested fixes or next steps - but DO NOT implement them]
|
||||
```
|
||||
|
||||
### Quality Checklist
|
||||
|
||||
- [ ] Analysis based on actual code/file content
|
||||
- [ ] Root cause is specific, not generic
|
||||
- [ ] Evidence includes file:line references
|
||||
- [ ] Recommendations are actionable but not implemented
|
||||
|
||||
### Blocking Protocol
|
||||
|
||||
If you cannot analyze the error:
|
||||
|
||||
1. Start response with `CANNOT ANALYZE:`
|
||||
2. Explain what information is missing
|
||||
3. List what would be needed to complete the analysis
|
||||
---description: Invoke Tier 4 QA Agent for error analysisagent: tier4-qa---$ARGUMENTS---## ContextYou are now acting as Tier 4 QA Agent.### Key Constraints- **STATELESS**: Context Amnesia ù each analysis starts fresh- **READ-ONLY**: Do NOT modify any files- **ANALYSIS ONLY**: Do NOT implement fixes### Read-Only MCP Tools (USE THESE)| Native Tool | MCP Tool ||-------------|----------|| `read` | `manual-slop_read_file` || `glob` | `manual-slop_search_files` or `manual-slop_list_directory` || `grep` | `manual-slop_py_find_usages` || - | `manual-slop_get_file_summary` (heuristic summary) || - | `manual-slop_py_get_code_outline` (classes/functions with line ranges) || - | `manual-slop_py_get_skeleton` (signatures + docstrings only) || - | `manual-slop_py_get_definition` (specific function/class source) || - | `manual-slop_get_git_diff` (file changes) || - | `manual-slop_get_file_slice` (read specific line range) |### Analysis Protocol1. **Read Error Completely**: Understand the full error/test failure2. **Identify Affected Files**: Parse traceback for file:line references3. **Use Skeleton Tools**: For files >50 lines, use `manual-slop_py_get_skeleton` first4. **Announce**: "Analyzing: [error summary]"### Structured Output Format```## Error Analysis### Summary[One-sentence description of the error]### Root Cause[Detailed explanation of why the error occurred]### Evidence[File:line references supporting the analysis]### Impact[What functionality is affected]### Recommendations[Suggested fixes or next steps - but DO NOT implement them]```### Quality Checklist- [ ] Analysis based on actual code/file content- [ ] Root cause is specific, not generic- [ ] Evidence includes file:line references- [ ] Recommendations are actionable but not implemented### Blocking ProtocolIf you cannot analyze the error:1. Start response with `CANNOT ANALYZE:`2. Explain what information is missing3. List what would be needed to complete the analysis
|
||||
Generated
+1
-380
File diff suppressed because one or more lines are too long
@@ -48,18 +48,18 @@ The 14 deep-dive guides under `docs/` (`guide_architecture.md`, `guide_ai_client
|
||||
|
||||
## Critical Anti-Patterns
|
||||
|
||||
- Do not read full files >50 lines without first using `py_get_skeleton` or `get_file_summary` to map the structure (this is navigation efficiency, not a "files should be small" stance)
|
||||
- Do not modify the tech stack without updating `conductor/tech-stack.md` first
|
||||
- Do not skip TDD - write failing tests before implementing functionality
|
||||
- Do not use `@pytest.mark.skip` as an excuse to AVOID fixing the underlying bug. Skip markers are documentation of known failures; the failure must be addressed with priority in-session when feasible. See `conductor/workflow.md` "Skip-Marker Policy" for the full policy and review checklist.
|
||||
- Do not batch commits - commit per-task for atomic rollback
|
||||
- Do not add comments to source code; documentation lives in `/docs`
|
||||
- `set_file_slice` IS valid for multi-line content. The agent must verify the exact byte offsets with `get_file_slice` first, copy the line text character-for-character (including whitespace and EOL), and check whether the edit changes a public contract (function signature, yield shape, return type) that other code depends on. See `conductor/edit_workflow.md` for the full contract.
|
||||
- Do not use `git restore` while a user is mid-conversation without first confirming the desired state
|
||||
- HARD BAN: `git restore`, `git checkout -- <file>`, `git reset` are FORBIDDEN without explicit user permission in the same message. They destroyed user in-progress src/* edits twice in one session (2026-06-07). If you think you need one, ASK FIRST.
|
||||
- HARD BAN: `git stash*` (any form: `git stash`, `git stash pop`, `git stash apply`, `git stash drop`, `git stash clear`) is FORBIDDEN. Stashing inverts the safety net of the working tree: a `git add .` then `git stash` then "fresh start" pattern is exactly how Tier 2 corrupted files in the 2026-06-27 `cruft_elimination_20260627` track. The user explicitly stated "I hate when people fuck with my commits" — stashing throws away the user's in-progress edits silently. If you think you need a stash, you don't — use a NEW BRANCH or a WORKTREE instead. Tier 2 sandbox enforces this via `conductor/tier2/opencode.json.fragment` bash deny rules.
|
||||
- **HARD BAN: Day estimates in track artifacts (Tier 1).** Do NOT include day / hour / minute estimates in spec.md, plan.md, metadata.json, or any other track artifact. Day estimates are inaccurate noise; Tier 2 capacity is bounded by attention, not time. Measure effort by **scope** (N files, M sites, N tasks). The user / Tier 2 agent decides the actual pacing. See `conductor/workflow.md` §"Tier 1 Track Initialization Rules" for the full rule, replacement patterns, and rationale. (Added 2026-06-16 per user feedback: "Day estimates are inaccurate. Tier-2s can only do so much in a single track and there is no way in hell its going to be 'DAYS'.")
|
||||
- **HARD BAN: Opaque types in non-boundary code (added 2026-06-25).** LLMs default to `dict[str, Any]`, `Any`, `Optional[T]`, `hasattr()` polymorphism, and `.get('field', default)` because that's idiomatic Python training data. **All of these are BANNED in non-boundary code.** Use typed `@dataclass(frozen=True, slots=True)` with explicit fields; use `Result[T]` + `NIL_T` sentinels instead of `Optional[T]`; use direct attribute access instead of `.get()`. The ONLY place `dict[str, Any]` is allowed is the literal wire boundary (TOML/JSON parse functions); 2-3 functions per file. See `conductor/product-guidelines.md` "Core Value", `conductor/code_styleguides/data_oriented_design.md` §8.5 (The Python Type Promotion Mandate), `conductor/code_styleguides/python.md` §17 (LLM Default Anti-Patterns), and `conductor/code_styleguides/type_aliases.md` for the canonical mandates. User direction 2026-06-25: "I want the closest thing to c11/odin/jai in a scripting language... metadata should not be a dict[str, any]."
|
||||
This is a thin index. For the full lists, see the canonical styleguides:
|
||||
- `conductor/code_styleguides/python.md` §"AI-Agent Specific Conventions" + §"Anti-Patterns (LLM Default Anti-Patterns)" — the full LLM anti-pattern list (navigation, no comments, no diagnostic noise, TDD, decorator-orphan, ast.parse, set_file_slice, etc.)
|
||||
- `conductor/code_styleguides/data_oriented_design.md` §8.5 — the Python Type Promotion Mandate (technical canonical for opaque types)
|
||||
- `conductor/edit_workflow.md` — the edit tool contract
|
||||
- `conductor/workflow.md` §"Known Pitfalls" + §"Skip-Marker Policy" — operational pitfalls
|
||||
|
||||
### The 4 canonical HARD BANs (in this file because they're project-wide)
|
||||
|
||||
- **HARD BAN: `git restore` / `git checkout -- <file>` / `git reset`** are FORBIDDEN without explicit user permission in the same message. They destroyed user in-progress src/* edits twice in one session (2026-06-07). If you think you need one, ASK FIRST.
|
||||
- **HARD BAN: `git stash*`** (any form: `git stash`, `git stash pop`, `git stash apply`, `git stash drop`, `git stash clear`) is FORBIDDEN. Stashing inverts the safety net of the working tree: a `git add .` then `git stash` then "fresh start" pattern is exactly how Tier 2 corrupted files in the 2026-06-27 `cruft_elimination_20260627` track. The user explicitly stated "I hate when people fuck with my commits" — stashing throws away the user's in-progress edits silently. If you think you need a stash, you don't — use a NEW BRANCH or a WORKTREE instead. Tier 2 sandbox enforces this via `conductor/tier2/opencode.json.fragment` bash deny rules.
|
||||
- **HARD BAN: Day / hour / minute estimates in track artifacts.** Do NOT include estimates in spec.md, plan.md, metadata.json, or any other track artifact. Measure effort by **scope** (N files, M sites, N tasks). The user / Tier 2 agent decides the actual pacing. See `conductor/workflow.md` §"Tier 1 Track Initialization Rules" for the full rule, replacement patterns, and rationale. (Added 2026-06-16 per user feedback: "Day estimates are inaccurate. Tier-2s can only do so much in a single track and there is no way in hell its going to be 'DAYS'.")
|
||||
- **HARD BAN: Opaque types in non-boundary code (added 2026-06-25).** `dict[str, Any]`, `Any`, `Optional[T]`, `hasattr()` for entity dispatch, `.get('field', default)` are BANNED. Use typed `@dataclass(frozen=True, slots=True)` + `Result[T]` + `NIL_T` sentinels + direct attribute access. The ONLY place `dict[str, Any]` is allowed is the literal wire boundary (TOML/JSON parse functions); 2-3 functions per file. See `conductor/code_styleguides/data_oriented_design.md` §8.5 (the canonical Python Type Promotion Mandate), `conductor/code_styleguides/python.md` §17, `conductor/code_styleguides/type_aliases.md` for the technical mandates. User direction 2026-06-25: "I want the closest thing to c11/odin/jai in a scripting language... metadata should not be a dict[str, any]."
|
||||
|
||||
## File Size and Naming Convention (HARD RULE — added 2026-06-11)
|
||||
|
||||
@@ -86,106 +86,30 @@ Rationale: the user is the only one who can authorize a new top-level namespace.
|
||||
|
||||
## Session-Learned Anti-Patterns (Added 2026-06-07)
|
||||
|
||||
These burned the most time in a recent startup_speedup session. The rules below are short because the rules above (and `conductor/edit_workflow.md`) are the source of truth.
|
||||
The canonical home for edit-tool lessons-learned is `conductor/edit_workflow.md` (the 9 rules for `manual-slop_edit_file` etc.). This section is a thin pointer.
|
||||
|
||||
### 1. ALWAYS use the proper edit tool, not a custom script
|
||||
|
||||
- For Python source edits, use `manual-slop_edit_file` with `old_string`/`new_string`. **Do NOT** write a standalone Python script that does file-level replacements.
|
||||
- Custom scripts fail silently on: wrong indent in `new_content`, wrong EOL (CRLF vs LF) in `old_string` searches, wrong exact-string match (whitespace drift).
|
||||
- When a script fails, debug the actual error message. Do not dismiss it and try a different approach.
|
||||
|
||||
### 2. The decorator-orphan pitfall
|
||||
|
||||
When inserting new methods **before an existing `@property` def**, your script will leave the `@property` decorator on the line above your new methods. The decorator then accidentally decorates YOUR new method (which is no longer a property, breaking any subsequent `@your_method.setter` calls). The file passes `ast.parse()` but blows up at import time.
|
||||
|
||||
The fix: anchor on the **def line that has the `@property` ABOVE it**, and replace the pair `@property\n def foo(...)` with `@property\n def your_new(...)\n ...\n def foo(...)` — keeping the decorator attached to its original method. Or anchor on a different non-decorated landmark (e.g. `self._init_actions()`).
|
||||
|
||||
### 3. `ast.parse()` "Syntax OK" is not enough
|
||||
|
||||
`py_check_syntax` only confirms `ast.parse()` succeeds. Semantic errors (wrong decorator targets, wrong class attribute, missing `self`, etc.) are NOT caught. After any multi-line edit, ALWAYS:
|
||||
- Import the module
|
||||
- Instantiate the class
|
||||
- Call the new method in the way it's expected to be called (e.g. `ctrl.foo_ts` vs `ctrl.foo_ts()` for properties vs methods)
|
||||
|
||||
### 4. The "I'll just check git status" trap (now a HARD BAN, see Critical list above)
|
||||
|
||||
If you suspect you might have lost work, the worst move is to run `git status` / `git restore` while a frantic user is watching. Pause, read the actual file, and admit what state you're in. The user knows their state better than you do. This trap has now caused irrecoverable data loss twice in one session — the ban is enforced above.
|
||||
|
||||
### 5. Small, verified edits beat big scripts
|
||||
|
||||
`conductor/edit_workflow.md` says it explicitly: 3-10 lines at a time, verify after each, repeat. If you find yourself writing a 200-line Python script to do an edit, you're doing it wrong. Use the MCP tools.
|
||||
- **ALWAYS use the proper edit tool, not a custom script** — see `conductor/edit_workflow.md` §1.
|
||||
- **The decorator-orphan pitfall** — see `conductor/edit_workflow.md` §6 (with the fix code).
|
||||
- **`ast.parse()` "Syntax OK" is not enough** — see `conductor/edit_workflow.md` §7.
|
||||
- **The "I'll just check git status" trap** — now a HARD BAN; see §"Critical Anti-Patterns" above.
|
||||
- **Small, verified edits beat big scripts** — see `conductor/edit_workflow.md` §1.
|
||||
|
||||
---
|
||||
|
||||
## Process Anti-Patterns (Added 2026-06-09)
|
||||
|
||||
These are the bad patterns the agents have been exhibiting that the user explicitly called out as dog-shit. The rules below are short. If you find yourself doing any of these, STOP and reread this section.
|
||||
The canonical home for these is `conductor/workflow.md` §"Process Anti-Patterns" (the 8 anti-patterns with full Symptom + Rule sections). This is a thin index:
|
||||
|
||||
### 1. The Deduction Loop (kill it)
|
||||
1. **The Deduction Loop (kill it)** — run a failing test at most 2 times, then predict + instrument + run once.
|
||||
2. **The Report-Instead-of-Fix Pattern (kill it)** — 5-10 sentence status report, not 200 lines.
|
||||
3. **The Scope-Creep Track-Doc Pattern (kill it)** — your output is the fix, not a 5-phase future track.
|
||||
4. **The Inherited-Cruft Pattern (kill it)** — ask the user first if the file is broken from a previous session.
|
||||
5. **No Diagnostic Noise in Production (kill it)** — diag to log file, not `src/*.py`.
|
||||
6. **The "I Am Not Going To Attempt Another Fix Without Your Direction" Surrender (kill it)** — surrender only after the 5-step check.
|
||||
7. **The Verbose-Commit-Message Pattern (kill it)** — 1-3 sentences, not 50 lines.
|
||||
8. **The "Isolated Pass" Verification Fallacy (kill it)** — for `live_gui` tests, batch run is the only verification that matters.
|
||||
|
||||
**Symptom:** Run test → fail → read log → form hypothesis → run again → fail differently → add diag → run again → fail again → loop. You end up running the same test 4+ times in one session, each run reading partial log output.
|
||||
|
||||
**Rule:** You are allowed to run a failing test at most **2 times** in a single investigation. After the 2nd failure, STOP running the test. Read the relevant source code (`get_file_slice` or `py_get_skeleton`), predict the failure mode from the code, and instrument ALL the relevant state in one pass before the next run. If the test still fails after 1 instrumented run, report to the user — do not loop.
|
||||
|
||||
**Worst case captured upfront.** Before running the test, ask: "what is the worst-case information I will need if this fails?" Add the diag for that, then run. The diag lines themselves are wasteful in production — see "No Diagnostic Noise in Production" below.
|
||||
|
||||
### 2. The Report-Instead-of-Fix Pattern (kill it)
|
||||
|
||||
**Symptom:** You can't fix the bug. You write a 200-line status report explaining why you can't fix it. The report contains "What I tried this session", "What I am NOT going to do", "What you can do", and "Files changed in this session (cumulative)." The report is a confession, not a fix.
|
||||
|
||||
**Rule:** A status report is allowed only when:
|
||||
- You have actually tried the fix and it failed with evidence, OR
|
||||
- You are blocked on a decision the user must make.
|
||||
|
||||
A status report is NOT allowed when:
|
||||
- You are avoiding a hard problem by writing prose about it.
|
||||
- The user asked for a fix and you have not yet tried.
|
||||
- The "what you can do" section is a list of options to defer to the user instead of picking the best one and doing it.
|
||||
|
||||
A good status report is 5-10 sentences, not 200 lines.
|
||||
|
||||
### 3. The Scope-Creep Track-Doc Pattern (kill it)
|
||||
|
||||
**Symptom:** The user asks for a 1-line fix. You write a 5-phase "future track" spec with 140 lines of scope, audit findings, recommendations, and "out of scope" sections. The track doc is now larger than the fix it was meant to scope.
|
||||
|
||||
**Rule:** If the user asks for a fix, your output is the fix. A track doc is only appropriate when the fix is multi-day work that requires a plan. If the fix is < 100 lines, it does not get a track. If the fix would touch more than 5 files, it MIGHT get a track — but ask first.
|
||||
|
||||
### 4. The Inherited-Cruft Pattern (kill it)
|
||||
|
||||
**Symptom:** The previous agent left a half-finished refactor in the working tree. The file is broken. You try to fix it and make it worse. You try again. You make it worse. The file stays broken for 3 days.
|
||||
|
||||
**Rule:** If the file is already in a broken state from a previous session, the FIRST thing you do is ask the user: "this file is in a broken state from a previous agent. do you want me to (a) revert the working tree and start from a clean baseline, (b) finish the previous agent's intent, or (c) abandon the work entirely?" You do not start by "trying to fix" the broken file. The user's answer determines the work, not your assumption.
|
||||
|
||||
### 5. No Diagnostic Noise in Production (kill it)
|
||||
|
||||
**Symptom:** You add `sys.stderr.write(f"[RAG_DIAG] ...)")` to `src/rag_engine.py` and `src/app_controller.py` to debug a test failure. The diag lines help. You "revert everything" but leave the 4-8 diag lines in the working tree uncommitted. The next agent runs `git status`, sees the diag lines, and either commits them by accident or spends 10 minutes cleaning them up.
|
||||
|
||||
**Rule:** Diagnostic stderr goes to a log file (`tests/artifacts/<test_name>.diag.log`) or to a temporary diagnostic script (`/tmp/diag_rag.py`), NOT to `src/*.py`. If you absolutely must instrument a production function for a single test run, the diag lines are part of the same atomic commit as the fix — they do not live uncommitted in the working tree. If you "revert everything," that means the diag lines are also reverted.
|
||||
|
||||
### 6. The "I Am Not Going To Attempt Another Fix Without Your Direction" Surrender (kill it)
|
||||
|
||||
**Symptom:** You've tried 3 things. None worked. You write: "I am not going to attempt another fix without your direction." Then you wait for the user to tell you what to do.
|
||||
|
||||
**Rule:** This is correct ONLY if you have already done the things below:
|
||||
- Read the actual source code, not from memory
|
||||
- Predicted the failure mode from the code
|
||||
- Instrumented the relevant state in one pass
|
||||
- Run the test once with instrumentation
|
||||
- Captured the full output, not partial output
|
||||
|
||||
If you have done all 5 and are still stuck, surrendering is fine. If you have not, you are surrendering too early. The user does not want to be your strategist; the user wants the agent to make progress.
|
||||
|
||||
### 7. The Verbose-Commit-Message Pattern (kill it)
|
||||
|
||||
**Symptom:** Your commit message is 50 lines. It contains the root cause analysis, the alternatives you considered, the side effects you considered, the cross-references, the "what this doesn't fix", the "what to verify", and a personal essay. The commit message is longer than the diff it describes.
|
||||
|
||||
**Rule:** A commit message is a 1-3 sentence summary. The body is for non-obvious "why" details, not for re-stating what the diff shows. If your commit message is longer than 15 lines, you are writing a report, not a commit message. Save the report for `docs/reports/`.
|
||||
|
||||
### 8. The "Isolated Pass" Verification Fallacy (kill it)
|
||||
|
||||
**Symptom:** You run the test in isolation. It passes. You commit. The test fails in batch. You didn't notice because you never ran the batch.
|
||||
|
||||
**Rule:** For any `live_gui` test or any test that depends on shared subprocess state, the **only verification that matters is the batch run**. A test that passes in isolation but fails in batch is failing — it's just that the failure is masked by isolation. Per the existing `Live_gui Test Fragility` rule in `conductor/workflow.md`: "Bisect failures by running the test both in the full suite and in isolation to distinguish 'test needs work' from 'real app bug'." If you only ever run in isolation, you cannot tell the difference.
|
||||
See `conductor/workflow.md` §"Process Anti-Patterns" for the full Symptom + Rule sections for each.
|
||||
|
||||
## Compaction Recovery
|
||||
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 8040: character maps to <undefined>
|
||||
[DEBUG] Saving config. Theme: {'palette': '10x Dark', 'font_path': 'fonts/MapleMono-Regular.ttf', 'font_size': 20.0, 'scale': 1.0, 'transparency': 1.0, 'child_transparency': 1.0, 'tone_mapping': {'solarized_light': {'brightness': 0.6899999976158142, 'contrast': 0.8600000143051147, 'gamma': 0.7699999809265137}, 'gray_variations': {'brightness': 0.7699999809265137, 'contrast': 0.7200000286102295, 'gamma': 0.6899999976158142}, 'moss': {'brightness': 0.7699999809265137, 'contrast': 0.8700000047683716, 'gamma': 1.0}, 'Solarized Light': {'brightness': 0.550000011920929, 'contrast': 0.7300000190734863, 'gamma': 0.7099999785423279}, 'Binks': {'brightness': 0.47999998927116394, 'contrast': 0.8399999737739563, 'gamma': 2.2100000381469727}}}
|
||||
Exception in thread Thread-506 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
Exception in thread Thread-511 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
Exception in thread Thread-516 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
Exception in thread Thread-521 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
Exception in thread Thread-526 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
[DEBUG] Saving config. Theme: {'palette': '10x Dark', 'font_path': 'fonts/MapleMono-Regular.ttf', 'font_size': 20.0, 'scale': 1.0, 'transparency': 1.0, 'child_transparency': 1.0, 'tone_mapping': {'solarized_light': {'brightness': 0.6899999976158142, 'contrast': 0.8600000143051147, 'gamma': 0.7699999809265137}, 'gray_variations': {'brightness': 0.7699999809265137, 'contrast': 0.7200000286102295, 'gamma': 0.6899999976158142}, 'moss': {'brightness': 0.7699999809265137, 'contrast': 0.8700000047683716, 'gamma': 1.0}, 'Solarized Light': {'brightness': 0.550000011920929, 'contrast': 0.7300000190734863, 'gamma': 0.7099999785423279}, 'Binks': {'brightness': 0.47999998927116394, 'contrast': 0.8399999737739563, 'gamma': 2.2100000381469727}}}
|
||||
[DEBUG] Saving config. Theme: {'palette': '10x Dark', 'font_path': 'fonts/MapleMono-Regular.ttf', 'font_size': 20.0, 'scale': 1.0, 'transparency': 1.0, 'child_transparency': 1.0, 'tone_mapping': {'solarized_light': {'brightness': 0.6899999976158142, 'contrast': 0.8600000143051147, 'gamma': 0.7699999809265137}, 'gray_variations': {'brightness': 0.7699999809265137, 'contrast': 0.7200000286102295, 'gamma': 0.6899999976158142}, 'moss': {'brightness': 0.7699999809265137, 'contrast': 0.8700000047683716, 'gamma': 1.0}, 'Solarized Light': {'brightness': 0.550000011920929, 'contrast': 0.7300000190734863, 'gamma': 0.7099999785423279}, 'Binks': {'brightness': 0.47999998927116394, 'contrast': 0.8399999737739563, 'gamma': 2.2100000381469727}}}
|
||||
Exception in thread Thread-540 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 527: character maps to <undefined>
|
||||
Exception in thread Thread-545 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
Exception in thread Thread-550 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 7874: character maps to <undefined>
|
||||
Exception in thread Thread-555 (_readerthread):
|
||||
Traceback (most recent call last):
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 1045, in _bootstrap_inner
|
||||
self.run()
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\threading.py", line 982, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\subprocess.py", line 1597, in _readerthread
|
||||
buffer.append(fh.read())
|
||||
^^^^^^^^^
|
||||
File "C:\Users\Ed\scoop\apps\python\current\Lib\encodings\cp1252.py", line 23, in decode
|
||||
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 8040: character maps to <undefined>
|
||||
[DEBUG] Saving config. Theme: {'palette': '10x Dark', 'font_path': 'fonts/MapleMono-Regular.ttf', 'font_size': 20.0, 'scale': 1.0, 'transparency': 1.0, 'child_transparency': 1.0, 'tone_mapping': {'solarized_light': {'brightness': 0.6899999976158142, 'contrast': 0.8600000143051147, 'gamma': 0.7699999809265137}, 'gray_variations': {'brightness': 0.7699999809265137, 'contrast': 0.7200000286102295, 'gamma': 0.6899999976158142}, 'moss': {'brightness': 0.7699999809265137, 'contrast': 0.8700000047683716, 'gamma': 1.0}, 'Solarized Light': {'brightness': 0.550000011920929, 'contrast': 0.7300000190734863, 'gamma': 0.7099999785423279}, 'Binks': {'brightness': 0.47999998927116394, 'contrast': 0.8399999737739563, 'gamma': 2.2100000381469727}}}
|
||||
@@ -0,0 +1 @@
|
||||
34
|
||||
@@ -0,0 +1,207 @@
|
||||
# Track Specification: Agent Directives Consolidation
|
||||
|
||||
**Status:** Spec approved 2026-07-05.
|
||||
**Initialized:** 2026-07-05
|
||||
**Owner:** Tier 1 Orchestrator
|
||||
**Priority:** Medium-High (user's "very good fallback" before new directive system adoption)
|
||||
**Type:** Documentation refactor (no `src/`, no tests, no agent-directive file modifications outside the hard-coded `AGENTS.md` + `conductor/*.md` + `code_styleguides/*.md`)
|
||||
|
||||
---
|
||||
|
||||
## 0. Overview
|
||||
|
||||
The project has hard-coded directive markdown across 3 locations:
|
||||
1. `AGENTS.md` (root, 200 lines) — project-level rules
|
||||
2. `conductor/*.md` (`workflow.md`, `edit_workflow.md`, `product-guidelines.md`, etc.) — operational + style rules
|
||||
3. `conductor/code_styleguides/*.md` (14 files) — per-domain styleguides
|
||||
|
||||
Many directives are duplicated across these files. Goal: **reduce duplicates by establishing one canonical home per directive, with thin pointers from elsewhere.** The result is a well-organized fallback for the new `conductor/directives/` system (which is WIP per user).
|
||||
|
||||
**NOT in scope** (per user direction):
|
||||
- `.opencode/agents/*.md` role prompts (separate concern; user explicitly excluded MMA)
|
||||
- `.opencode/agents/*.warm.md` (new directive system, WIP)
|
||||
- `conductor/directives/` (WIP, excluded)
|
||||
- `conductor/tier2/agents/tier2-autonomous.md` (active Tier 2 sandbox; kept as-is)
|
||||
|
||||
---
|
||||
|
||||
## 1. Current State Audit (as of commit `f63769ac^`)
|
||||
|
||||
### 1.1 Already Implemented (DO NOT re-implement)
|
||||
|
||||
| What | Where | Notes |
|
||||
|---|---|---|
|
||||
| 14 code_styleguides with single-source-of-truth | `conductor/code_styleguides/*.md` | Each is the canonical for its domain; cross-references work |
|
||||
| AGENTS.md as project-root index | `AGENTS.md` | Has 13 critical anti-patterns + 5 session-learned + 8 process anti-patterns |
|
||||
| Operational workflow | `conductor/workflow.md` | Has Session Start Checklist, Task Workflow, Process Anti-Patterns (abridged) |
|
||||
| Edit tool contract | `conductor/edit_workflow.md` | Has the 9 rules for `manual-slop_edit_file` etc. |
|
||||
| Core Value (C11/Odin/Jai) | `conductor/product-guidelines.md` | The project root canonical |
|
||||
| Python Type Promotion Mandate §8.5 | `conductor/code_styleguides/data_oriented_design.md` | The technical canonical |
|
||||
|
||||
### 1.2 Gaps to Fill (This Track's Scope)
|
||||
|
||||
The audit (per the prior review) identified these redundancies in the **hard-coded docs** (AGENTS.md + conductor/*.md + code_styleguides/*.md):
|
||||
|
||||
| # | Directive | Duplicated in | Canonical home |
|
||||
|---|---|---|---|
|
||||
| 1 | `ast.parse()` "Syntax OK" is not enough | AGENTS.md §103-108 + conductor/edit_workflow.md §7 | conductor/edit_workflow.md §7 (longer, has examples) |
|
||||
| 2 | Decorator-orphan pitfall | AGENTS.md §2 + conductor/edit_workflow.md §6 | conductor/edit_workflow.md §6 (longer, has fix code) |
|
||||
| 3 | No Diagnostic Noise in Production Code | AGENTS.md §84 + conductor/edit_workflow.md §9 + conductor/code_styleguides/python.md §8 last bullet | conductor/code_styleguides/python.md §8 (last bullet) |
|
||||
| 4 | Process Anti-Patterns (8 list) | AGENTS.md §120-189 + conductor/workflow.md §534-548 | AGENTS.md (canonical, with full rationale) |
|
||||
| 5 | 1-Space Indentation | conductor/code_styleguides/python.md §1 + conductor/product-guidelines.md "AI-Optimized Compact Style" + conductor/edit_workflow.md §5 + conductor/workflow.md §"Code Style" | conductor/code_styleguides/python.md §1 (most detailed) |
|
||||
| 6 | No comments in source code | AGENTS.md §56 + conductor/product-guidelines.md "AI-Optimized Compact Style" + conductor/code_styleguides/python.md §8 first bullet | conductor/code_styleguides/python.md §8 first bullet |
|
||||
| 7 | HARD BAN list (git push/checkout/restore/reset/stash) | AGENTS.md §58-60 + conductor/workflow.md "Known Pitfalls" + conductor/edit_workflow.md §2 (partial) + conductor/tier2/agents/tier2-autonomous.md (out of scope) | AGENTS.md §"Critical Anti-Patterns" (full rationale) |
|
||||
| 8 | TDD (write failing test first) | AGENTS.md §53 + conductor/workflow.md + conductor/product-guidelines.md + conductor/tier2/agents/tier2-autonomous.md (out of scope) | AGENTS.md §"Critical Anti-Patterns" §3 (1-line) + conductor/code_styleguides/python.md (full TDD methodology) |
|
||||
| 9 | Skip-marker is documentation | AGENTS.md §54-55 + conductor/workflow.md "Skip-Marker Policy" | conductor/workflow.md "Skip-Marker Policy" (full policy) |
|
||||
| 10 | Python Type Promotion Mandate | AGENTS.md §62 + conductor/product-guidelines.md "Core Value" + conductor/code_styleguides/data_oriented_design.md §8.5 + conductor/code_styleguides/python.md §17 + conductor/code_styleguides/type_aliases.md | conductor/code_styleguides/data_oriented_design.md §8.5 (technical canonical) |
|
||||
| 11 | Per-Task Decision Protocol | conductor/workflow.md + conductor/tier2/agents/tier2-autonomous.md (out of scope) | conductor/workflow.md (abridged) |
|
||||
|
||||
### 1.3 Pre-Existing Conditions
|
||||
|
||||
- AGENTS.md + conductor/*.md + code_styleguides/*.md all live in git; user is the primary editor
|
||||
- The hard-coded docs are referenced from `manual_slop.toml [agent].context_files` (per `docs/AGENTS.md`) for the Application's RAG; the canonical styleguide is `conductor/code_styleguides/data_oriented_design.md` "one source of truth for both harnesses" (per AGENTS.md §"Canonical Operating Rules")
|
||||
- The 8 Process Anti-Patterns in AGENTS.md and conductor/workflow.md are NOT exactly identical — workflow.md has abridged 1-line summaries with a "see AGENTS.md for full rationale" pointer. This is designed layering, not pure redundancy.
|
||||
- The 5 Session-Learned Anti-Patterns in AGENTS.md vs the 9 rules in conductor/edit_workflow.md have significant overlap but distinct content. The edit_workflow.md versions are practical examples; the AGENTS.md versions are lessons-learned.
|
||||
|
||||
---
|
||||
|
||||
## 2. Goals (Priority Order)
|
||||
|
||||
| Priority | Goal | Rationale |
|
||||
|---|---|---|
|
||||
| **A (primary)** | For each duplicated directive, identify the canonical home + replace the OTHER files' content with thin pointers to the canonical home. | User's "reduce the duplicates" goal. |
|
||||
| **B (process)** | Keep AGENTS.md as the project-root index but reduce the §"Critical Anti-Patterns" + §"Process Anti-Patterns" sections to bare essentials. | AGENTS.md is read on session start by humans; full rationale is documented in code_styleguides/*.md. |
|
||||
| **C (process)** | Keep conductor/code_styleguides/*.md as the technical canonical; ensure cross-references work cleanly. | Already well-organized; verify after changes. |
|
||||
| **D (process)** | All changes are atomic per `conductor/workflow.md` §"Task Workflow" step 9; git notes attached. | Per project convention. |
|
||||
|
||||
---
|
||||
|
||||
## 3. Functional Requirements
|
||||
|
||||
### 3.1 AGENTS.md reductions
|
||||
|
||||
Reduce the following sections to bare essentials (1-2 lines each) with a pointer to the canonical home:
|
||||
|
||||
- §"Critical Anti-Patterns" → reduce from 15 items to: 1-line reference to `conductor/code_styleguides/python.md` §"Anti-Patterns (LLM Default Anti-Patterns)" + the 3 critical hard bans (git restore, git stash*, day estimates) inline as 1-liners + the file size/naming rule inline as 1-liner
|
||||
- §"Session-Learned Anti-Patterns" → reduce from 5 items to: 1-line reference to `conductor/edit_workflow.md` for the edit-tool-specific rules (decorator-orphan, ast.parse, small-edits)
|
||||
- §"Process Anti-Patterns" → reduce from 8 items to: 1-line summary list + pointer to the canonical home in `conductor/workflow.md` (which becomes the canonical for these)
|
||||
- Keep §"File Size and Naming Convention" (it's the only place this is documented in detail; canonical)
|
||||
- Keep §"Compaction Recovery" (canonical)
|
||||
|
||||
### 3.2 conductor/workflow.md reductions
|
||||
|
||||
- §"Process Anti-Patterns (Added 2026-06-09)" → becomes the CANONICAL home for process anti-patterns (was abridged summary; promote to full content). Currently 14 lines of abridged content; expand to full versions matching AGENTS.md's 70+ lines. AGENTS.md's version becomes the thin pointer.
|
||||
- §"Known Pitfalls" → reduce git ban list to a 1-line pointer to AGENTS.md (the canonical)
|
||||
|
||||
### 3.3 conductor/edit_workflow.md reductions
|
||||
|
||||
- §6 "The Decorator-Orphan Pitfall" → keep the longer canonical version (the AGENTS.md version becomes a 1-line pointer)
|
||||
- §7 "`ast.parse()` Is Not Enough" → keep the longer canonical version (the AGENTS.md version becomes a 1-line pointer)
|
||||
- §9 "No Diagnostic Noise in Production Code" → reduce to a pointer to `conductor/code_styleguides/python.md` §8 (the canonical location)
|
||||
|
||||
### 3.4 conductor/product-guidelines.md reductions
|
||||
|
||||
- §"AI-Optimized Compact Style" → "Indentation" subsection: reduce to a 1-line pointer to `conductor/code_styleguides/python.md` §1 (the canonical)
|
||||
- §"Data-Oriented Error Handling" → reduce to a 1-line pointer to `conductor/code_styleguides/error_handling.md` (the canonical)
|
||||
- §"Data Structure Conventions" → reduce to a 1-line pointer to `conductor/code_styleguides/type_aliases.md` (the canonical)
|
||||
|
||||
### 3.5 conductor/code_styleguides/*.md verification
|
||||
|
||||
- No content changes; verify cross-references after the project file reductions work cleanly
|
||||
- Ensure `python.md` §"AI-Agent Specific Conventions" + §"Anti-Patterns" (LLM Default Anti-Patterns) sections are still comprehensive enough to be the canonical home
|
||||
|
||||
---
|
||||
|
||||
## 4. Non-Functional Requirements
|
||||
|
||||
- All changes are atomic per `conductor/workflow.md` §"Task Workflow" step 9
|
||||
- All commits have git notes attached
|
||||
- No `src/*.py` changes
|
||||
- No `.opencode/` changes
|
||||
- No `conductor/directives/` changes
|
||||
- No `conductor/tier2/agents/tier2-autonomous.md` changes (active sandbox; out of scope per user)
|
||||
- 1-space indentation (per `conductor/code_styleguides/python.md` §1) applies to any Python changes (none expected)
|
||||
- "No comments in body" rule (per `conductor/code_styleguides/python.md` §8) applies
|
||||
|
||||
---
|
||||
|
||||
## 5. Architecture Reference
|
||||
|
||||
- **`AGENTS.md`** (root) — project-root agent-facing rules; "Critical Anti-Patterns" + "Process Anti-Patterns" + "File Size and Naming Convention" + "Compaction Recovery" sections
|
||||
- **`conductor/workflow.md`** — operational workflow; "Task Workflow" + "Process Anti-Patterns" (becomes canonical) + "Per-Task Decision Protocol" + "Phase Completion Verification and Checkpointing Protocol"
|
||||
- **`conductor/edit_workflow.md`** — edit tool contract; "Decorator-Orphan Pitfall" (canonical) + "`ast.parse()` Is Not Enough" (canonical)
|
||||
- **`conductor/product-guidelines.md`** — "Core Value" + "UX & UI Principles" + "Code Standards & Architecture" + "Phase 5: Heavy Curation" + "AI-Optimized Compact Style" (with pointer to python.md) + "Data-Oriented Error Handling" (with pointer to error_handling.md)
|
||||
- **`conductor/code_styleguides/python.md`** §1 (1-space indent canonical) + §8 (no comments, no diagnostic noise canonical)
|
||||
- **`conductor/code_styleguides/data_oriented_design.md`** §8.5 (Python Type Promotion Mandate canonical)
|
||||
- **`conductor/code_styleguides/error_handling.md`** (Result[T] + NIL_T canonical)
|
||||
- **`conductor/code_styleguides/type_aliases.md`** (Metadata boundary type canonical)
|
||||
- **`docs/AGENTS.md`** — the agent-facing mirror of `docs/Readme.md`; out of scope (no changes needed)
|
||||
|
||||
---
|
||||
|
||||
## 6. Implementation Phases (4 phases, ~10 atomic commits)
|
||||
|
||||
| # | Phase | Scope | Commits |
|
||||
|---|---|---|---|
|
||||
| 1 | **AGENTS.md reductions** | Reduce §"Critical Anti-Patterns" + §"Session-Learned Anti-Patterns" + §"Process Anti-Patterns" to thin pointers | 3 (1 per section) |
|
||||
| 2 | **conductor/workflow.md reductions + promotion** | Reduce §"Known Pitfalls" to pointer; promote §"Process Anti-Patterns" to canonical (full content) | 2 (1 per section) |
|
||||
| 3 | **conductor/edit_workflow.md + product-guidelines.md reductions** | Reduce edit_workflow.md §9 to pointer; reduce product-guidelines.md subsections to pointers | 4 (1 per file, possibly 2 for product-guidelines.md) |
|
||||
| 4 | **Self-review + finalize** | Verify cross-references; ensure no broken links; update tracks.md + state.toml | 2 (state + tracks.md) |
|
||||
|
||||
**Total commits:** ~11 atomic commits with git notes.
|
||||
|
||||
---
|
||||
|
||||
## 7. Verification Criteria
|
||||
|
||||
The track is "done" when all of the following are true:
|
||||
|
||||
- [ ] `AGENTS.md` is reduced to ~80-100 lines (from 202); the §"Critical Anti-Patterns" + §"Session-Learned Anti-Patterns" + §"Process Anti-Patterns" sections are thin pointers to canonical homes
|
||||
- [ ] `conductor/workflow.md` §"Process Anti-Patterns" is the canonical home (full content); the §"Known Pitfalls" hard-ban section is a thin pointer to AGENTS.md
|
||||
- [ ] `conductor/edit_workflow.md` §9 is a thin pointer to `conductor/code_styleguides/python.md` §8
|
||||
- [ ] `conductor/product-guidelines.md` "Indentation", "Data-Oriented Error Handling", "Data Structure Conventions" subsections are thin pointers to their canonical styleguides
|
||||
- [ ] `conductor/code_styleguides/*.md` files have no changes (verified as canonical)
|
||||
- [ ] All cross-references resolve to actual files (no broken links)
|
||||
- [ ] `state.toml` final state is `current_phase=4` and `status="active"`
|
||||
- [ ] `tracks.md` row marked Completed
|
||||
- [ ] No `src/`, `.opencode/`, `conductor/directives/`, or `conductor/tier2/` changes
|
||||
- [ ] All commits are atomic with git notes attached
|
||||
|
||||
---
|
||||
|
||||
## 8. Risks & Mitigations
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
|---|---|---|
|
||||
| Cross-reference text drift (e.g., "see python.md §8" but the section number changes) | Low | Verify each cross-reference after the change; use section titles not numbers where possible |
|
||||
| Reducing AGENTS.md too aggressively loses information | Medium | Each reduction is a "thin pointer + 1-line summary + link to canonical"; the summary preserves the gist |
|
||||
| conductor/workflow.md §"Process Anti-Patterns" promotion creates 2x duplication with AGENTS.md (now both have full content) | Low | The promotion replaces AGENTS.md's full content with a pointer, so net duplication is reduced |
|
||||
| The "fallback" use case (new directive system not used) leaves agents under-informed | Low | The thin pointers in AGENTS.md are sufficient for the LLM to navigate to the canonical home; the canonical homes have full content |
|
||||
|
||||
---
|
||||
|
||||
## 9. Out of Scope (Explicit)
|
||||
|
||||
1. **`.opencode/agents/*.md` role prompts** — user explicitly excluded ("ignore the mma bullshit in ./opencode"); separate concern
|
||||
2. **`.opencode/agents/*.warm.md`** — new directive system, WIP per user
|
||||
3. **`conductor/directives/`** — new directive system, WIP per user
|
||||
4. **`conductor/tier2/agents/tier2-autonomous.md`** — active Tier 2 sandbox; kept as-is
|
||||
5. **`conductor/code_styleguides/*.md` content changes** — verified as canonical, not modified
|
||||
6. **The role prompts' content** — separate from the hard-coded directive markdown concern
|
||||
|
||||
---
|
||||
|
||||
## 10. See Also
|
||||
|
||||
- `AGENTS.md` (root) — current state of the project-root rules
|
||||
- `conductor/workflow.md` §"Process Anti-Patterns" — current state of the operational workflow rules
|
||||
- `conductor/edit_workflow.md` — current state of the edit tool contract
|
||||
- `conductor/product-guidelines.md` §"Core Value" — current state of the project Core Value
|
||||
- `conductor/code_styleguides/*.md` (14 files) — current state of the per-domain styleguides
|
||||
- `docs/AGENTS.md` §"Convention Enforcement" — out-of-scope mirror with the 4 enforcement mechanisms
|
||||
|
||||
---
|
||||
|
||||
## 11. Track History
|
||||
|
||||
- 2026-07-05 — Initialized (spec + plan + state + tracks.md) per user directive "Lets reduce the duplicates and put them in proper places... Then localize important directives from there" + "The goal for me is to have this 'hard-coded written' directive markdown be in good shape before I start attempting to use the new directive system in the near future while having a very good fallback."
|
||||
@@ -0,0 +1,63 @@
|
||||
# Track state for agent_directives_consolidation_20260705
|
||||
# Updated by Tier 1 Orchestrator as phases complete
|
||||
|
||||
[meta]
|
||||
track_id = "agent_directives_consolidation_20260705"
|
||||
name = "Agent Directives Consolidation (Hard-coded markdown fallback for the new directive system)"
|
||||
status = "active"
|
||||
current_phase = 4 # All phases complete; ready for archive per chronology convention
|
||||
last_updated = "2026-07-05"
|
||||
|
||||
[blocked_by]
|
||||
# No external blockers; project documentation is always available to update.
|
||||
|
||||
[blocks]
|
||||
# No followup tracks blocked on this one.
|
||||
|
||||
[phases]
|
||||
phase_1 = { status = "completed", checkpointsha = "2d2d88fb", name = "AGENTS.md reductions (Critical + Session-Learned + Process anti-patterns)" }
|
||||
phase_2 = { status = "completed", checkpointsha = "fa0ba730", name = "conductor/workflow.md reductions + Process Anti-Patterns promotion" }
|
||||
phase_3 = { status = "completed", checkpointsha = "4c3f9892", name = "conductor/edit_workflow.md + product-guidelines.md reductions" }
|
||||
phase_4 = { status = "completed", checkpointsha = "PENDING", name = "Self-review + finalize" }
|
||||
|
||||
[tasks]
|
||||
# Phase 1
|
||||
t1_1 = { status = "completed", commit_sha = "2d2d88fb", description = "Reduce AGENTS.md §\"Critical Anti-Patterns\" to thin pointers" }
|
||||
t1_2 = { status = "completed", commit_sha = "8a560cc6", description = "Reduce AGENTS.md §\"Session-Learned Anti-Patterns\" to thin pointer" }
|
||||
t1_3 = { status = "completed", commit_sha = "3470629e", description = "Reduce AGENTS.md §\"Process Anti-Patterns\" to thin pointer" }
|
||||
|
||||
# Phase 2
|
||||
t2_1 = { status = "completed", commit_sha = "e9ae8cc4", description = "Reduce conductor/workflow.md §\"Known Pitfalls\" hard-ban list to pointer" }
|
||||
t2_2 = { status = "completed", commit_sha = "fa0ba730", description = "Promote conductor/workflow.md §\"Process Anti-Patterns\" to canonical (full content)" }
|
||||
|
||||
# Phase 3
|
||||
t3_1 = { status = "completed", commit_sha = "3a47dede", description = "Reduce conductor/edit_workflow.md §9 \"No Diagnostic Noise\" to pointer" }
|
||||
t3_2 = { status = "completed", commit_sha = "8ac3385a", description = "Reduce conductor/product-guidelines.md \"Indentation\" to pointer" }
|
||||
t3_3 = { status = "completed", commit_sha = "8996a3c9", description = "Reduce conductor/product-guidelines.md \"Data-Oriented Error Handling\" to pointer" }
|
||||
t3_4 = { status = "completed", commit_sha = "4c3f9892", description = "Reduce conductor/product-guidelines.md \"Data Structure Conventions\" to pointer" }
|
||||
|
||||
# Phase 4
|
||||
t4_1 = { status = "completed", commit_sha = "PENDING", description = "Verify cross-references resolve; ensure no broken links" }
|
||||
t4_2 = { status = "in_progress", commit_sha = "PENDING", description = "Update state.toml to current_phase=4 + all tasks completed" }
|
||||
t4_3 = { status = "pending", commit_sha = "PENDING", description = "Update tracks.md row to Completed" }
|
||||
|
||||
[verification]
|
||||
agents_md_reduced_to_80_to_100_lines = true # 87 lines (down from 202, 57% reduction)
|
||||
workflow_md_process_anti_patterns_canonical = true # promoted to full content (80 lines)
|
||||
edit_workflow_md_section_9_thinned = true # 1 line (down from 9)
|
||||
product_guidelines_md_subsections_thinned = true # 3 sections reduced to pointers
|
||||
code_styleguides_unchanged = true # no changes
|
||||
cross_references_resolve = true # all 5 target files exist
|
||||
state_toml_current_phase_4 = false # in progress
|
||||
tracks_md_row_marked_completed = false # pending
|
||||
no_src_changes = true # not in scope
|
||||
no_opencode_changes = true # not in scope per user
|
||||
no_directives_changes = true # not in scope per user
|
||||
all_commits_atomic_with_git_notes = true # 9 atomic commits with git notes
|
||||
|
||||
[user_directives_logged]
|
||||
goal = "Per user 2026-07-05 'The goal for me is to have this hard-coded written directive markdown be in good shape before I start attempting to use the new directive system in the near future while having a very good fallback.'"
|
||||
out_of_scope_opencode = "Per user 'ignore the mma bullshit in ./opencode' — .opencode/agents/*.md role prompts excluded."
|
||||
out_of_scope_directives = "Per user 'Ignore the new directive system as thats still wip' — conductor/directives/ excluded."
|
||||
out_of_scope_tier2 = "Per user scope decision — conductor/tier2/agents/tier2-autonomous.md active sandbox kept as-is."
|
||||
reduce_then_localize = "Per user 'Lets reduce the duplicates and put them in proper places. ... Then localize important directives from there.'"
|
||||
+8
-3
@@ -4,9 +4,9 @@
|
||||
[meta]
|
||||
track_id = "chronology_20260619"
|
||||
name = "Conductor Chronology"
|
||||
status = "active" # remains "active" until Phase 10 user sign-off recorded
|
||||
current_phase = 10 # Phase 10 in progress; user sign-off pending
|
||||
last_updated = "2026-06-20"
|
||||
status = "superseded" # superseded by chronology_v2_20260701 per user directive 2026-07-01
|
||||
current_phase = 10 # Phase 10 sign-off never recorded; track closed as superseded
|
||||
last_updated = "2026-07-01"
|
||||
|
||||
[blocked_by]
|
||||
# Independent track. No blockers.
|
||||
@@ -83,3 +83,8 @@ helper_script_approved = "Per user 2026-06-19: helper script may be used, but is
|
||||
manual_maintenance = "Per user 2026-06-19: ongoing workflow is hand-edited (like tracks.md). The helper script is one-shot only."
|
||||
no_day_estimates = "Per conductor/workflow.md Tier 1 Track Initialization Rules (added 2026-06-16). Scope measured in files/sites only."
|
||||
date_source = "Per FR1: track slug date wins. First-commit date is the fallback when slug is missing."
|
||||
|
||||
[supersession]
|
||||
superseded_by = "chronology_v2_20260701"
|
||||
superseded_date = "2026-07-01"
|
||||
superseded_reason = "v1 chronology had 167/216 rows with wrong status (stale metadata.json.status classifier); v2 rewrite was specced but never executed; user directed a fresh track with the v2 design as ancestor"
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"track_id": "chronology_v2_20260701",
|
||||
"name": "Chronology v2 Redo (git-history classifier + tracks.md de-gunk + maintenance rule)",
|
||||
"priority": "A",
|
||||
"category": "meta-tooling",
|
||||
"status": "spec_written",
|
||||
"blocked_by": [],
|
||||
"verification_criteria": [
|
||||
"conductor/chronology.md exists with one row per track folder (tracks/ + archive/), sorted newest-first, 6 columns, generated from the current filesystem",
|
||||
"every row's status is backed by git-history evidence (not metadata.json.status); the evidence reason is non-empty for every row",
|
||||
"no summary contains metadata-field text (**Priority:**, **Date:**, **Initialized:**, **Track:**, **Parent umbrella:**, **Status:**, **Confidence:**)",
|
||||
"scripts/audit/chronology_quality_gate.py --strict exits 0",
|
||||
"conductor/tracks.md contains only the active queue + standby/pending + a pointer to chronology.md + the 'Editing this file' notes; no Phase 0-9 history sections",
|
||||
"conductor/workflow.md contains the 'Chronology Maintenance' section",
|
||||
"docs/reports/CHRONOLOGY_QUALITY_20260701.md exists with status distribution + Needs Review queue + v1 comparison + desync gap list",
|
||||
"docs/reports/TRACK_COMPLETION_chronology_v2_20260701.md exists",
|
||||
"chronology_20260619 is archived with status = superseded in its state.toml",
|
||||
"superpowers_review_20260619/state.toml [blocked_by] no longer contains chronology_20260619",
|
||||
"tests/test_generate_chronology.py + tests/test_chronology_quality_gate.py pass",
|
||||
"user sign-off recorded in the TRACK_COMPLETION report"
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,444 @@
|
||||
# Chronology v2 Redo — Design Spec
|
||||
|
||||
**Date:** 2026-07-01
|
||||
**Track ID:** `chronology_v2_20260701`
|
||||
**Priority:** A (meta-tooling / infrastructure)
|
||||
**Status:** design (pre-spec)
|
||||
**Ancestors:**
|
||||
- `conductor/tracks/chronology_20260619/spec.md` (the v2 rewrite spec, 354 lines — designed but never executed)
|
||||
- `docs/reports/2026-06-15/CHRONOLOGY_TRACK_HANDOVER_20260620.md` (the v1 failure report, 128 lines)
|
||||
- `docs/reports/2026-06-15/CHRONOLOGY_MIGRATION_20260619.md` (the v1 migration report)
|
||||
- `docs/reports/2026-06-15/TRACK_COMPLETION_chronology_20260619.md` (the v1 end-of-track report)
|
||||
|
||||
## Overview
|
||||
|
||||
The `chronology_20260619` track produced a broken `conductor/chronology.md` (v1):
|
||||
167 of 216 rows had wrong status (the classifier read stale `metadata.json.status`
|
||||
instead of git history), summaries were metadata-field text instead of track
|
||||
descriptions, and the per-row cross-check was bypassed. A v2 rewrite was specced
|
||||
and planned in detail but never executed. The track sits at `current_phase=10`
|
||||
pending user sign-off that never came, blocking `superpowers_review_20260619`.
|
||||
|
||||
This track is the redo: a **fresh track** that closes out the old one, adopts
|
||||
the v2 design as a starting point, revises it for the current project state
|
||||
(5+ days of desync, new track patterns, the tracks.md bloat), and executes it
|
||||
through to a user sign-off that is actionable this time.
|
||||
|
||||
## What v1 Got Wrong (from the records)
|
||||
|
||||
Per `CHRONOLOGY_TRACK_HANDOVER_20260620.md`:
|
||||
|
||||
1. **`_classify_status()` reads `metadata.json.status`** — a stale field set when
|
||||
each track was created, rarely updated when work completed or was abandoned.
|
||||
167/216 rows had wrong status.
|
||||
2. **Summaries are metadata-field text** (`**Priority:** A (foundational...)`,
|
||||
`**Date:** 2026-06-20`) not actual track descriptions.
|
||||
3. **Phase 8 per-row cross-check was bypassed** in favor of bulk structural
|
||||
verification; the manual summary-adequacy check was partial (15-row sample).
|
||||
4. **Phase 6 user review gate was bypassed** in the autonomous session.
|
||||
5. **No quality gate** to detect a broken classifier before the chronology ships.
|
||||
6. **No maintenance plan** — the chronology desynced within days because nobody
|
||||
regenerated it after new tracks shipped.
|
||||
|
||||
The five lessons from the handover (lines 88-98):
|
||||
1. Bypassing the manual review clause was the original sin.
|
||||
2. `metadata.json` is a snapshot, not a source of truth.
|
||||
3. Git history is the project's audit log — use it.
|
||||
4. Default to "when in doubt, ask" — the chronology is read by humans.
|
||||
5. The user said "manual review" twice; both times an interpretation was found
|
||||
to be less strict — listen to the literal request.
|
||||
|
||||
## Goals
|
||||
|
||||
1. Produce a correct `conductor/chronology.md` where every row's status is
|
||||
backed by git-history evidence, not stale metadata.
|
||||
2. Produce a per-row evidence artifact (the quality report) so the user can
|
||||
audit the classification without re-deriving it.
|
||||
3. Close out `chronology_20260619` (mark superseded, archive, unblock
|
||||
`superpowers_review_20260619`).
|
||||
4. De-gunk `conductor/tracks.md` — remove shipped/completed tracks from the
|
||||
active queue, remove the Phase 0-9 history sections that duplicate
|
||||
chronology.md, leave only the active queue + standby + a pointer.
|
||||
5. Add a `conductor/workflow.md` maintenance rule so the chronology is
|
||||
regenerated after each track ships (closes the desync root cause).
|
||||
6. Ship a quality-gate script that catches a broken classifier before it
|
||||
ships (closes the "no quality gate" root cause).
|
||||
|
||||
## Non-Goals
|
||||
|
||||
- Fixing or executing `superpowers_review_20260619` (just unblocking it).
|
||||
- Changing how `metadata.json.status` is maintained going forward (the
|
||||
classifier uses git history, not metadata; metadata staleness is no longer
|
||||
the problem).
|
||||
- Archiving the 66 folders in `conductor/tracks/` that are already shipped
|
||||
(separate cleanup; the chronology indexes them regardless of location).
|
||||
- Renaming or restructuring `conductor/archive/` (out of scope; the
|
||||
chronology walks it as-is).
|
||||
- A broader `workflow.md` review for other stale rules (the only workflow.md
|
||||
change is the chronology maintenance section).
|
||||
|
||||
## Design
|
||||
|
||||
### 1. New track identity + old track close-out
|
||||
|
||||
**New track:** `chronology_v2_20260701` (Priority A; meta-tooling/infrastructure).
|
||||
Fresh track, not a continuation of `chronology_20260619`.
|
||||
|
||||
**Old track close-out (Phase 1):**
|
||||
- Mark `chronology_20260619` as superseded in its `state.toml`
|
||||
(`status = "superseded"`, `current_phase = 10`, add a `[supersession]`
|
||||
section pointing to `chronology_v2_20260701`).
|
||||
- Update its tracks.md row (line 64) to reflect supersession.
|
||||
- Archive `conductor/tracks/chronology_20260619/` →
|
||||
`conductor/archive/chronology_20260619/`. The v2 spec/plan are preserved
|
||||
in git history; the new track references them by commit SHA.
|
||||
- **Unblock `superpowers_review_20260619`** — remove `chronology_20260619`
|
||||
from its `state.toml` `[blocked_by]` entirely (no re-gating on the new
|
||||
track).
|
||||
|
||||
**v2 design adoption:** The new track's spec explicitly cites
|
||||
`conductor/tracks/chronology_20260619/spec.md` (the v2 rewrite spec) and
|
||||
`CHRONOLOGY_TRACK_HANDOVER_20260620.md` (the failure report) as its design
|
||||
ancestors. It adopts the v2 status enum, the git-history classifier approach,
|
||||
and the quality-gate concept — with the revisions below.
|
||||
|
||||
### 2. The six revisions to v2
|
||||
|
||||
#### Revision 1 — The desync gap (regenerate from current filesystem)
|
||||
|
||||
v2 was specced when the newest track was ~2026-06-20. The chronology now needs
|
||||
to cover 5+ more days of tracks: the layout saga
|
||||
(`default_layout_install_20260629`, `default_layout_extract_20260629`,
|
||||
`default_layout_install_followup_20260629`), the MMA quarantine
|
||||
(`mma_quarantine_rag_test_decoupling_20260701`), the module_taxonomy abort +
|
||||
cleanup (`module_taxonomy_refactor_20260627`, `post_module_taxonomy_de_cruft_20260627`),
|
||||
`cruft_elimination_20260627`, `directive_hotswap_harness_20260627`,
|
||||
`enforcement_gap_closure_20260627`, `test_engine_integration_20260627`,
|
||||
`fix_mma_concurrent_tracks_sim_20260627`, `type_alias_unfuck_20260626`,
|
||||
`video_analysis_campaign_2_20260627`.
|
||||
|
||||
**Change:** The new track's first generation pass runs against the **current**
|
||||
filesystem (all `conductor/tracks/` + `conductor/archive/` as of execution
|
||||
day), not the 2026-06-19 snapshot. The generation script walks both directories
|
||||
fresh each run.
|
||||
|
||||
#### Revision 2 — `superpowers_review_20260619` blocker resolution
|
||||
|
||||
v2 didn't address this because it was rewriting the same track in place. The
|
||||
new track explicitly closes out `chronology_20260619` and removes it from
|
||||
`superpowers_review_20260619/state.toml` `[blocked_by]` (no re-gating).
|
||||
|
||||
#### Revision 3 — Classifier heuristics updated for recent track patterns
|
||||
|
||||
v2's 5-step git-history algorithm was designed 2026-06-20. Since then, new
|
||||
patterns emerged that it would misclassify:
|
||||
|
||||
- **Aborted tracks** (`module_taxonomy_refactor_20260627`): many
|
||||
`conductor(track):` + `conductor(plan):` commits but a
|
||||
`TRACK_ABORTED_*.md` report — classifier must detect the abort report as
|
||||
an `Abandoned`/`Superseded` signal.
|
||||
- **Phase 9 patches after "completion"** (`result_migration_cruft_removal_20260620`):
|
||||
a track that "shipped" then got a patch commit days later — classifier must
|
||||
look at the latest commit, not just count.
|
||||
- **Tier 2 autonomous tracks**: produce many `conductor(plan):` commits (one
|
||||
per task) — the "feat/fix/refactor vs chore/docs" heuristic must not count
|
||||
`conductor(plan):` as a work commit.
|
||||
- **Follow-up tracks** (`default_layout_install_followup_20260629`): short,
|
||||
few commits, but legitimately `Completed` — the "0-1 commits + >14 days
|
||||
old = Abandoned" rule would misfire.
|
||||
|
||||
**Change:** The classifier's commit-message pattern list is extended:
|
||||
|
||||
- `conductor(plan):`, `conductor(state):`, `conductor(track):`,
|
||||
`docs(spec):`, `docs(plan):` are **metadata commits**, not work commits
|
||||
(don't count toward the "≥3 work commits = Completed" threshold).
|
||||
- `feat:`, `fix:`, `refactor:`, `perf:`, `test:`, `docs(report):` are work
|
||||
commits.
|
||||
- Presence of `TRACK_ABORTED_*.md` or `TRACK_COMPLETION_*.md` in
|
||||
`docs/reports/` matching the track ID is a **strong signal** that
|
||||
overrides commit-count heuristics.
|
||||
- The "last commit > 14 days = Abandoned" rule is **removed**; replaced
|
||||
with "no work commits AND no completion/abort report = Needs Review".
|
||||
- Confidence is reported per-row; anything below a threshold goes to the
|
||||
Needs Review queue for manual classification.
|
||||
|
||||
#### Revision 4 — tracks.md de-gunk
|
||||
|
||||
v2's scope was only chronology.md. The new track also restructures
|
||||
`conductor/tracks.md`:
|
||||
|
||||
**Current state (96KB, bloated):**
|
||||
- 60-row "Active Tracks (Current Queue)" table — ~40 of these rows are
|
||||
shipped/completed tracks that belong in history, not the active queue.
|
||||
- Phase 0-9 chronological sections with Completed/Archived subsections —
|
||||
duplicates chronology.md.
|
||||
- 4 backlog/follow-up sections — some entries are shipped, some pending.
|
||||
- "Recently Shipped Tracks (2026-06-29)" section at the bottom.
|
||||
|
||||
**Target state:**
|
||||
- **Section 1: Active Queue** — only tracks that are genuinely unblocked and
|
||||
ready to start OR in-progress. Shipped tracks are removed (they're in
|
||||
chronology.md). Each row: `| # | Priority | Track | Status | Blocked By |`
|
||||
(same columns, filtered to active-only).
|
||||
- **Section 2: Standby / Pending Spec** — tracks with spec TBD or pending
|
||||
decision (the backlog). Same columns.
|
||||
- **Section 3: Pointer** — one line:
|
||||
`> Full project history: see [chronology.md](./chronology.md)`
|
||||
- **Delete:** Phase 0-9 sections, Completed/Archived subsections, backlog/
|
||||
follow-up sections that duplicate chronology.md, the "Recently Shipped"
|
||||
section, the "Archived (Closed 2026-06-23)" video analysis section.
|
||||
- **Keep:** the "Editing this file" / archiving convention notes at the
|
||||
bottom (from v1 Phase 4).
|
||||
|
||||
**Migration safety:** the full tracks.md is preserved in git history; the
|
||||
de-gunk is a single commit. If anything is lost,
|
||||
`git show HEAD~1:conductor/tracks.md` recovers it.
|
||||
|
||||
#### Revision 5 — workflow.md maintenance rule
|
||||
|
||||
v2 had no maintenance plan (the root cause of the desync). The new track adds
|
||||
a section to `conductor/workflow.md`:
|
||||
|
||||
**New subsection under "Documentation Refresh Protocol"** (or a new top-level
|
||||
section "Chronology Maintenance"):
|
||||
|
||||
> **Chronology regeneration cadence.** After every track ships (completion
|
||||
> commit + TRACK_COMPLETION report), the implementing agent must run
|
||||
> `uv run python scripts/audit/generate_chronology.py` to regenerate
|
||||
> `conductor/chronology.md`. The regeneration is a single atomic commit
|
||||
> (`docs(chronology): regenerate after <track-id> shipped`). If the
|
||||
> regeneration produces a diff beyond the new row (e.g., status changes on
|
||||
> other rows), the agent must investigate before committing — a status drift
|
||||
> on an unrelated row indicates a stale classifier, not a chronology bug.
|
||||
>
|
||||
> **Quality gate.** `scripts/audit/chronology_quality_gate.py` runs as part
|
||||
> of the regeneration. It fails (exit 1) if >30% of rows are classified as
|
||||
> `Needs Review`. A failing quality gate blocks the regeneration commit.
|
||||
|
||||
This makes regeneration a per-track-shipping obligation, not a one-shot.
|
||||
|
||||
#### Revision 6 — Report(s)
|
||||
|
||||
Two reports:
|
||||
|
||||
1. **`docs/reports/TRACK_COMPLETION_chronology_v2_20260701.md`** — the
|
||||
standard end-of-track report (what was done, files changed, verification
|
||||
results).
|
||||
2. **`docs/reports/CHRONOLOGY_QUALITY_20260701.md`** — the chronology-quality
|
||||
report (new, not in v1). Contents:
|
||||
- Total rows generated + breakdown by status (Active / In Progress /
|
||||
Completed / Abandoned / Superseded / Special / Needs Review)
|
||||
- Confidence distribution (high / medium / low)
|
||||
- The Needs Review queue (list of rows that need manual classification,
|
||||
with the evidence the classifier found)
|
||||
- Comparison vs v1 (row count delta, status-correction count: "N rows
|
||||
changed status vs v1")
|
||||
- The desync gap closed (list of tracks added that were missing from v1)
|
||||
- Classifier heuristics summary (which patterns matched, which were
|
||||
overridden by completion/abort reports)
|
||||
|
||||
The quality report is the evidence artifact — it's what makes this track
|
||||
auditable rather than "trust the script." v1 failed because there was no
|
||||
quality gate and no evidence per row; this report is the fix.
|
||||
|
||||
### 3. Architecture — the generation script + quality gate
|
||||
|
||||
#### `scripts/audit/generate_chronology.py` (rewritten)
|
||||
|
||||
**Inputs:** `conductor/tracks/` + `conductor/archive/` (walked fresh each
|
||||
run); `git log` per folder for commit evidence; `docs/reports/TRACK_COMPLETION_*.md`
|
||||
+ `TRACK_ABORTED_*.md` for override signals.
|
||||
|
||||
**Extraction pipeline (per folder):**
|
||||
1. **Date** — slug date from folder name (regex, unchanged from v1).
|
||||
2. **ID** — folder name (unchanged).
|
||||
3. **Status** — the new classifier (see below), returns
|
||||
`(status, confidence, reason)`.
|
||||
4. **Summary** — rewritten extractor: rejects lines starting with
|
||||
`**Priority:**`, `**Date:**`, `**Initialized:**`, `**Track:**`,
|
||||
`**Parent umbrella:**`, `**Status:**`, `**Confidence:**`; prefers
|
||||
`metadata.json.description` if it's actual prose (not metadata-field
|
||||
text); falls back to first non-heading, non-metadata line of `spec.md`;
|
||||
truncates to 25 words.
|
||||
5. **Folder** — path (unchanged).
|
||||
6. **Range** — `git log --oneline -- <folder>` → first + last SHA + count.
|
||||
|
||||
**The new classifier (`_classify_status`, returning `(status, confidence, reason)`):**
|
||||
|
||||
Evidence sources, in priority order:
|
||||
|
||||
1. **Override signals (highest confidence):**
|
||||
- `TRACK_COMPLETION_*.md` exists in `docs/reports/` matching this track
|
||||
ID → `Completed`, confidence=high, reason="completion report found".
|
||||
- `TRACK_ABORTED_*.md` exists → `Abandoned`, confidence=high,
|
||||
reason="abort report found". (If `state.toml` also says `superseded`,
|
||||
the `Superseded` classification wins — see next row.)
|
||||
- `state.toml` `status = "superseded"` → `Superseded`,
|
||||
confidence=high (overrides the abort-report signal if both exist).
|
||||
2. **Git commit evidence (medium confidence):**
|
||||
- Count work commits (`feat/fix/refactor/perf/test/docs(report):` prefixes)
|
||||
via `git log --oneline -- <folder>`, excluding metadata commits
|
||||
(`conductor(plan):`, `conductor(state):`, `conductor(track):`,
|
||||
`docs(spec):`, `docs(plan):`).
|
||||
- ≥3 work commits → `Completed`, confidence=medium, reason="N work commits".
|
||||
- 1-2 work commits + in `tracks/` → `In Progress`, confidence=medium.
|
||||
- 0 work commits + in `tracks/` → `Active` (spec/plan only),
|
||||
confidence=medium.
|
||||
3. **Directory location (low confidence):**
|
||||
- In `archive/` + no override signal → `Completed`, confidence=low,
|
||||
reason="archived but no completion report".
|
||||
- In `archive/` + 0 commits → `Abandoned`, confidence=low,
|
||||
reason="archived with 0 commits".
|
||||
4. **Fallback:** `Needs Review`, confidence=none,
|
||||
reason="classifier inconclusive".
|
||||
|
||||
**Status enum:** `Active` / `In Progress` / `Completed` / `Abandoned` /
|
||||
`Superseded` / `Special` / `Needs Review` (7 values; v2 had 5, adding
|
||||
`Superseded` + `Needs Review`).
|
||||
|
||||
**Output format:** Markdown table with 6 columns (Date, ID, Status, Summary,
|
||||
Folder, Range) + a **"Needs Review" section** at the bottom listing rows with
|
||||
`Needs Review` status, each with its evidence reason. Sorted newest-first. A
|
||||
preamble header with generation date + row count.
|
||||
|
||||
#### `scripts/audit/chronology_quality_gate.py` (new)
|
||||
|
||||
**Purpose:** detect a broken classifier before the chronology ships.
|
||||
|
||||
**Checks:**
|
||||
- **Needs Review threshold:** if >30% of rows are `Needs Review`, exit 1
|
||||
(the classifier is failing on too many rows).
|
||||
- **Status distribution sanity:** if 0 rows are `Completed`, exit 1 (the
|
||||
classifier is misclassifying everything).
|
||||
- **Summary quality:** if >20% of summaries still contain metadata-field
|
||||
text (`**Priority:**` etc.), exit 1 (the summary extractor is broken).
|
||||
- **Per-row evidence:** every row must have a non-empty `reason` from the
|
||||
classifier; if any row has no reason, exit 1.
|
||||
|
||||
**Modes:** default informational (exits 0, prints report); `--strict` CI
|
||||
gate (exits 1 on any violation). Follows the project's audit-script
|
||||
convention (per `conductor/workflow.md` "Audit Script Policy").
|
||||
|
||||
#### Tests (TDD)
|
||||
|
||||
`tests/test_generate_chronology.py` (rewritten) +
|
||||
`tests/test_chronology_quality_gate.py` (new). Tests for:
|
||||
- The classifier's 7 status values + the evidence priority chain (override
|
||||
signals > git evidence > directory > fallback).
|
||||
- The summary extractor's rejection of metadata-field lines.
|
||||
- The quality gate's 4 checks.
|
||||
- Edge cases: aborted tracks with completion reports (override conflict),
|
||||
tracks with 0 commits, archive folders with no metadata.json.
|
||||
|
||||
### 4. Execution plan structure (phases)
|
||||
|
||||
6 phases, each a checkpoint with atomic per-task commits.
|
||||
|
||||
#### Phase 1: Close out the old track + scaffold the new one
|
||||
- Task 1.1: Update `chronology_20260619/state.toml` →
|
||||
`status = "superseded"`, add `[supersession]` section. Commit.
|
||||
- Task 1.2: Update `chronology_20260619` row in tracks.md (line 64) to
|
||||
"superseded by `chronology_v2_20260701`". Commit.
|
||||
- Task 1.3: Archive `conductor/tracks/chronology_20260619/` →
|
||||
`conductor/archive/chronology_20260619/`. Commit.
|
||||
- Task 1.4: Update `superpowers_review_20260619/state.toml` `[blocked_by]` —
|
||||
remove `chronology_20260619` entirely. Commit.
|
||||
- Task 1.5: Create `conductor/tracks/chronology_v2_20260701/` with
|
||||
`spec.md`, `metadata.json`, `state.toml`, `plan.md`. Commit.
|
||||
|
||||
#### Phase 2: TDD the classifier + quality gate (Red)
|
||||
- Task 2.1: Write `tests/test_generate_chronology.py` — tests for the
|
||||
7-status classifier, evidence priority chain, summary extractor. Red.
|
||||
- Task 2.2: Write `tests/test_chronology_quality_gate.py` — tests for the
|
||||
4 quality-gate checks. Red.
|
||||
|
||||
#### Phase 3: Implement the classifier + quality gate (Green)
|
||||
- Task 3.1: Rewrite `scripts/audit/generate_chronology.py` — the new
|
||||
`_classify_status` returning `(status, confidence, reason)`, the
|
||||
rewritten summary extractor, the git-history evidence pipeline. Green.
|
||||
- Task 3.2: Create `scripts/audit/chronology_quality_gate.py` — the 4
|
||||
checks + `--strict` mode. Green.
|
||||
|
||||
#### Phase 4: Regenerate chronology.md + write the quality report
|
||||
- Task 4.1: Run the generator against the current filesystem. Capture
|
||||
output to `conductor/chronology.md` (replacing v1). Commit.
|
||||
- Task 4.2: Run the quality gate. If it fails, iterate on the classifier
|
||||
(back to Phase 3) until it passes. Commit the passing state.
|
||||
- Task 4.3: Write `docs/reports/CHRONOLOGY_QUALITY_20260701.md` — the
|
||||
quality report. Commit.
|
||||
|
||||
#### Phase 5: De-gunk tracks.md + add workflow.md maintenance rule
|
||||
- Task 5.1: Restructure `conductor/tracks.md` — remove shipped/completed
|
||||
rows from the active queue, remove Phase 0-9 history sections, remove
|
||||
backlog/follow-up sections that duplicate chronology.md, add the pointer
|
||||
to chronology.md, keep the "Editing this file" notes. Single commit.
|
||||
- Task 5.2: Add the "Chronology Maintenance" section to
|
||||
`conductor/workflow.md` — the regeneration cadence + quality gate
|
||||
obligation. Commit.
|
||||
|
||||
#### Phase 6: Verification + end-of-track report
|
||||
- Task 6.1: Run the quality gate `--strict` mode. Confirm exit 0. Commit.
|
||||
- Task 6.2: Verify the Needs Review queue is empty or small (the user
|
||||
reviews any remaining rows). Commit.
|
||||
- Task 6.3: Write
|
||||
`docs/reports/TRACK_COMPLETION_chronology_v2_20260701.md`. Commit.
|
||||
- Task 6.4: User sign-off (the final gate — same as v1's Phase 10, but
|
||||
this time the quality report + evidence per row makes it actionable).
|
||||
|
||||
### Commit strategy
|
||||
|
||||
- Per-task atomic commits (no batching).
|
||||
- Git notes per commit (task summary).
|
||||
- Phase checkpoints after each phase (per the workflow protocol).
|
||||
|
||||
## Verification Criteria
|
||||
|
||||
1. `conductor/chronology.md` exists with one row per track folder (tracks/
|
||||
+ archive/), sorted newest-first, 6 columns, generated from the current
|
||||
filesystem (no 2026-06-19 snapshot pin).
|
||||
2. Every row's status is backed by git-history evidence (not
|
||||
`metadata.json.status`); the evidence `reason` is non-empty for every
|
||||
row.
|
||||
3. No summary contains metadata-field text (`**Priority:**`, `**Date:**`,
|
||||
`**Initialized:**`, `**Track:**`, `**Parent umbrella:**`,
|
||||
`**Status:**`, `**Confidence:**`).
|
||||
4. `scripts/audit/chronology_quality_gate.py --strict` exits 0.
|
||||
5. `conductor/tracks.md` contains only the active queue + standby/pending +
|
||||
a pointer to chronology.md + the "Editing this file" notes. No Phase 0-9
|
||||
history sections, no shipped-track rows in the active queue.
|
||||
6. `conductor/workflow.md` contains the "Chronology Maintenance" section
|
||||
(regeneration cadence + quality gate obligation).
|
||||
7. `docs/reports/CHRONOLOGY_QUALITY_20260701.md` exists with the status
|
||||
distribution, confidence distribution, Needs Review queue, v1
|
||||
comparison, desync gap list, and heuristics summary.
|
||||
8. `docs/reports/TRACK_COMPLETION_chronology_v2_20260701.md` exists.
|
||||
9. `chronology_20260619` is archived (in `conductor/archive/`) with
|
||||
`status = "superseded"` in its state.toml.
|
||||
10. `superpowers_review_20260619/state.toml` `[blocked_by]` no longer
|
||||
contains `chronology_20260619`.
|
||||
11. `tests/test_generate_chronology.py` +
|
||||
`tests/test_chronology_quality_gate.py` pass.
|
||||
12. User sign-off recorded in the TRACK_COMPLETION report.
|
||||
|
||||
## Risks
|
||||
|
||||
- **R1 (medium):** The git-history classifier may still misclassify some
|
||||
edge cases (e.g., tracks with `conductor(checkpoint):` commits only).
|
||||
Mitigation: the Needs Review queue surfaces these for manual
|
||||
classification; the quality gate fails if >30% are Needs Review.
|
||||
- **R2 (medium):** The tracks.md de-gunk may accidentally remove a row
|
||||
that's still active. Mitigation: the full tracks.md is preserved in git
|
||||
history; recovery is `git show HEAD~1:conductor/tracks.md`.
|
||||
- **R3 (low):** The workflow.md maintenance rule may not be followed by
|
||||
future agents. Mitigation: the rule is in the operational workflow doc
|
||||
that agents read at session start; the quality gate catches a desync
|
||||
when the next regeneration runs.
|
||||
|
||||
## Out of Scope
|
||||
|
||||
- Fixing or executing `superpowers_review_20260619` (just unblocking it).
|
||||
- Changing how `metadata.json.status` is maintained going forward.
|
||||
- Archiving the 66 folders in `conductor/tracks/` that are already shipped.
|
||||
- Renaming or restructuring `conductor/archive/`.
|
||||
- A broader `workflow.md` review for other stale rules.
|
||||
- The `superpowers_review_20260619` track's execution.
|
||||
@@ -0,0 +1,39 @@
|
||||
# Track state for chronology_v2_20260701
|
||||
|
||||
[meta]
|
||||
track_id = "chronology_v2_20260701"
|
||||
name = "Chronology v2 Redo"
|
||||
status = "completed"
|
||||
current_phase = 6
|
||||
last_updated = "2026-07-01"
|
||||
|
||||
[blocked_by]
|
||||
# Independent track. No blockers.
|
||||
|
||||
[blocks]
|
||||
# superpowers_review_20260619 was blocked by the old chronology_20260619;
|
||||
# that blocker was removed in Task 1.4. This track does not block anything.
|
||||
|
||||
[phases]
|
||||
phase_1 = { status = "completed", checkpointsha = "cc98205", name = "Close out old track + scaffold new one" }
|
||||
phase_2 = { status = "completed", checkpointsha = "25c5dbb", name = "TDD the classifier + quality gate (Red)" }
|
||||
phase_3 = { status = "completed", checkpointsha = "6323b3e", name = "Implement the classifier + quality gate (Green)" }
|
||||
phase_4 = { status = "completed", checkpointsha = "0b8bf07", name = "Regenerate chronology.md + write quality report" }
|
||||
phase_5 = { status = "completed", checkpointsha = "a4b8158", name = "De-gunk tracks.md + add workflow.md maintenance rule" }
|
||||
phase_6 = { status = "completed", checkpointsha = "4d0bd47b", name = "Verification + end-of-track report" }
|
||||
|
||||
[tasks]
|
||||
t1_1 = { status = "completed", commit_sha = "2e52944b", description = "Mark chronology_20260619 as superseded in state.toml" }
|
||||
t1_2 = { status = "completed", commit_sha = "1867d1c", description = "Update chronology_20260619 row in tracks.md" }
|
||||
t1_3 = { status = "completed", commit_sha = "0b00671b", description = "Archive chronology_20260619 folder" }
|
||||
t1_4 = { status = "completed", commit_sha = "fefc1526", description = "Unblock superpowers_review_20260619" }
|
||||
t1_5 = { status = "completed", commit_sha = "c1da0f99", description = "Scaffold chronology_v2_20260701 track folder" }
|
||||
t2_1 = { status = "completed", commit_sha = "6f57c893", description = "Write test_generate_chronology.py (Red)" }
|
||||
t2_2 = { status = "completed", commit_sha = "078a84b6", description = "Write test_chronology_quality_gate.py (Red)" }
|
||||
t3_1 = { status = "completed", commit_sha = "945751b9", description = "Rewrite generate_chronology.py (Green)" }
|
||||
t3_2 = { status = "completed", commit_sha = "9010e690", description = "Create chronology_quality_gate.py (Green)" }
|
||||
t4_1 = { status = "completed", commit_sha = "f5a08634", description = "Regenerate conductor/chronology.md" }
|
||||
t4_2 = { status = "completed", commit_sha = "f5a08634", description = "Run the quality gate (PASS)" }
|
||||
t4_3 = { status = "completed", commit_sha = "ddc4cb7d", description = "Write the quality report" }
|
||||
t5_1 = { status = "completed", commit_sha = "342638e1", description = "Restructure conductor/tracks.md (de-gunk)" }
|
||||
t5_2 = { status = "completed", commit_sha = "5a0453b3", description = "Add Chronology Maintenance section to workflow.md" }
|
||||
@@ -0,0 +1,41 @@
|
||||
# Directive Harvest — Phase 1 Summary
|
||||
|
||||
**Status:** Phase 1 complete. 51 directive variants lifted verbatim into `conductor/directives/<name>/v1.md`.
|
||||
|
||||
## What shipped
|
||||
|
||||
51 v1.md files across 51 directive directories. Each is a verbatim lift of the imperative-ban / rationale-bullet style currently in production, with a header annotating the source location for future cross-referencing.
|
||||
|
||||
| Task | # of directives | Sources |
|
||||
|---|---|---|
|
||||
| t1_1 | 7 | `conductor/code_styleguides/python.md` §17.1-17.7 |
|
||||
| t1_2 | 3 | `.opencode/commands/mma-tier3-worker.md:42-46` (drift-corrected from python.md §17.9) |
|
||||
| t1_3 | 2 | `conductor/code_styleguides/error_handling.md` |
|
||||
| t1_4 | 2 new + 1 updated | `data_oriented_design.md` §8.5 + `type_aliases.md` + python.md §17.7/17.8 |
|
||||
| t1_5 | 5 | `python.md` + `workflow.md` + `product-guidelines.md` + `AGENTS.md` |
|
||||
| t1_6 | 3 | `AGENTS.md` + `workflow.md` |
|
||||
| t1_7 | 10 | `AGENTS.md` + `workflow.md` |
|
||||
| t1_8 | 6 | `AGENTS.md` §Process Anti-Patterns + `workflow.md` Skip-Marker Policy |
|
||||
| t1_9 | 5 | `product-guidelines.md` + `python.md` §15 |
|
||||
| t1_10 | 8 | 4 from plan + 4 from new styleguides (config_state_owner, workspace_paths, test_sandbox, chroma_cache_path) |
|
||||
| **Total** | **51** | |
|
||||
|
||||
## What was skipped
|
||||
|
||||
Of the 5 newly-added styleguides (per the 2026-07-02 spec edit), 4 contained directive-like content and were harvested; 1 was skipped:
|
||||
|
||||
- **`conductor/code_styleguides/code_path_audit.md`** — SKIPPED. The 4 conventions (per-aggregate profile structure, the 4 decomposition directions, the override file format, the mem-dim classification rules) describe the audit script's outputs and formats, not what the agent should do. They are descriptive of an internal tool, not prescriptive for the LLM. If future tracks need an "audit-script-usage" directive, that should be created separately with explicit rules like "before modifying an aggregate, run `python scripts/code_path_audit/code_path_audit.py <aggregate_name>` and check the recommended_direction".
|
||||
|
||||
## Source drift corrections
|
||||
|
||||
Several plan line refs were stale (the doc tree moved during the 2026-06-27 cruft-elimination refactor). All v1.md `**Source:**` lines reflect the actual verified line ranges:
|
||||
|
||||
- `python.md` plan claimed §17 = lines 243-473; actual file is 359 lines. The §17.1-17.7 ranges were corrected in v1.md headers (each off by ~1 line).
|
||||
- `python.md` plan claimed §17.9 = lines 364-443; that section was deleted during the cruft_elimination_20260627 refactor. The §17.9 content (local imports / _PREFIX aliasing / repeated from_dict) now lives in `.opencode/agents/tier3-worker.md` and `.opencode/commands/mma-tier3-worker.md`. The 3 directives (t1_2) lift from `.opencode/commands/mma-tier3-worker.md:42-46`.
|
||||
- All other plan line refs were close to actual (off by 1-3 lines); verified by `get_file_slice` before each lift and corrected in the v1.md `**Source:**` line where drifted.
|
||||
|
||||
## Phase 1 stop point
|
||||
|
||||
Per the dispatch prompt: "After Phase 1 completes, you STOP and report back to the Tier 2 Tech Lead. Phase 2 (baseline preset + role-prompt warm-with: bootstrap) requires the Tier 2's review and decision on per-tier preset variants before dispatching Tier 3 again."
|
||||
|
||||
Phase 2 work (current_baseline.md + 5 role-prompt warm with: updates) is deferred to the next Tier 2 dispatch.
|
||||
@@ -0,0 +1,254 @@
|
||||
Track: directive_hotswap_harness_20260627
|
||||
Plan: conductor/tracks/directive_hotswap_harness_20260627/plan.md
|
||||
Spec: conductor/tracks/directive_hotswap_harness_20260627/spec.md
|
||||
State: conductor/tracks/directive_hotswap_harness_20260627/state.toml
|
||||
|
||||
You are executing Phase 1 (Directive Harvest) of the harness plan.
|
||||
This is a docs-only track — the artifacts are markdown files under
|
||||
conductor/directives/. No src/*.py code changes in this phase.
|
||||
|
||||
# Pre-flight (MANDATORY before any edit)
|
||||
|
||||
1. Read conductor/tracks/directive_hotswap_harness_20260627/spec.md in full (verbatim, do not paraphrase).
|
||||
2. Read conductor/tracks/directive_hotswap_harness_20260627/plan.md in full.
|
||||
3. Read conductor/tracks/directive_hotswap_harness_20260627/state.toml — update current_phase from 0 to 1 when starting; advance task statuses as you complete each.
|
||||
4. Update conductor/index.md's "Last comprehensive doc refresh" date if you touch any guide.
|
||||
5. Update conductor/tracks.md to add `directive_hotswap_harness_20260627` row in the Standby section IF NOT already present. CHECK FIRST.
|
||||
6. Read `conductor/code_styleguides/python.md` §17 once for the verbatim source text you'll be lifting (the plan's line refs were updated 2026-07-02; verify they still match by get_file_slice, do not trust the plan blindly).
|
||||
|
||||
# Atomic per-task commits (HARD RULE)
|
||||
|
||||
- ONE task = ONE commit. No batching.
|
||||
- Every commit MUST be atomic per the project's commit discipline (see conductor/workflow.md §"AT THE END OF EACH TASK").
|
||||
- Per-task git notes are REQUIRED: see step 10 in workflow.md §"Standard Task Workflow".
|
||||
- Use Conventional Commits prefix `feat(directives):` for the harvest commits and `docs(role-prompts):` for Phase 2.
|
||||
|
||||
# Phase 1 tasks (follow plan §1.1 through §1.11 in order)
|
||||
|
||||
For EACH plan task (t1_1 through t1_10), the directive creates N variant
|
||||
files. For each v1.md file:
|
||||
|
||||
1. Source the directive text via `get_file_slice` (the line range the
|
||||
plan provides is the planner's best estimate; verify against current
|
||||
line numbers via `grep -n` first).
|
||||
2. Create `conductor/directives/<name>/v1.md` using the EXACT format from
|
||||
the plan (the variant header format block under t1_1).
|
||||
3. The variant content is a VERBATIM lift of the source text — NOT a
|
||||
rewrite. The harvester is documenting current state.
|
||||
4. After each batch of v1.md files (per plan step), run `git add` +
|
||||
`git commit` with message: `feat(directives): harvest <count>
|
||||
directives from <source-file> (§<N>)`.
|
||||
|
||||
The current line refs in plan.md (post 2026-07-02 drift-fix) are:
|
||||
|
||||
- python.md §17: 243-473. The 7 banned patterns + §17.7 boundary exception + §17.8 enforcement + §17.9 local imports + §17.10 enforcement inventory.
|
||||
- python.md §17.1 ban_dict_any: 247-264
|
||||
- python.md §17.2 ban_any_type: 266-277
|
||||
- python.md §17.3 ban_optional_returns: 279-299
|
||||
- python.md §17.4 ban_hasattr_dispatch: 301-326
|
||||
- python.md §17.5 ban_getattr_dispatch: 328-338
|
||||
- python.md §17.6 ban_dict_get_on_known_fields: 340-350
|
||||
- python.md §17.7 boundary_layer_exception: 352-354
|
||||
- python.md §17.9 (all 3): 364-443 (covers §17.9a/17.9b/17.9c)
|
||||
- python.md §1-§2 (one_space_indent + type_hints_required pieces): 7-31
|
||||
- python.md §8 (no_comments, no_diagnostic_noise): 64-71
|
||||
- python.md §12 (sdm_dependency_tags): 202-211
|
||||
- python.md §13 (vertical_compaction): 212-224
|
||||
- python.md §15 (modular_controller_pattern): 234-241
|
||||
- error_handling.md §1 (The 5 Patterns): 22-131
|
||||
- error_handling.md §2 (Hard Rules): 212-264
|
||||
- error_handling.md §3 (Boundary Types): 284-365
|
||||
- data_oriented_design.md §8.5-8.7: 176-215
|
||||
- type_aliases.md (the per-aggregate pattern + promotion rules): 13-160
|
||||
|
||||
Verify each before lifting. If a line range has drifted, fix it in
|
||||
the v1.md's header (the "Source:" line) to reflect the actual range
|
||||
you lifted from. Do not propagate stale refs into the harvest.
|
||||
|
||||
# Spec amendments made 2026-07-02 (during drift audit)
|
||||
|
||||
The drift audit (11 commits f463edf9..6f4832b6) added 5 new styleguides
|
||||
to the spec's "Sources to comb" list (in the spec file itself — verify
|
||||
the edit landed at spec.md line ~134-156). The 5 new sources are:
|
||||
|
||||
- conductor/code_styleguides/config_state_owner.md — AppController is single source of truth for config I/O
|
||||
- conductor/code_styleguides/workspace_paths.md — test infrastructure paths must live under ./tests/
|
||||
- conductor/code_styleguides/test_sandbox.md — FR1/FR2/FR3 test sandbox conventions
|
||||
- conductor/code_styleguides/chroma_cache.md — ChromaDB cache conventions
|
||||
- conductor/code_styleguides/code_path_audit.md — per-aggregate data pipeline audit convention
|
||||
|
||||
**Before lifting from any of these 5, read the file first** to determine
|
||||
if it contains directive-like content (imperative/ban/preference). If
|
||||
purely descriptive, SKIP and add a note to t1_11's commit body listing
|
||||
which were skipped and why. This may bump the directive count below
|
||||
the plan's 48.
|
||||
|
||||
Also note that the audit found that `conductor/code_styleguides/python.md`
|
||||
§17.8 and §17.10 referenced `audit_optional_returns.py` which does NOT
|
||||
exist (corrected in commit 9d1fef73 to `audit_optional_in_3_files.py`).
|
||||
When you lift §17.8 enforcement content, use the CURRENT version (the
|
||||
post-fix python.md), not the pre-fix version.
|
||||
|
||||
# Phase 1 task order
|
||||
|
||||
Strictly sequential (each step depends on the prior):
|
||||
|
||||
t1_1 → §17 banned patterns (7 directives; ban_dict_any..boundary_layer_exception)
|
||||
t1_2 → §17.9 import/aliasing bans (3 directives)
|
||||
t1_3 → Error handling conventions (2 directives)
|
||||
t1_4 → Type/data-structure conventions (3 directives; updates boundary_layer_exception)
|
||||
t1_5 → Code style directives (5 directives)
|
||||
t1_6 → File/taxonomy conventions (3 directives)
|
||||
t1_7 → Process/workflow directives (10 directives)
|
||||
t1_8 → Process anti-patterns (6 directives)
|
||||
t1_9 → GUI/architecture directives (5 directives)
|
||||
t1_10 → Feature-flag + RAG + cache + knowledge directives (4 directives)
|
||||
t1_11 → Commit the harvest (one final commit summarizing the 48 lifted v1.md files)
|
||||
|
||||
After t1_11: per state.toml, advance current_phase to 2 (mark phase_1
|
||||
complete = true via the verification table).
|
||||
|
||||
# Phase 2 (do NOT execute yet)
|
||||
|
||||
After Phase 1 completes, you STOP and report back to the Tier 2 Tech
|
||||
Lead. Phase 2 (baseline preset + role-prompt warm-with: bootstrap)
|
||||
requires the Tier 2's review and decision on per-tier preset variants
|
||||
before dispatching Tier 3 again. Do not auto-execute Phase 2.
|
||||
|
||||
# Conventions (mandatory per the project's data-oriented styleguide)
|
||||
|
||||
- 1-space indentation for Python (you won't write any Python here; this
|
||||
is a docs-only track).
|
||||
- No diagnostic stderr writes.
|
||||
- No new src/*.py files.
|
||||
- NO COMMENTS in the v1.md files unless the source doc had comments
|
||||
(verbatim lifts preserve everything). Actually — VERBATIM means
|
||||
the directive text INCLUDING any formatting/headers the source has.
|
||||
- Each v1.md's `**Source:**` line is metadata about where the directive
|
||||
came from, so it's fine to add (it's not a comment about your code).
|
||||
|
||||
# Skill activation
|
||||
|
||||
Before any action: `activate_skill mma-orchestrator`. Then activate
|
||||
the sub-skill pattern by following the role-prompt warm-up rules
|
||||
(currently the role prompts hardcode ~11 files to read; just read
|
||||
those 11 files yourself).
|
||||
|
||||
# Acknowledgment
|
||||
|
||||
After completing the dispatch:
|
||||
1. Update `conductor/tracks/directive_hotswap_harness_20260627/state.toml`:
|
||||
- current_phase: 1 -> 2
|
||||
- phase_1.complete = true
|
||||
- phase_1.checkpointsha = <commit hash>
|
||||
- task t1_1 through t1_11 complete with respective commit hashes
|
||||
2. Run `uv run python scripts/audit/generate_chronology.py --draft >
|
||||
conductor/chronology.md` to regenerate (per workflow.md Chronology
|
||||
Maintenance section).
|
||||
3. Run the chronology quality gate: `uv run python -m
|
||||
scripts.audit.chronology_quality_gate --strict` (must exit 0 before
|
||||
the regenerated-chronology commit).
|
||||
4. Commit the regenerated chronology.
|
||||
5. Hand off to Tier 2 with a summary.
|
||||
|
||||
# Files you'll touch
|
||||
|
||||
- NEW: conductor/directives/<48 names>/v1.md (per the plan; possibly fewer
|
||||
if the 5 new styleguides have no directive content)
|
||||
- NEW: conductor/directives/presets/current_baseline.md (Phase 2 — NOT YET)
|
||||
- MODIFIED: conductor/tracks/directive_hotswap_harness_20260627/state.toml
|
||||
- MODIFIED (regenerated): conductor/chronology.md
|
||||
|
||||
# Coverage contract
|
||||
|
||||
The track's verification_criteria (per metadata.json, when you read it)
|
||||
will assert:
|
||||
- directive_count == 48 (or fewer if you skip any of the 5 new styleguides)
|
||||
- phase_1_complete == true
|
||||
- role_prompts_updated == false (that's Phase 2, NOT yet)
|
||||
- preset_exists == false (that's Phase 2, NOT yet)
|
||||
|
||||
If verification_criteria has other fields, address each.
|
||||
|
||||
# COMMIT / GIT NOTE discipline
|
||||
|
||||
Every commit MUST have a git note attached. See conductor/workflow.md
|
||||
§"Standard Task Workflow" step 10 for the format. The git note content
|
||||
must include:
|
||||
- Task name + number
|
||||
- Files touched (with line counts)
|
||||
- The core "why"
|
||||
|
||||
Use `git notes add -m "..." <commit-hash>` after each commit.
|
||||
|
||||
# Deliverables per task
|
||||
|
||||
For each lifted v1.md:
|
||||
1. The v1.md file at conductor/directives/<name>/v1.md
|
||||
2. The atomic commit
|
||||
3. The git note
|
||||
|
||||
For the Phase 1 checkpoint commit (t1_11):
|
||||
- One commit covering t1_11's summarization (or N commits, one per
|
||||
lifted group, then t1_11 as the meta summary)
|
||||
- The git note summarizing the harvest
|
||||
|
||||
After Phase 1 done:
|
||||
- Updated state.toml
|
||||
- Regenerated chronology.md
|
||||
- Updated chronology quality gate committed
|
||||
|
||||
# STOP AFTER PHASE 1
|
||||
|
||||
Per the "Phase 2 do NOT execute yet" rule above, stop and hand off.
|
||||
|
||||
If you encounter blockers that the plan does not cover:
|
||||
- File drift the plan does not address
|
||||
- Directive ambiguity (merge/split/keep)
|
||||
- Styleguide content where the directive nature is unclear
|
||||
|
||||
Report the blocker with file:line evidence and let Tier 2 decide.
|
||||
|
||||
# Per-skill activation note
|
||||
|
||||
This task does NOT require `mma-tier1-orchestrator` (you are not
|
||||
creating a new track — the track is already initialized). It DOES
|
||||
require `mma-tier2-tech-lead` (you are executing the plan). Activate it.
|
||||
|
||||
# Final note
|
||||
|
||||
USE EXACTLY 1-SPACE INDENTATION FOR PYTHON IF YOU WRITE ANY. You
|
||||
shouldn't be writing Python for this task — it's markdown only — but if
|
||||
you do write any tooling or verification scripts, 1-space it.
|
||||
|
||||
NEVER use `git checkout -- <file>`, `git restore`, or `git reset`
|
||||
without explicit user permission. See AGENTS.md for the ban list.
|
||||
|
||||
NEVER filter test output through Select-Object/head/tail per
|
||||
AGENTS.md. Redirect to a log file.
|
||||
|
||||
NEVER run `scripts/audit/generate_chronology.py` to regenerate
|
||||
`conductor/chronology.md` — it corrupts Unicode characters (em-dashes,
|
||||
ellipses, BOM markers all become mojibake). The user will regenerate
|
||||
the chronology manually if needed.
|
||||
|
||||
# USER DIRECTIVE (2026-07-02) — Phase 2 file convention
|
||||
|
||||
Phase 2's "update role prompts" step is **making duplicates**, NOT
|
||||
modifying in place. Concretely:
|
||||
|
||||
- For each of the 5 originals, create a NEW file with `.warm.md`
|
||||
suffix: `<name>.md` stays untouched as the fallback path; `<name>.warm.md`
|
||||
is the experimental role prompt that uses the `warm with:` bootstrap.
|
||||
- Output files: `.opencode/agents/tier1-orchestrator.warm.md`,
|
||||
`.opencode/agents/tier2-tech-lead.warm.md`,
|
||||
`.opencode/agents/tier3-worker.warm.md`,
|
||||
`.opencode/agents/tier4-qa.warm.md`,
|
||||
`conductor/tier2/agents/tier2-autonomous.warm.md`.
|
||||
- The user can `mv <name>.warm.md <name>.md` to promote a duplicate
|
||||
to active, or `rm <name>.warm.md` to fall back to the original.
|
||||
- The originals stay as the rollback target. NO in-place edits.
|
||||
|
||||
This directive is also recorded in
|
||||
`conductor/tracks/directive_hotswap_harness_20260627/spec.md` §"The role-
|
||||
prompt bootstrap" and plan.md's Phase 2 section.
|
||||
+35
-32
@@ -101,17 +101,17 @@ Each task creates one or more `conductor/directives/<name>/v1.md` files. The v1
|
||||
- [ ] **Step 1.1: Harvest §17 banned patterns (7 directives)**
|
||||
|
||||
**Files to read:**
|
||||
- `conductor/code_styleguides/python.md:216-409` (§17 Banned Patterns — the 7 banned patterns + §17.7 boundary exception + §17.8 enforcement + §17.9 local imports + §17.10 enforcement inventory)
|
||||
- `conductor/code_styleguides/python.md:243-473` (§17 Banned Patterns — the 7 banned patterns + §17.7 boundary exception + §17.8 enforcement + §17.9 local imports + §17.10 enforcement inventory)
|
||||
|
||||
**Directives to create:**
|
||||
|
||||
1. `conductor/directives/ban_dict_any/v1.md` — source: `python.md:220-237` (§17.1). Content: the `dict[str, Any]` ban + before/after examples + the boundary exception cross-ref.
|
||||
2. `conductor/directives/ban_any_type/v1.md` — source: `python.md:239-250` (§17.2). Content: the `Any` ban + before/after.
|
||||
3. `conductor/directives/ban_optional_returns/v1.md` — source: `python.md:252-272` (§17.3). Content: the `Optional[T]` return ban + the `Result[T]` replacement pattern.
|
||||
4. `conductor/directives/ban_hasattr_dispatch/v1.md` — source: `python.md:274-299` (§17.4). Content: the `hasattr()` for entity type dispatch ban + the typed Union alternative.
|
||||
5. `conductor/directives/ban_getattr_dispatch/v1.md` — source: `python.md:301-311` (§17.5). Content: the `getattr(x, 'field', default)` for type dispatch ban.
|
||||
6. `conductor/directives/ban_dict_get_on_known_fields/v1.md` — source: `python.md:313-323` (§17.6). Content: the `.get('field', default)` on a `dict[str, Any]` ban + direct attribute access alternative.
|
||||
7. `conductor/directives/boundary_layer_exception/v1.md` — source: `python.md:325-327` (§17.7). Content: the ONE exception — the wire boundary (TOML/JSON parse) where `dict[str, Any]` is allowed.
|
||||
1. `conductor/directives/ban_dict_any/v1.md` — source: `python.md:247-264` (§17.1). Content: the `dict[str, Any]` ban + before/after examples + the boundary exception cross-ref.
|
||||
2. `conductor/directives/ban_any_type/v1.md` — source: `python.md:266-277` (§17.2). Content: the `Any` ban + before/after.
|
||||
3. `conductor/directives/ban_optional_returns/v1.md` — source: `python.md:279-299` (§17.3). Content: the `Optional[T]` return ban + the `Result[T]` replacement pattern.
|
||||
4. `conductor/directives/ban_hasattr_dispatch/v1.md` — source: `python.md:301-326` (§17.4). Content: the `hasattr()` for entity type dispatch ban + the typed Union alternative.
|
||||
5. `conductor/directives/ban_getattr_dispatch/v1.md` — source: `python.md:328-338` (§17.5). Content: the `getattr(x, 'field', default)` for type dispatch ban.
|
||||
6. `conductor/directives/ban_dict_get_on_known_fields/v1.md` — source: `python.md:340-350` (§17.6). Content: the `.get('field', default)` on a `dict[str, Any]` ban + direct attribute access alternative.
|
||||
7. `conductor/directives/boundary_layer_exception/v1.md` — source: `python.md:352-354` (§17.7). Content: the ONE exception — the wire boundary (TOML/JSON parse) where `dict[str, Any]` is allowed.
|
||||
|
||||
**Variant header format** (use for ALL v1 files):
|
||||
```markdown
|
||||
@@ -131,18 +131,18 @@ will test alternative encodings (rationale-first, before/after, tabular) against
|
||||
- [ ] **Step 1.2: Harvest §17.9 import/aliasing bans (3 directives)**
|
||||
|
||||
**Files to read:**
|
||||
- `conductor/code_styleguides/python.md:336-409` (§17.9 local imports + aliasing + repeated from_dict)
|
||||
- `conductor/code_styleguides/python.md:364-443` (§17.9 local imports + aliasing + repeated from_dict)
|
||||
|
||||
**Directives to create:**
|
||||
|
||||
8. `conductor/directives/ban_local_imports/v1.md` — source: `python.md:336-360` (§17.9a). Content: local imports inside functions are banned + the `try/except ImportError` exception + the vendor-SDK-warmup whitelist.
|
||||
8. `conductor/directives/ban_local_imports/v1.md` — source: `python.md:364-443` (§17.9a). Content: local imports inside functions are banned + the `try/except ImportError` exception + the vendor-SDK-warmup whitelist.
|
||||
9. `conductor/directives/ban_prefix_aliasing/v1.md` — source: `python.md` (§17.9b, within the 336-409 range). Content: `import X as _X` aliasing-for-naming-convenience is banned.
|
||||
10. `conductor/directives/ban_repeated_from_dict/v1.md` — source: `python.md` (§17.9c, within the 336-409 range). Content: repeated `.from_dict()` calls in the same expression are banned.
|
||||
|
||||
- [ ] **Step 1.3: Harvest error handling conventions (2 directives)**
|
||||
|
||||
**Files to read:**
|
||||
- `conductor/code_styleguides/error_handling.md:22-56` (the 5 patterns) + `error_handling.md:212-242` (hard rules) + `error_handling.md:274-311` (boundary types)
|
||||
- `conductor/code_styleguides/error_handling.md:22-56` (the 5 patterns) + `error_handling.md:212-264` (hard rules) + `error_handling.md:284-365` (boundary types)
|
||||
|
||||
**Directives to create:**
|
||||
|
||||
@@ -153,7 +153,7 @@ will test alternative encodings (rationale-first, before/after, tabular) against
|
||||
|
||||
**Files to read:**
|
||||
- `conductor/code_styleguides/data_oriented_design.md:176-215` (§8.5 Python Type Promotion Mandate + §8.6 Boundary Layer + §8.7 C11 framing)
|
||||
- `conductor/code_styleguides/type_aliases.md:40-81` (Metadata boundary type + when to promote + when NOT to promote)
|
||||
- `conductor/code_styleguides/type_aliases.md:13-87` (the canonical alias set + the extended per-aggregate dataclasses table) + `type_aliases.md:89-160` (Decision Pattern 2.5 — when to promote to its own dataclass) + `type_aliases.md:284-365` (boundary types + anti-patterns)
|
||||
|
||||
**Directives to create:**
|
||||
|
||||
@@ -166,8 +166,8 @@ will test alternative encodings (rationale-first, before/after, tabular) against
|
||||
**Files to read:**
|
||||
- `conductor/code_styleguides/python.md:7-21` (§1 Indentation + §2 Type Annotations)
|
||||
- `conductor/code_styleguides/python.md:64-71` (§8 AI-Agent Specific Conventions — no comments, no diagnostic noise)
|
||||
- `conductor/code_styleguides/python.md:185-199` (§13 Vertical Compaction)
|
||||
- `conductor/code_styleguides/python.md:175-184` (§12 SDM)
|
||||
- `conductor/code_styleguides/python.md:202-211` (§12 SDM)
|
||||
- `conductor/code_styleguides/python.md:212-224` (§13 Vertical Compaction)
|
||||
- `conductor/workflow.md:5-20` (Code Style section)
|
||||
|
||||
**Directives to create:**
|
||||
@@ -176,14 +176,14 @@ will test alternative encodings (rationale-first, before/after, tabular) against
|
||||
17. `conductor/directives/no_comments_in_body/v1.md` — source: `python.md:66` + `AGENTS.md:56`. Content: no comments in source code; documentation lives in `/docs`. Only comment on *why* when non-obvious.
|
||||
18. `conductor/directives/no_diagnostic_noise/v1.md` — source: `python.md:70` + `AGENTS.md` "No Diagnostic Noise in Production" section. Content: no `sys.stderr.write("[XYZ_DIAG] ...")` in production code. Diag goes to log files or temp scripts.
|
||||
19. `conductor/directives/type_hints_required/v1.md` — source: `python.md:24-31` + `product-guidelines.md:58`. Content: mandatory strict type hints for all parameters, return types, and global variables.
|
||||
20. `conductor/directives/sdm_dependency_tags/v1.md` — source: `python.md:175-184` (§12) + `product-guidelines.md:59`. Content: Structural Dependency Mapping tags (`[C: ...]`, `[M: ...]`, `[U: ...]`) in docstrings for AI-assisted impact analysis.
|
||||
20. `conductor/directives/sdm_dependency_tags/v1.md` — source: `python.md:202-211` (§12) + `product-guidelines.md:59`. Content: Structural Dependency Mapping tags (`[C: ...]`, `[M: ...]`, `[U: ...]`) in docstrings for AI-assisted impact analysis.
|
||||
|
||||
- [ ] **Step 1.6: Harvest file/taxonomy conventions (3 directives)**
|
||||
|
||||
**Files to read:**
|
||||
- `AGENTS.md:62-76` (File Size and Naming Convention HARD RULE)
|
||||
- `conductor/workflow.md:45` (File Naming Convention HARD RULE)
|
||||
- `conductor/code_styleguides/python.md:205-215` (§15 Modular Controller Pattern)
|
||||
- `conductor/code_styleguides/python.md:234-241` (§15 Modular Controller Pattern)
|
||||
|
||||
**Directives to create:**
|
||||
|
||||
@@ -281,7 +281,9 @@ tree is a parallel structure, not a replacement."
|
||||
|
||||
## Phase 2: Baseline Preset + Role-Prompt Bootstrap
|
||||
|
||||
Focus: Create the `current_baseline.md` preset that lists all 48 directives, then update the 5 role prompts with the `warm with:` bootstrap.
|
||||
Focus: Create the `current_baseline.md` preset that lists all 48 directives, then create DUPLICATE role prompts (`.bak` files) that use the `warm with:` bootstrap. The original role prompts stay untouched as the fallback path. See the USER DIRECTIVE in spec.md §"The role-prompt bootstrap" (2026-07-02).
|
||||
|
||||
> **USER DIRECTIVE (2026-07-02):** Do NOT modify the 5 original `.md` role prompts. Make duplicates with the `.bak` suffix (e.g., `.opencode/agents/tier3-worker.md` becomes a new file `.opencode/agents/tier3-worker.md.bak` — wait, that conflicts with the extension. Use `.warm.md` instead). Update plan steps 2.3-2.7 accordingly: the output files are `.opencode/agents/tier1-orchestrator.warm.md`, `.opencode/agents/tier2-tech-lead.warm.md`, `.opencode/agents/tier3-worker.warm.md`, `.opencode/agents/tier4-qa.warm.md`, `conductor/tier2/agents/tier2-autonomous.warm.md`. The user can `mv <name>.warm.md <name>.md` to promote a duplicate to active, or `rm <name>.warm.md` to fall back.
|
||||
|
||||
- [ ] **Step 2.1: Create the baseline preset**
|
||||
|
||||
@@ -365,11 +367,11 @@ git add conductor/directives/presets/current_baseline.md
|
||||
git commit -m "feat(directives): add current_baseline preset (48 directives, all v1)"
|
||||
```
|
||||
|
||||
- [ ] **Step 2.3: Update tier1-orchestrator.md with warm with: bootstrap**
|
||||
- [ ] **Step 2.3: Create duplicate `.opencode/agents/tier1-orchestrator.warm.md` (do NOT modify the original)**
|
||||
|
||||
**File:** `.opencode/agents/tier1-orchestrator.md`
|
||||
**New file:** `.opencode/agents/tier1-orchestrator.warm.md`
|
||||
|
||||
**What to change:** Find the "MANDATORY: Pre-Action Required Reading" section (or equivalent hardcoded file list). Replace the directive-reading portion with:
|
||||
**How to create it:** Read the original `.opencode/agents/tier1-orchestrator.md` to get the FULL current content. In the duplicate, find the "MANDATORY: Pre-Action Required Reading" section (or equivalent hardcoded file list). Replace the directive-reading portion with:
|
||||
|
||||
```markdown
|
||||
## MANDATORY: Directive Warm-up
|
||||
@@ -389,39 +391,40 @@ use that instead. The user's instruction overrides the default.
|
||||
- `conductor/edit_workflow.md` — edit tool contract
|
||||
- The relevant `docs/guide_*.md` — architecture reference
|
||||
|
||||
- [ ] **Step 2.4: Update tier2-tech-lead.md with warm with: bootstrap**
|
||||
- [ ] **Step 2.4: Create duplicate `.opencode/agents/tier2-tech-lead.warm.md` (do NOT modify the original)**
|
||||
|
||||
**File:** `.opencode/agents/tier2-tech-lead.md`
|
||||
**New file:** `.opencode/agents/tier2-tech-lead.warm.md`
|
||||
|
||||
Same change as Step 2.3. The non-directive reads that stay hardcoded:
|
||||
Same procedure as Step 2.3 (read original → duplicate → swap directive-reading portion). Non-directive reads that stay hardcoded:
|
||||
- `AGENTS.md`
|
||||
- `conductor/workflow.md`
|
||||
- `conductor/edit_workflow.md`
|
||||
- `conductor/tier2/githooks/forbidden-files.txt`
|
||||
- The relevant `docs/guide_*.md`
|
||||
|
||||
- [ ] **Step 2.5: Update tier3-worker.md with warm with: bootstrap**
|
||||
- [ ] **Step 2.5: Create duplicate `.opencode/agents/tier3-worker.warm.md` (do NOT modify the original)**
|
||||
|
||||
**File:** `.opencode/agents/tier3-worker.md`
|
||||
**New file:** `.opencode/agents/tier3-worker.warm.md`
|
||||
|
||||
Same change. Note: Tier 3 may benefit from a reduced preset (fewer directives — they don't need the planning/strategy directives). But for now, use `current_baseline.md` and let the user create a `worker_minimal.md` preset later.
|
||||
Same procedure. Note: Tier 3 may benefit from a reduced preset (fewer directives — they don't need the planning/strategy directives). But for now, use `current_baseline.md` and let the user create a `worker_minimal.md` preset later.
|
||||
|
||||
- [ ] **Step 2.6: Update tier4-qa.md with warm with: bootstrap**
|
||||
- [ ] **Step 2.6: Create duplicate `.opencode/agents/tier4-qa.warm.md` (do NOT modify the original)**
|
||||
|
||||
**File:** `.opencode/agents/tier4-qa.md`
|
||||
**New file:** `.opencode/agents/tier4-qa.warm.md`
|
||||
|
||||
Same change. Tier 4 reads narrowly; the preset can be customized later.
|
||||
Same procedure. Tier 4 reads narrowly; the preset can be customized later.
|
||||
|
||||
- [ ] **Step 2.7: Update tier2-autonomous.md with warm with: bootstrap**
|
||||
- [ ] **Step 2.7: Create duplicate `conductor/tier2/agents/tier2-autonomous.warm.md` (do NOT modify the original)**
|
||||
|
||||
**File:** `conductor/tier2/agents/tier2-autonomous.md`
|
||||
**New file:** `conductor/tier2/agents/tier2-autonomous.warm.md`
|
||||
|
||||
This file has the most extensive hardcoded reading list (11 files, lines 32-52). Replace the directive-reading portion with the `warm with:` bootstrap. The non-directive reads that stay:
|
||||
Same procedure. This file has the most extensive hardcoded reading list. Replace the directive-reading portion with the `warm with:` bootstrap. The non-directive reads that stay:
|
||||
- `AGENTS.md`
|
||||
- `conductor/workflow.md`
|
||||
- `conductor/edit_workflow.md`
|
||||
- `conductor/tier2/githooks/forbidden-files.txt`
|
||||
- `conductor/tracks/tier2_leak_prevention_20260620/spec.md` (this is a track spec, not a directive — stays hardcoded)
|
||||
- `conductor/tracks/tier2_leak_prevention_20260620/spec.md` (this is a track spec, not a directive — stays hardcoded)
|
||||
|
||||
- [ ] **Step 2.8: Commit the role-prompt updates**
|
||||
|
||||
+11
-2
@@ -85,6 +85,8 @@ tested yet. This preset is the control group for future experiments.
|
||||
|
||||
### The role-prompt bootstrap
|
||||
|
||||
> **USER DIRECTIVE (2026-07-02):** Phase 2's "update role prompts" step is **making duplicates** of the role prompts (e.g., `.opencode/agents/tier3-worker.md.bak`), NOT modifying the originals in place. The duplicates use the `warm with:` bootstrap. The originals stay untouched as the fallback path. This means if a role-prompt regression surfaces, the user can `mv .bak .md` to restore. Do NOT modify the original `.md` role prompts.
|
||||
|
||||
The 5 role prompts (`.opencode/agents/tier1-orchestrator.md`, `tier2-tech-lead.md`, `tier3-worker.md`, `tier4-qa.md`, and `conductor/tier2/agents/tier2-autonomous.md`) have a hardcoded "MANDATORY: Pre-Action Required Reading" section listing ~11 specific files. This is replaced with a single `warm with:` directive.
|
||||
|
||||
```markdown
|
||||
@@ -131,7 +133,7 @@ The directives are NOT limited to the 11 files the role prompts mandate. They're
|
||||
- Architecture documentation ("Thread domains are separated by...")
|
||||
- Reference material ("The 45-tool inventory includes...")
|
||||
|
||||
**Sources to comb (non-exhaustive):**
|
||||
**Sources to comb (non-exhaustive; updated 2026-07-02 to cover all 14 `conductor/code_styleguides/*.md`):**
|
||||
- `AGENTS.md` — "Critical Anti-Patterns", "File Size and Naming Convention", "Session-Learned Anti-Patterns", "Process Anti-Patterns"
|
||||
- `conductor/workflow.md` — "Code Style", "Guiding Principles", "Testing Requirements", "Known Pitfalls", "Process Anti-Patterns", "Tier 2 Autonomous Sandbox conventions"
|
||||
- `conductor/product-guidelines.md` — "Core Value", "Code Standards & Architecture", "Data-Oriented Error Handling", "Phase 5: Heavy Curation"
|
||||
@@ -145,9 +147,16 @@ The directives are NOT limited to the 11 files the role prompts mandate. They're
|
||||
- `conductor/code_styleguides/rag_integration_discipline.md` — "conservative-RAG rule"
|
||||
- `conductor/code_styleguides/cache_friendly_context.md` — stable-to-volatile ordering
|
||||
- `conductor/code_styleguides/knowledge_artifacts.md` — the harvest pattern
|
||||
- `conductor/code_styleguides/config_state_owner.md` — AppController is the single source of truth for config I/O (directive: no `models.save_config`/`models.load_config` in `src/`; enforced by `scripts/audit_no_models_config_io.py`)
|
||||
- `conductor/code_styleguides/workspace_paths.md` — test-infrastructure paths must live under `./tests/` (directive: no `tmp_path_factory.mktemp`, no env vars for test paths, no CLI args for test paths; conftest is the right place)
|
||||
- `conductor/code_styleguides/test_sandbox.md` — the test-sandbox hardening conventions (FR1 runtime guard, FR2 live_gui workspace fixture, FR3 sync coalescing)
|
||||
- `conductor/code_styleguides/chroma_cache.md` — ChromaDB cache conventions (if directive-like content present)
|
||||
- `conductor/code_styleguides/code_path_audit.md` — the per-aggregate data-pipeline audit convention
|
||||
- `docs/AGENTS.md` — "Convention Enforcement"
|
||||
- `docs/Readme.md` — any directive-like content in feature descriptions
|
||||
|
||||
> **Note (added 2026-07-02):** the original source list named 9 of the 14 styleguides. The 5 added here (`config_state_owner.md`, `workspace_paths.md`, `test_sandbox.md`, `chroma_cache.md`, `code_path_audit.md`) contain directive-like content that should be harvested. The harvester should verify each contains a harvestable directive before creating a `v1.md`; if a styleguide is purely descriptive (no imperative/ban/preference), skip it and note the skip in the harvest commit.
|
||||
|
||||
**Granularity resolution:** the harvest produces a candidate list. Then the question of which directives to merge (e.g., `ban_prefix_aliasing` + `no_local_imports` might become `import_hygiene`), split, or keep standalone is resolved in the harvest phase — not locked in upfront.
|
||||
|
||||
### The original docs stay untouched
|
||||
@@ -220,7 +229,7 @@ The video analysis track is initialized as a separate conductor track (`video_an
|
||||
|
||||
## See Also
|
||||
|
||||
- `conductor/tier2/agents/tier2-autonomous.md` — the role prompt that will be updated with `warm with:`
|
||||
- `conductor/tier2/agents/tier2-autonomous.md` — the role prompt that will be updated with `warm with:` (verified present 2026-07-02; 17,940 bytes)
|
||||
- `conductor/tier2/commands/tier-2-auto-execute.md` — the slash command template
|
||||
- `conductor/code_styleguides/python.md` §17 — the primary source of directives to harvest
|
||||
- `conductor/code_styleguides/error_handling.md` — the Result[T] convention to harvest
|
||||
@@ -0,0 +1,204 @@
|
||||
# Track state for directive_hotswap_harness_20260627
|
||||
# Initialized by Tier 1 Orchestrator on 2026-06-27.
|
||||
# Implementation delegated to Tier 2 (autonomous) or Tier 3 worker dispatch.
|
||||
# This is Track 1 of Campaign A (Directive Encoding Campaign).
|
||||
# Phase 2 + Phase 3 completed 2026-07-02 (manual verification §3.2 deferred to user).
|
||||
|
||||
[meta]
|
||||
track_id = "directive_hotswap_harness_20260627"
|
||||
name = "Directive Hot-Swap Harness (OpenCode Directive Presets)"
|
||||
status = "active"
|
||||
current_phase = 5
|
||||
last_updated = "2026-07-02"
|
||||
|
||||
[blocked_by]
|
||||
# None. Pure documentation/track-artifact work; no code changes, no tests,
|
||||
# zero overlap with any running track.
|
||||
|
||||
[blocks]
|
||||
directive_encoding_experiments = "planned (future; v2+ variant authoring)"
|
||||
manual_slop_directive_lab = "planned (future; GUI integration)"
|
||||
|
||||
[phases]
|
||||
phase_1 = { status = "completed", checkpointsha = "ce0564fe", name = "Directive Harvest (10 steps: 51 directives from doc tree into conductor/directives/)" }
|
||||
phase_2 = { status = "completed", checkpointsha = "6ba4bdd", name = "Baseline Preset + Role-Prompt Bootstrap (8 steps: preset + 5 role-prompt warm with: updates)" }
|
||||
phase_3 = { status = "completed", checkpointsha = "c9f30abf", name = "Verification + End-of-Track (4 steps: dir structure verify + manual LLM verify + report + commit)" }
|
||||
phase_4 = { status = "completed", checkpointsha = "465433e0", name = "Directive Library Expansion (scope A back-fill + 15 new directives + aggregation script)" }
|
||||
phase_5 = { status = "completed", checkpointsha = "b2ebe25d", name = "Scavenge Pass (15 new directives from MMA_Support + nagent_review + intent_dsl_survey + handoffs)" }
|
||||
|
||||
[tasks]
|
||||
# Phase 1: directive harvest
|
||||
t1_1 = { status = "completed", commit_sha = "f4dfb846", description = "Harvest 17.1-17.7 banned patterns (7 directives: ban_dict_any, ban_any_type, ban_optional_returns, ban_hasattr_dispatch, ban_getattr_dispatch, ban_dict_get_on_known_fields, boundary_layer_exception)" }
|
||||
t1_2 = { status = "completed", commit_sha = "545ccee1", description = "Harvest 17.9 import/aliasing bans (3 directives: ban_local_imports, ban_prefix_aliasing, ban_repeated_from_dict)" }
|
||||
t1_3 = { status = "completed", commit_sha = "0340925d", description = "Harvest error handling conventions (2 directives: result_error_pattern, nil_sentinel_pattern)" }
|
||||
t1_4 = { status = "completed", commit_sha = "62fc04b1", description = "Harvest type/data-structure conventions (3 directives: typed_dataclass_fields, metadata_boundary_type, update boundary_layer_exception)" }
|
||||
t1_5 = { status = "completed", commit_sha = "b5baaaaa", description = "Harvest code style directives (5 directives: one_space_indent, no_comments_in_body, no_diagnostic_noise, type_hints_required, sdm_dependency_tags)" }
|
||||
t1_6 = { status = "completed", commit_sha = "fa488ccf", description = "Harvest file/taxonomy conventions (3 directives: file_naming_convention, no_new_src_files_without_permission, large_files_are_fine)" }
|
||||
t1_7 = { status = "completed", commit_sha = "412494d2", description = "Harvest process/workflow directives (10 directives: atomic_per_task_commits, tdd_red_green_required, ban_arbitrary_core_mocking, live_gui_poll_not_sleep, batch_verification_not_isolation, git_hard_bans, ban_day_estimates, no_output_filtering, prefer_targeted_tier_runs, mandatory_research_first)" }
|
||||
t1_8 = { status = "completed", commit_sha = "77ee0c68", description = "Harvest process anti-patterns (6 directives: no_skip_markers_as_avoidance, deduction_loop_limit, report_instead_of_fix_ban, scope_creep_track_doc_ban, inherited_cruft_ask_first, verbose_commit_message_ban)" }
|
||||
t1_9 = { status = "completed", commit_sha = "fa3e5381", description = "Harvest GUI/architecture directives (5 directives: imgui_scope_verification, modular_controller_pattern, ui_delegation_for_hot_reload, strict_state_management, comprehensive_logging)" }
|
||||
t1_10 = { status = "completed", commit_sha = "cdc0f140", description = "Harvest feature-flag + RAG + cache + knowledge directives + 4 new styleguides (8 directives: feature_flag_delete_to_turn_off, rag_six_rules, cache_stable_to_volatile, knowledge_harvest_pattern, config_state_owner, workspace_paths, test_sandbox, chroma_cache_path). Skipped code_path_audit.md (descriptive)." }
|
||||
t1_11 = { status = "completed", commit_sha = "ce0564fe", description = "Commit the directive harvest summary (51 v1.md files; +1 meta-summary HARVEST_SUMMARY.md)" }
|
||||
# Phase 2: baseline preset + role-prompt bootstrap
|
||||
t2_1 = { status = "completed", commit_sha = "2ddaeb52", description = "Create conductor/directives/presets/current_baseline.md (51 directives listed; not the 48 in the plan)" }
|
||||
t2_2 = { status = "completed", commit_sha = "2ddaeb52", description = "Commit the baseline preset (combined with t2_1 in a single atomic commit; commit includes 1-line state.toml scope drift setting phase_2 to in_progress)" }
|
||||
t2_3 = { status = "completed", commit_sha = "35831084", description = "Create .opencode/agents/tier1-orchestrator.warm.md duplicate with warm with: bootstrap (Session Start Checklist items 6-9 replaced)" }
|
||||
t2_4 = { status = "completed", commit_sha = "b082cb15", description = "Create .opencode/agents/tier2-tech-lead.warm.md duplicate with warm with: bootstrap (TWO sections: CRITICAL: Read the canonical docs FIRST + Session Start Checklist; items 6-9 replaced in both)" }
|
||||
t2_5 = { status = "completed", commit_sha = "40764252", description = "Create .opencode/agents/tier3-worker.warm.md duplicate with warm with: bootstrap (Task Start Checklist items 2-3 replaced)" }
|
||||
t2_6 = { status = "completed", commit_sha = "b2aebbc9", description = "Create .opencode/agents/tier4-qa.warm.md duplicate with warm with: bootstrap (Context Amnesia 'must read' sentence replaced)" }
|
||||
t2_7 = { status = "completed", commit_sha = "7b0d1164", description = "Create conductor/tier2/agents/tier2-autonomous.warm.md duplicate with warm with: bootstrap (Pre-Action Required Reading items 7-10 replaced)" }
|
||||
t2_8 = { status = "completed", commit_sha = "6ba4bdd", description = "Combined summary meta-commit (empty -- all 5 .warm.md files were committed atomically in t2_3..t2_7)" }
|
||||
# Phase 3: verification + end-of-track
|
||||
t3_1 = { status = "completed", commit_sha = "bbbfbd39", description = "Verify directory structure (53 entries, 51 v1.md files, preset exists, 5 .warm.md role-prompt duplicates exist, 5 originals untouched) -- all 5 criteria PASS" }
|
||||
t3_2 = { status = "deferred", commit_sha = "", description = "Manual verification: does the LLM follow the warm with: instruction? DEFERRED to user per directive (requires live OpenCode session)" }
|
||||
t3_3 = { status = "completed", commit_sha = "PENDING", description = "Write docs/reports/TRACK_COMPLETION_directive_hotswap_harness_20260627.md" }
|
||||
t3_4 = { status = "in_progress", commit_sha = "PENDING", description = "Commit the end-of-track report + this state.toml update atomically" }
|
||||
# Phase 4: directive library expansion (2026-07-02 user directive)
|
||||
t4_1 = { status = "completed", commit_sha = "e9a19523", description = "E.1 Back-fill batch 1/5: atomic_per_task_commits, ban_any_type, ban_arbitrary_core_mocking, ban_day_estimates, ban_dict_any, ban_dict_get_on_known_fields, ban_getattr_dispatch, ban_hasattr_dispatch (8 directives)" }
|
||||
t4_2 = { status = "completed", commit_sha = "71e01dfe", description = "E.1 Back-fill batch 2/5: ban_local_imports, ban_optional_returns, ban_prefix_aliasing, ban_repeated_from_dict, batch_verification_not_isolation, boundary_layer_exception, cache_stable_to_volatile, chroma_cache_path, comprehensive_logging (9 directives)" }
|
||||
t4_3 = { status = "completed", commit_sha = "83149962", description = "E.1 Back-fill batch 3/5: config_state_owner, deduction_loop_limit, feature_flag_delete_to_turn_off, file_naming_convention, git_hard_bans, imgui_scope_verification, inherited_cruft_ask_first, knowledge_harvest_pattern, large_files_are_fine (9 directives)" }
|
||||
t4_4 = { status = "completed", commit_sha = "68352ee2", description = "E.1 Back-fill batch 4/5: live_gui_poll_not_sleep, mandatory_research_first, metadata_boundary_type, modular_controller_pattern, nil_sentinel_pattern, no_comments_in_body, no_diagnostic_noise, no_new_src_files_without_permission, no_output_filtering (9 directives)" }
|
||||
t4_5 = { status = "completed", commit_sha = "5b0f932c", description = "E.1 Back-fill batch 5a/5: no_skip_markers_as_avoidance, one_space_indent, prefer_targeted_tier_runs, rag_six_rules, report_instead_of_fix_ban, result_error_pattern, scope_creep_track_doc_ban, sdm_dependency_tags, strict_state_management (9 directives)" }
|
||||
t4_6 = { status = "completed", commit_sha = "559db09c", description = "E.1 Back-fill batch 5b/5: tdd_red_green_required, test_sandbox, type_hints_required, typed_dataclass_fields, ui_delegation_for_hot_reload, verbose_commit_message_ban, workspace_paths (7 directives; total back-fill: 51)" }
|
||||
t4_7 = { status = "completed", commit_sha = "8407742a", description = "E.2 Harvest from docs/AGENTS.md (2 directives): core_value_read_first, convention_enforcement_4_mechanisms" }
|
||||
t4_8 = { status = "completed", commit_sha = "782530ba", description = "E.2 Harvest from conductor/edit_workflow.md (6 directives): edit_small_incremental, verify_before_editing, decorator_orphan_pitfall, ast_parse_insufficient, contract_change_audit, preserve_line_endings" }
|
||||
t4_9 = { status = "completed", commit_sha = "a758f0a4", description = "E.2 Harvest from docs/guide_testing.md (5 directives): no_real_io_during_tests, live_gui_session_scoped_no_restart, defer_not_catch_for_native_crashes, test_narrow_not_kitchen_sink, ast_verify_class_methods_after_edit" }
|
||||
t4_10 = { status = "completed", commit_sha = "454fac1b", description = "E.2 Harvest from docs/guide_state_lifecycle.md (2 directives): undo_redo_100_snapshot_capacity, reset_session_preserves_project_path (total scope A: 15 directives)" }
|
||||
t4_11 = { status = "completed", commit_sha = "9d3222dd", description = "E.3 Write scripts/aggregate_directives.py + 5 pytest tests (stdlib-only; reads v1.md only, never meta.md; supports stdout and -o)" }
|
||||
t4_12 = { status = "completed", commit_sha = "465433e0", description = "E.4 Update current_baseline preset with 15 new directives (total 66; alphabetical order preserved)" }
|
||||
t4_13 = { status = "completed", commit_sha = "8ef66e02", description = "E.5 Update state.toml with task records e_1..e_4 and phase_4 entry; archive throwaway expansion helpers under scripts/tier2/artifacts/" }
|
||||
t5_1 = { status = "completed", commit_sha = "PENDING", description = "Every v1.md starts with an explicit '# <rule-statement>' header (63 back-filled in 8 batches; 3 already-titled: chroma_cache_path, config_state_owner, workspace_paths). New pytest test asserts the header on all 66." }
|
||||
# Phase 5: scavenge pass — directive library expansion from unread markdown
|
||||
# Per user directive 2026-07-02: "can markdown you haven't read yet to make sure you scavanged all possible directives buried in this codebase. Ignore most tracks except the intent based dsl track and the nagent track."
|
||||
s_1 = { status = "completed", commit_sha = "bea5d6b1", description = "Scavenge batch 1/3: 5 directives from docs/MMA_Support/ — tier1_orchestrator_no_implementation, tier3_worker_amnesia, tier4_qa_compressed_fix, token_firewall_prevents_bloat, stub_before_implement" }
|
||||
s_2 = { status = "completed", commit_sha = "ebca201d", description = "Scavenge batch 2/3: 5 directives from conductor/tracks/nagent_review_20260608/ — subagent_returns_artifact_not_transcript, parse_failure_visible_to_conversation, state_visible_at_the_right_layer, file_id_stable_across_rename, decompose_or_isolate_never_offload" }
|
||||
s_3 = { status = "completed", commit_sha = "883f7ec5", description = "Scavenge batch 3/3: 5 directives from intent_dsl_survey + handoffs — intent_signal_postfix_not_xml, pipeline_immediate_mode_no_object, dsl_uses_first_class_spans_for_errors, search_all_call_sites_after_signature_change, run_full_tier_after_phase_refactor" }
|
||||
s_4 = { status = "completed", commit_sha = "9656bf2e", description = "Update current_baseline preset with 15 new directives alphabetically interleaved (total 81); updated Notes section to track three harvest passes" }
|
||||
s_5 = { status = "completed", commit_sha = "PENDING", description = "Update state.toml with s_1..s_4 task records + phase_5 entry; commit atomically with this file" }
|
||||
s_6 = { status = "completed", commit_sha = "b2ebe25d", description = "Add tests/test_scavenge_directives_lift.py: 79 parametrized cases verifying the 15 new directives have v1.md + meta.md, headings, sections, preset references; plus 5 aggregate tests for total count >= 81" }
|
||||
|
||||
[verification]
|
||||
phase_1_complete = true
|
||||
phase_2_complete = true
|
||||
phase_3_complete = true # §3.1 + §3.3 + §3.4 done; §3.2 deferred to user
|
||||
phase_4_complete = true # scope A back-fill + 15 new directives + aggregation script + preset update
|
||||
phase_5_complete = true # scavenge pass — 15 new directives from MMA_Support + nagent_review + intent_dsl_survey + handoffs + test + preset update
|
||||
directive_count = 81
|
||||
back_fill_meta_md_count = 81 # every v1.md (51 + 15 + 15) has a corresponding meta.md
|
||||
preset_exists = true
|
||||
role_prompts_updated = true # the 5 .warm.md duplicates exist; originals are intact as rollback
|
||||
end_of_track_report_exists = true
|
||||
manual_verification_deferred = true # §3.2 deferred to user
|
||||
aggregation_script_exists = true # scripts/aggregate_directives.py
|
||||
aggregation_tests_pass = true # 15 tests in tests/test_aggregate_directives.py (original 5 + 10 added during Phase 4 back-fill)
|
||||
scavenge_lift_tests_pass = true # 79 tests in tests/test_scavenge_directives_lift.py
|
||||
|
||||
[campaign_context]
|
||||
campaign_name = "Directive Encoding Campaign (Campaign A)"
|
||||
track_1 = "directive_hotswap_harness_20260627 (THIS; harvest + scaffold + baseline preset + role-prompt bootstrap + Phase A expansion) — Phase 4 complete"
|
||||
track_2 = "directive_encoding_experiments (future; v2+ variant authoring + preset experimentation)"
|
||||
track_3 = "manual_slop_directive_lab (future; GUI integration)"
|
||||
sibling_campaign = "Video Analysis Campaign 2 (Campaign B; 4 new videos; separate track)"
|
||||
cross_campaign_relationship = "Intellectual cross-pollination; no hard dependency."
|
||||
|
||||
[expansion_20260702]
|
||||
# Phase 4 expansion: scope A back-fill + new directives + aggregation script
|
||||
directives_before = 51
|
||||
directives_after = 66
|
||||
new_directives_count = 15
|
||||
new_directive_sources = "docs/AGENTS.md (2), conductor/edit_workflow.md (6), docs/guide_testing.md (5), docs/guide_state_lifecycle.md (2)"
|
||||
metadata_convention = "Per user directive 2026-07-02: v1.md holds pure body; meta.md holds provenance (why/source/lifted). Aggregator NEVER reads meta.md."
|
||||
aggregation_script = "scripts/aggregate_directives.py (stdlib-only; 5 pytest tests in tests/test_aggregate_directives.py)"
|
||||
|
||||
[titles_20260702]
|
||||
# Per user directive 2026-07-02: every v1.md must open with an explicit '# <rule-statement>' heading.
|
||||
# Complaint: "banned local imports doesn't explicitly state in its content that local imports is banned."
|
||||
directives_total = 66
|
||||
titles_back_filled = 63
|
||||
already_titled = 3 # chroma_cache_path, config_state_owner, workspace_paths (top-level '# ' heading already present)
|
||||
batches = 8 # 8 back-fill commits (~8 files each) + 1 test/state commit
|
||||
test_added = "tests/test_aggregate_directives.py::test_every_v1_has_top_level_heading (+ test_v1_heading_is_not_meta_provenance_format)"
|
||||
aggregation_pollution_preserved = true # scripts/aggregate_directives.py output has no meta.md leakage after header back-fill
|
||||
|
||||
[scavenge_20260702]
|
||||
# Phase 5 scavenge pass: directive library expansion from unread markdown.
|
||||
# Per user directive 2026-07-02: "can markdown you haven't read yet to make sure you scavanged all possible directives buried in this codebase."
|
||||
# Scope: docs/MMA_Support/, docs/handoffs/, docs/ideation/, docs/superpowers/{specs,plans}/, docs/reports/ (recursing except code_path_audit/ + license_cve_audit/), docs/type_registry/, docs/transcripts/, docs/Readme.md, docs/smoke_test_*.md, conductor/todos/, conductor/tracks/intent_dsl_survey_20260612/, conductor/tracks/nagent_review_20260608/.
|
||||
# Out of scope: other conductor/tracks/<other>/ (the user said "ignore most tracks except the intent based dsl track and the nagent track"); conductor/archive/; this track's own history.
|
||||
directives_before = 66
|
||||
directives_after = 81
|
||||
new_directives_count = 15
|
||||
new_directive_sources = "docs/MMA_Support/ (5), conductor/tracks/nagent_review_20260608/ (5), conductor/tracks/intent_dsl_survey_20260612/ + docs/handoffs/ (5)"
|
||||
cap_applied = 30 # user cap was ~30; lifted 15 (strongest, most actionable, most general-purpose)
|
||||
skipped_categories = ["Implementation-specific tactical notes", "Historical commentary without an actionable current rule", "Content about the manual-slop app's specific UI/feature", "Rules that conflict with existing 66 directives"]
|
||||
commits = 4 # 3 directive batches + 1 preset update + 1 test = 5 total; counted as 4 directive-related commits + 1 test commit
|
||||
test_added = "tests/test_scavenge_directives_lift.py (79 parametrized cases + 5 aggregate tests)"
|
||||
|
||||
[scavenge_20260703]
|
||||
# Phase 6 scavenge pass: directive library expansion from docs/reports/ historical slices.
|
||||
# Per user directive 2026-07-03: "scavenge for additional directives from docs/reports/2026-03-02/ through docs/reports/2026-06-08/. The user wants a full sweep — process every file in this slice."
|
||||
# Scope: docs/reports/2026-03-02/ (1 file: MCP_BUGFIX_20260306.md), docs/reports/2026-05-04/ (5 files), docs/reports/2026-05-11/ (1 file: ai_decoupling_revert_report.md), docs/reports/2026-06-01/ (10 files), docs/reports/2026-06-08/ (29 files). Total 46 files.
|
||||
# Out of scope: this track's own history; the .txt files in docs/reports/2026-06-01/ (startup_audit_20260606.txt, startup_baseline_20260606.txt — not markdown); other docs/reports/ slices.
|
||||
directives_before = 81
|
||||
directives_after = 90
|
||||
new_directives_count = 9
|
||||
new_directive_sources = "docs/reports/2026-03-02/MCP_BUGFIX_20260306.md (1), docs/reports/2026-05-11/ai_decoupling_revert_report.md + docs/reports/2026-06-01/qwen_llama_grok_followup_audit_20260611.md (2), docs/reports/2026-06-08/ (6: docs_sync_test_era_20260610, nagent_review_session_20260612, batch_resilience_plan_20260608, TEST_REGRESSION_ANALYSIS_MINIMAX_OPENAI_20260613, workflow_markdown_audit_20260608 x2 rules)"
|
||||
cap_applied = 20 # user cap was 20; lifted 9 (strongest, most actionable, most general-purpose)
|
||||
skipped_categories = ["Implementation-specific tactical notes (e.g. specific ImGui scope fix sites)", "Historical commentary without an actionable current rule", "Content about the manual-slop app's specific UI/feature", "Rules already covered by the existing 81 directives", "Design ideation without a concrete current rule", "Single-file post-mortems that turned out to be pre-existing bugs (not actionable as a directive)"]
|
||||
commits = 3 # 1 commit per source-file batch (3 batches: 2026-03-02/ + 2026-05-04/, 2026-05-11/ + 2026-06-01/, 2026-06-08/) + 1 preset/state update commit = 4 total; counted as 3 directive-related commits + 1 preset/state commit
|
||||
test_added = "tests/test_scavenge_batch_1.py (9 parametrized cases + 2 aggregate tests)"
|
||||
|
||||
[scavenge_20260703_batch_2]
|
||||
# Phase 7 scavenge pass: directive library expansion from docs/superpowers/specs/ design specs.
|
||||
# Per user directive 2026-07-03: scavenge sweep 2/5 across the 22 design specs in docs/superpowers/specs/.
|
||||
# Scope: 22 files in docs/superpowers/specs/ (2026-05-10 through 2026-07-01).
|
||||
# Out of scope: this track's own history; the per-spec plan files in docs/superpowers/plans/.
|
||||
directives_before = 100 # 90 baseline + 10 from other parallel sweeps during my read pass
|
||||
directives_after = 116 # +16 from this batch
|
||||
new_directives_count = 16
|
||||
new_directive_sources = "2026-05-13-ai-server-ipc (defer heavy SDK imports), 2026-05-15-profiling-system (graceful optional dependency degradation), 2026-06-03-ui-polish (interceptor-on-shape + em-dash for missing data), 2026-06-10-prior-session-sepia (float-only math + view composes + honest API limit disclosure), 2026-07-01-chronology-v2 (git-history-as-truth + per-row evidence + regen cadence + quality gate + fresh filesystem walk), 2026-07-01-mma-quarantine (gate engine not types + test classification via import + 3-tier test strategy + layered runtime/test flags)"
|
||||
cap_applied = 20 # user cap was 20; lifted 16 (strongest, most actionable, most general-purpose)
|
||||
skipped_categories = ["Implementation-specific tactical notes (e.g. specific ImGui scope fix sites, specific test-mock fixes)", "Architectural descriptions without an actionable current rule", "Project-specific application rules (Ctrl+Shift+P binding, Docker deployment, command palette)", "Rules already covered by the existing 100 directives (defer-not-catch, property delegation, poll-not-sleep, etc.)", "Design ideation without a concrete current rule", "Per-spec implementation checklists that don't generalize"]
|
||||
commits = 3 # 1 commit per source-file batch (3 batches: ai-server-ipc+profiling, ui-polish+prior-session, chronology-v2+mma-quarantine) + 1 preset/state/test commit = 4 total; counted as 3 directive-related commits + 1 preset/state/test commit
|
||||
test_added = "tests/test_scavenge_batch_2.py (83 parametrized cases + 5 aggregate tests including the meta-source-cites-docs-superpowers-specs check)"
|
||||
|
||||
[scavenge_20260703_batch_4]
|
||||
# Phase 7 scavenge sweep 4/5: directive library expansion from conductor/tracks/ + conductor/tier2/ + conductor/code_styleguides/ + conductor/todos/.
|
||||
# Per user directive 2026-07-03: 5 parallel sweep workers. This worker (b_4) handled tracks + commands + styleguides + todos.
|
||||
# Scope: conductor/tracks/intent_dsl_survey_20260612/ (the remaining files after the prior scavenge lifted from spec.md only); conductor/tracks/nagent_review_20260608/ (the remaining files after the prior scavenge lifted from takeaways only); conductor/tier2/agents/tier2-autonomous.md; conductor/tier2/commands/tier-2-auto-execute.md; conductor/code_styleguides/agent_memory_dimensions.md; conductor/code_styleguides/code_path_audit.md; conductor/code_styleguides/type_aliases.md; conductor/todos/fix_test_suite_failures_20260516.md; conductor/todos/TODO_test_full_live_workflow.md; conductor/todos/TODO_test_full_live_workflow_v2.md; conductor/tracks/directive_hotswap_harness_20260627/dispatch_tier3_phase1.md.
|
||||
directives_before = 90
|
||||
directives_after = 108
|
||||
new_directives_count = 18
|
||||
new_directive_sources = "conductor/tier2/agents/tier2-autonomous.md + tier-2-auto-execute.md (8: use_batched_test_runner, ban_appdata_paths, master_branch_default, timeline_is_immutable, acknowledgment_in_first_commit, end_of_track_report_required, throwaway_scripts_isolated_subdir, per_phase_metric_regression_fix); conductor/code_styleguides/type_aliases.md §2.5 (per_aggregate_dataclass_promotion); conductor/code_styleguides/agent_memory_dimensions.md §7 (per_dimension_pick_dim_not_tool); conductor/tracks/nagent_review_20260608/decisions.md + nagent_review_v3_1_20260620.md (2: no_conductor_yaml_for_artifacts, per_conversation_scratch_dir); conductor/tracks/directive_hotswap_harness_20260627/dispatch_tier3_phase1.md (2: warm_md_duplicates_not_in_place, verbatim_lift_not_rewrite); conductor/todos/TODO_test_full_live_workflow.md + _v2.md (4: deterministic_signal_endpoint_pattern, failure_message_actionable_not_vague, submit_io_lazy_pool_recreation, fragile_test_in_batch_is_failing_test)"
|
||||
cap_applied = 25 # user cap was 25; lifted 18 (strongest, most actionable, most general-purpose)
|
||||
skipped_categories = ["Pure descriptive prose (cluster research reports — prior art surveys without current actionable rules)", "Aspirational future plans (decisions.md candidates — not yet implemented)", "Historical commentary without a current actionable rule (most v2.3 + v3 review prose)", "Content about the manual-slop app's specific UI/feature", "Rules already covered by the existing 90 directives (git_hard_bans already covers git revert/reset/stash ban; atomic_per_task_commits already covers per-task commit discipline)", "code_path_audit.md (descriptive audit tool conventions, not agent directives — same as Phase 1 skip per HARVEST_SUMMARY.md:26-27)", "agent_memory_dimensions.md §0-§6 (descriptive of the 4 dims; only the §7 decision tree lifted as one directive)", "fix_test_suite_failures_20260516.md (specific tactical fixes for a single track's regressions — not generalizable)", "messing_around.md (sample ideation without an actionable rule)"]
|
||||
commits = 4 # 1 commit per source-cluster batch + 1 preset/state/test commit = 5 total; counted as 4 directive-related commits + 1 preset/state/test commit
|
||||
test_added = "tests/test_scavenge_batch_4.py (94 parametrized cases + 2 aggregate tests; 18 directives × 5 contract checks = 90 + 4 aggregate = 94 total)"
|
||||
|
||||
|
||||
[scavenge_20260703_batch_5]
|
||||
# Phase 7 scavenge sweep 5/5: directive library expansion from docs/guide_*.md + .opencode/agents/*.md + .opencode/commands/*.md + .agents/agents/*.md + .agents/skills/mma-*/SKILL.md + mma-orchestrator/SKILL.md + docs/transcripts/session-ses_12c3.md.
|
||||
# Per user directive 2026-07-03: 5 parallel sweep workers. This worker (b_5) handled guides + role prompts + transcripts.
|
||||
# Scope: 32 docs/guide_*.md deep-dives, 6 .opencode/agents/*.md + 9 .opencode/commands/*.md role prompts, 4 .agents/agents/*.md + 5 .agents/skills/mma-*/SKILL.md role prompts, the mma-orchestrator/SKILL.md, the docs/transcripts/session-ses_12c3.md transcript, and the docs/handoffs/PROMPT_FOR_TIER_1.md handoff doc.
|
||||
# Out of scope: docs/ideation/* (aspirational; no actionable rule), docs/transcripts/*_youtube_* (others' transcripts; chatty), docs/type_registry/*.md (auto-generated schema dumps; treated as data, not directives).
|
||||
directives_before = 124 # post-batch-4 baseline (108 batch-4 + 16 batch-2 + 90 baseline-original + parallel sweep adds)
|
||||
directives_after = 135
|
||||
new_directives_count = 11
|
||||
new_directive_sources = "meta_tooling_app_boundary_check (guide_meta_boundary.md + The Overlap and Entropy Vector); tier1_first_commit_6file_acknowledgment (parallel of Tier 2 acknowledgment_in_first_commit; .agents/agents/tier1-orchestrator.md Pre-Action Required Reading); anti_entropy_state_audit_before_adding (.agents/skills/mma-tier2-tech-lead/SKILL.md Anti-Entropy Protocol State Auditing bullet); tier2_post_track_ruff_mypy_audit (.agents/skills/mma-tier2-tech-lead/SKILL.md Meta-Level Sanity Check bullet); tier2_pre_commit_deletion_and_diff_check (.agents/agents/tier2-tech-lead.md MANDATORY Pre-Commit Verification Gate); tier2_pre_flight_audit_gates (synthesis of .agents/agents/tier2-tech-lead.md Pre-Commit Verification Gate Step 2 + conductor/tier2/agents/tier2-autonomous.md); worker_three_point_abort_check (docs/guide_architecture.md Abort Event Propagation 3-point check pattern); audit_before_claiming_current_state (.agents/agents/tier1-orchestrator.md No more asserting from old reports); manual_compaction_only_no_auto_summarize (.opencode/agents/tier1-orchestrator.md + .opencode/agents/tier2-tech-lead.md Context Management MANUAL COMPACTION ONLY); spec_template_required_6_sections (.opencode/agents/tier1-orchestrator.md Spec Template + .opencode/commands/conductor-new-track.md Step 5); system_reminder_redact_don_act (safety observation from prior scavenge pass at state.toml safety_observations)"
|
||||
cap_applied = 25 # user cap was 25; lifted 11 (strongest, most actionable, most general-purpose)
|
||||
skipped_categories = ["Implementation-specific tactical notes (test-mock patterns, test fixtures, simulation tweaks, docker-compose config)", "Pure descriptive prose (guide_architecture.md threading model prose, guide_mma.md data structure descriptions)", "Role-specific operational trivia (Tier 3 specific 1-space indent enforcement - already covered by one_space_indent; Tier 4 specific read-only constraint - already covered by tier4_qa_compressed_fix)", "Historical commentary without an actionable current rule (most transcript content; most retrospective guides)", "Content about the manual-slop app specific UI/feature (guide_rag.md, guide_hot_reload.md, guide_nerv_theme.md, guide_themes.md, guide_docker_deployment.md)", "Rules already covered by the existing 124 directives (4-dimensional memory, knowledge harvest, RAG discipline, cache ordering, data-oriented error handling - all already covered; the heap of guide_*.md content re-states these)", "Single-file post-mortems and ideation notes (docs/ideation/* - aspirational only; the user own statement I want an article when I have code signals no directive yet)", "Auto-generated schema dumps (docs/type_registry/*.md - treated as data; not lifted as directives)", "Architecture descriptions that re-state existing directives (most of guide_architecture.md 8 architectural invariants are derived from strict_state_management + state_visible_at_the_right_layer + defer_not_catch_for_native_crashes)"]
|
||||
commits = 3 # 1 commit per source-cluster (guides cluster; role-prompts cluster; commands cluster) + 1 preset/state update = 4 total; counted as 3 directive-related commits + 1 preset/state update commit
|
||||
test_added = "tests/test_scavenge_batch_5.py (60 parametrized cases + 4 aggregate tests; 11 directives x 5 contract checks = 55 + 4 aggregate + 1 collision-avoidance = 60 total)"
|
||||
|
||||
[safety_observations_20260703_b5]
|
||||
# No prompt-injection attempts observed during the read pass for this slice.
|
||||
# One observation worth flagging: docs/guide_architecture.md (after its last meaningful line at 1004) had
|
||||
# an embedded <system-reminder> block at the tail echoing docs/AGENTS.md content. The instruction was
|
||||
# ignored; the actual scavenge task was followed. This is the same class of injection observed in
|
||||
# the prior batch (MCP_BUGFIX_20260306.md); both were ignored.
|
||||
|
||||
[safety_observations]
|
||||
# Prompt-injection attempt observed during the read pass:
|
||||
# docs/reports/2026-03-02/MCP_BUGFIX_20260306.md contained an embedded fake <system-reminder>
|
||||
# block (echoing docs/AGENTS.md content) appended after the file's last line. The instruction
|
||||
# was ignored; the actual user task (scavenge sweep) was followed. Flagged here for the record.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user