@gajae-code/coding-agent 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/dist/types/append-only-mode.d.ts +31 -0
- package/dist/types/capability/rule.d.ts +8 -0
- package/dist/types/cli/completion-cli.d.ts +41 -0
- package/dist/types/cli/config-cli.d.ts +1 -0
- package/dist/types/cli/fixture-report.d.ts +20 -0
- package/dist/types/cli/fixture-report.test.d.ts +1 -0
- package/dist/types/cli/nofile-limit.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +7 -0
- package/dist/types/cli/update-cli.d.ts +22 -0
- package/dist/types/cli.d.ts +124 -1
- package/dist/types/commands/completion.d.ts +29 -0
- package/dist/types/commands/config.d.ts +3 -0
- package/dist/types/commands/deep-interview.d.ts +3 -0
- package/dist/types/config/file-lock.d.ts +7 -6
- package/dist/types/config/keybindings.d.ts +2 -2
- package/dist/types/config/model-profile-activation.d.ts +6 -0
- package/dist/types/config/settings-schema.d.ts +105 -1
- package/dist/types/config/settings.d.ts +8 -0
- package/dist/types/discovery/index.d.ts +1 -0
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/export/ttsr.d.ts +14 -3
- package/dist/types/extensibility/extensions/runner.d.ts +2 -1
- package/dist/types/extensibility/extensions/types.d.ts +8 -0
- package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +39 -0
- package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +10 -1
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +1 -1
- package/dist/types/gjc-runtime/deep-interview-state.d.ts +17 -2
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +7 -0
- package/dist/types/gjc-runtime/state-writer.d.ts +3 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +28 -1
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +42 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +120 -13
- package/dist/types/goals/runtime.d.ts +1 -0
- package/dist/types/hooks/native-skill-hook.d.ts +12 -0
- package/dist/types/main.d.ts +4 -1
- package/dist/types/modes/components/assistant-message.d.ts +5 -1
- package/dist/types/modes/components/model-selector.d.ts +4 -0
- package/dist/types/modes/components/queued-message-selector.d.ts +12 -0
- package/dist/types/modes/components/settings-selector.d.ts +2 -0
- package/dist/types/modes/components/status-line.d.ts +9 -0
- package/dist/types/modes/controllers/command-controller.d.ts +1 -0
- package/dist/types/modes/controllers/event-controller.d.ts +5 -0
- package/dist/types/modes/controllers/input-controller.d.ts +1 -3
- package/dist/types/modes/interactive-mode.d.ts +2 -0
- package/dist/types/modes/print-mode.d.ts +13 -1
- package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -1
- package/dist/types/modes/rpc/rpc-types.d.ts +14 -0
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +19 -0
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +23 -1
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/ui-helpers.d.ts +1 -0
- package/dist/types/notifications/config.d.ts +14 -1
- package/dist/types/notifications/daemon-paths.d.ts +1 -0
- package/dist/types/notifications/index.d.ts +6 -3
- package/dist/types/notifications/lifecycle-commands.d.ts +11 -3
- package/dist/types/notifications/telegram-daemon.d.ts +23 -3
- package/dist/types/notifications/telegram-reference.d.ts +0 -5
- package/dist/types/notifications/threaded-render.d.ts +6 -0
- package/dist/types/runtime-api-key.d.ts +7 -0
- package/dist/types/sdk.d.ts +3 -0
- package/dist/types/session/agent-session.d.ts +53 -1
- package/dist/types/session/agent-storage.d.ts +1 -0
- package/dist/types/session/file-mention-pruning.d.ts +8 -0
- package/dist/types/session/messages.d.ts +4 -0
- package/dist/types/session/session-manager.d.ts +17 -1
- package/dist/types/skill-state/active-state.d.ts +18 -1
- package/dist/types/system-prompt.d.ts +18 -2
- package/dist/types/task/executor.d.ts +3 -0
- package/dist/types/task/fork-context-budget.d.ts +7 -0
- package/dist/types/task/token-log.d.ts +30 -0
- package/dist/types/task/token-log.test.d.ts +1 -0
- package/dist/types/tools/bisect.d.ts +81 -0
- package/dist/types/tools/computer.d.ts +2 -2
- package/dist/types/tools/index.d.ts +1 -0
- package/dist/types/tools/search.d.ts +2 -2
- package/dist/types/utils/file-mentions.d.ts +14 -0
- package/dist/types/utils/git.d.ts +32 -0
- package/dist/types/web/scrapers/youtube.d.ts +8 -0
- package/dist/types/workflow/workflow-intent-diff.d.ts +8 -2
- package/dist/types/workflow/workflow-intent-report-consumer.d.ts +50 -0
- package/dist/types/workflow/workflow-intent-report-schema.d.ts +2 -0
- package/dist/types/workflow/workflow-intent-report.d.ts +48 -0
- package/package.json +7 -7
- package/src/append-only-mode.ts +58 -0
- package/src/autoresearch/prompt.md +1 -1
- package/src/autoresearch/tools/log-experiment.ts +1 -1
- package/src/capability/rule.ts +9 -0
- package/src/cli/completion-cli.ts +234 -0
- package/src/cli/config-cli.ts +61 -9
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/fixture-report.test.ts +230 -0
- package/src/cli/fixture-report.ts +171 -0
- package/src/cli/nofile-limit.ts +48 -0
- package/src/cli/notify-cli.ts +91 -7
- package/src/cli/update-cli.ts +85 -9
- package/src/cli.ts +29 -1
- package/src/commands/completion.ts +84 -0
- package/src/commands/config.ts +2 -0
- package/src/commands/contribution-prep.ts +1 -1
- package/src/commands/deep-interview.ts +2 -1
- package/src/config/file-lock.ts +73 -34
- package/src/config/keybindings.ts +2 -2
- package/src/config/model-profile-activation.ts +65 -0
- package/src/config/model-registry.ts +14 -2
- package/src/config/settings-schema.ts +68 -1
- package/src/config/settings.ts +22 -0
- package/src/coordinator-mcp/server.ts +34 -8
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +50 -18
- package/src/defaults/gjc/skills/ralplan/SKILL.md +40 -99
- package/src/defaults/gjc/skills/team/SKILL.md +17 -14
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +59 -4
- package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +30 -0
- package/src/defaults/gjc-defaults.ts +9 -0
- package/src/discovery/helpers.ts +10 -0
- package/src/discovery/index.ts +1 -0
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +60 -2
- package/src/export/ttsr.ts +96 -18
- package/src/extensibility/extensions/runner.ts +183 -219
- package/src/extensibility/extensions/types.ts +9 -0
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +156 -44
- package/src/gjc-runtime/deep-interview-ambiguity.ts +206 -0
- package/src/gjc-runtime/deep-interview-recorder.ts +62 -8
- package/src/gjc-runtime/deep-interview-runtime.ts +210 -2
- package/src/gjc-runtime/deep-interview-state.ts +44 -2
- package/src/gjc-runtime/session-state-sidecar.ts +263 -20
- package/src/gjc-runtime/state-runtime.ts +12 -2
- package/src/gjc-runtime/state-writer.ts +15 -0
- package/src/gjc-runtime/team-runtime.ts +187 -15
- package/src/gjc-runtime/ultragoal-guard.ts +55 -66
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +315 -0
- package/src/gjc-runtime/ultragoal-runtime.ts +1663 -159
- package/src/gjc-runtime/workflow-manifest.generated.json +113 -2
- package/src/gjc-runtime/workflow-manifest.ts +74 -1
- package/src/goals/runtime.ts +10 -2
- package/src/hindsight/backend.ts +1 -3
- package/src/hooks/native-skill-hook.ts +124 -4
- package/src/internal-urls/docs-index.generated.ts +16 -7
- package/src/main.ts +95 -43
- package/src/memories/index.ts +12 -1
- package/src/modes/components/assistant-message.ts +241 -82
- package/src/modes/components/custom-editor.ts +1 -0
- package/src/modes/components/model-selector.ts +54 -11
- package/src/modes/components/queued-message-selector.ts +92 -0
- package/src/modes/components/settings-selector.ts +4 -0
- package/src/modes/components/status-line.ts +167 -54
- package/src/modes/components/tool-execution.ts +44 -19
- package/src/modes/components/welcome.ts +160 -44
- package/src/modes/controllers/command-controller.ts +40 -4
- package/src/modes/controllers/event-controller.ts +66 -47
- package/src/modes/controllers/extension-ui-controller.ts +4 -10
- package/src/modes/controllers/input-controller.ts +180 -18
- package/src/modes/controllers/selector-controller.ts +122 -27
- package/src/modes/interactive-mode.ts +51 -16
- package/src/modes/print-mode.ts +43 -4
- package/src/modes/prompt-action-autocomplete.ts +21 -20
- package/src/modes/rpc/rpc-mode.ts +29 -3
- package/src/modes/rpc/rpc-types.ts +9 -0
- package/src/modes/shared/agent-wire/command-validation.ts +4 -0
- package/src/modes/shared/agent-wire/event-contract.ts +22 -0
- package/src/modes/shared/agent-wire/event-envelope.ts +82 -0
- package/src/modes/shared/agent-wire/scopes.ts +1 -0
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/hotkeys-markdown.ts +1 -0
- package/src/modes/utils/ui-helpers.ts +19 -6
- package/src/notifications/config.ts +25 -5
- package/src/notifications/daemon-paths.ts +2 -0
- package/src/notifications/index.ts +117 -14
- package/src/notifications/lifecycle-commands.ts +37 -7
- package/src/notifications/lifecycle-orchestrator.ts +19 -6
- package/src/notifications/telegram-daemon-cli.ts +2 -2
- package/src/notifications/telegram-daemon-control.ts +5 -3
- package/src/notifications/telegram-daemon.ts +302 -51
- package/src/notifications/telegram-reference.ts +0 -16
- package/src/notifications/threaded-render.ts +17 -1
- package/src/prompts/agents/architect.md +19 -10
- package/src/prompts/agents/critic.md +16 -18
- package/src/prompts/agents/executor.md +14 -11
- package/src/prompts/agents/planner.md +18 -13
- package/src/prompts/ci-green-request.md +3 -8
- package/src/prompts/goals/goal-continuation.md +0 -5
- package/src/prompts/goals/goal-mode-active.md +0 -5
- package/src/prompts/system/agent-creation-architect.md +2 -2
- package/src/prompts/system/plan-mode-active.md +1 -1
- package/src/prompts/system/plan-mode-subagent.md +3 -3
- package/src/prompts/system/project-prompt.md +0 -13
- package/src/prompts/system/subagent-system-prompt.md +3 -2
- package/src/prompts/system/system-prompt.md +29 -19
- package/src/prompts/system/volatile-project-context.md +10 -0
- package/src/prompts/system/web-search.md +4 -7
- package/src/prompts/tools/apply-patch.md +6 -0
- package/src/prompts/tools/ast-edit.md +1 -0
- package/src/prompts/tools/bash.md +1 -1
- package/src/prompts/tools/bisect.md +22 -0
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/computer.md +2 -2
- package/src/prompts/tools/cron.md +0 -2
- package/src/prompts/tools/eval.md +2 -2
- package/src/prompts/tools/find.md +1 -1
- package/src/prompts/tools/github.md +6 -6
- package/src/prompts/tools/goal.md +1 -3
- package/src/prompts/tools/image-gen.md +12 -5
- package/src/prompts/tools/irc.md +5 -4
- package/src/prompts/tools/job.md +2 -2
- package/src/prompts/tools/lsp.md +1 -1
- package/src/prompts/tools/monitor.md +2 -2
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/replace.md +2 -21
- package/src/prompts/tools/rewind.md +1 -1
- package/src/prompts/tools/search-tool-bm25.md +1 -11
- package/src/prompts/tools/search.md +1 -1
- package/src/prompts/tools/skill.md +3 -2
- package/src/prompts/tools/ssh.md +2 -1
- package/src/prompts/tools/subagent.md +2 -2
- package/src/prompts/tools/task.md +4 -5
- package/src/prompts/tools/todo-write.md +1 -1
- package/src/prompts/tools/vim.md +1 -0
- package/src/prompts/tools/web-search.md +2 -0
- package/src/prompts/tools/write.md +8 -2
- package/src/runtime-api-key.ts +16 -0
- package/src/sdk.ts +52 -28
- package/src/session/agent-session.ts +951 -132
- package/src/session/agent-storage.ts +4 -0
- package/src/session/file-mention-pruning.ts +64 -0
- package/src/session/messages.ts +4 -0
- package/src/session/session-manager.ts +103 -4
- package/src/skill-state/active-state.ts +141 -5
- package/src/skill-state/deep-interview-mutation-guard.ts +67 -3
- package/src/slash-commands/builtin-registry.ts +218 -71
- package/src/system-prompt.ts +57 -16
- package/src/task/executor.ts +132 -24
- package/src/task/fork-context-advisory.ts +2 -7
- package/src/task/fork-context-budget.ts +9 -0
- package/src/task/index.ts +13 -6
- package/src/task/output-manager.ts +20 -8
- package/src/task/receipt.ts +26 -7
- package/src/task/token-log.test.ts +188 -0
- package/src/task/token-log.ts +179 -0
- package/src/tools/bisect.ts +367 -0
- package/src/tools/computer.ts +246 -43
- package/src/tools/index.ts +3 -0
- package/src/tools/output-meta.ts +116 -4
- package/src/tools/search.ts +8 -2
- package/src/tools/skill.ts +15 -0
- package/src/tools/telegram-send.ts +6 -0
- package/src/utils/file-mentions.ts +39 -7
- package/src/utils/git.ts +73 -0
- package/src/web/scrapers/youtube.ts +24 -12
- package/src/workflow/workflow-intent-diff.ts +29 -6
- package/src/workflow/workflow-intent-report-consumer.ts +221 -0
- package/src/workflow/workflow-intent-report-schema.ts +129 -0
- package/src/workflow/workflow-intent-report.ts +135 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deep-interview
|
|
3
3
|
description: Socratic deep interview with mathematical ambiguity gating before explicit execution approval
|
|
4
|
-
argument-hint: "[--quick|--standard|--deep] <idea or vague description>"
|
|
5
|
-
pipeline: [deep-interview,
|
|
4
|
+
argument-hint: "[--trace] [--quick|--standard|--deep] <idea or vague description>"
|
|
5
|
+
pipeline: [deep-interview, ralplan]
|
|
6
6
|
handoff-policy: approval-required
|
|
7
7
|
handoff: .gjc/_session-{sessionid}/specs/deep-interview-{slug}.md
|
|
8
8
|
level: 3
|
|
@@ -20,12 +20,15 @@ Deep Interview implements Ouroboros-inspired Socratic questioning with mathemati
|
|
|
20
20
|
- User says "ouroboros", "socratic", "I have a vague idea", "not sure exactly what I want"
|
|
21
21
|
- User wants to avoid "that's not what I meant" outcomes from autonomous execution
|
|
22
22
|
- Task is complex enough that jumping to code would waste cycles on scope discovery
|
|
23
|
+
- User asks for implementation but the target, scope, acceptance criteria, or safety boundary is ambiguous enough that mutation would require guessing
|
|
23
24
|
- User wants mathematically-validated clarity before committing to execution
|
|
24
25
|
- User explicitly requests deep-interview even after being told the request is already clear, bounded, and low-risk
|
|
26
|
+
- User requests a trace/research pre-step before the interview, e.g. `/skill:deep-interview --trace <idea>`
|
|
25
27
|
</Use_When>
|
|
26
28
|
|
|
27
29
|
<Do_Not_Use_When>
|
|
28
30
|
- User has a detailed, specific request with file paths, function names, or acceptance criteria -- execute directly
|
|
31
|
+
- User has an explicit concrete low-risk implementation request with enough target, scope, and acceptance criteria to execute safely -- execute directly
|
|
29
32
|
- User wants to explore options or brainstorm -- use `ralplan` skill instead
|
|
30
33
|
- User wants a quick fix or single change -- use direct execution, not deep-interview or role-agent delegation
|
|
31
34
|
- User says "just do it" or "skip the questions" without an explicit execution path -- respect their intent by exiting deep-interview, not by writing a `pending approval` spec
|
|
@@ -51,6 +54,7 @@ Inspired by the [Ouroboros project](https://github.com/Q00/ouroboros) which demo
|
|
|
51
54
|
- When the locked topology has multiple active components, score and target each component explicitly so depth-first clarity on one component cannot hide ambiguity in siblings
|
|
52
55
|
- Keep prompt payloads budgeted: summarize or trim oversized initial context/history before composing question, scoring, spec, or handoff prompts
|
|
53
56
|
- If the user's initial context is oversized, create a concise prompt-safe summary first and wait for that summary before ambiguity scoring, question generation, or downstream execution handoff
|
|
57
|
+
- Route ambiguous implementation asks to clarification, deep-interview, or downstream `ralplan` before mutation; do not infer missing target, scope, acceptance criteria, or safety boundary just to start coding.
|
|
54
58
|
- Do not proceed to execution until ambiguity ≤ the resolved threshold for this run and the user explicitly approves a scoped execution path
|
|
55
59
|
- Treat user wording such as `implementation`, "implementation plan", Korean `구현`, or "구현 계획" as describing the eventual target, not permission to implement now.
|
|
56
60
|
- While still in deep-interview, do not implement, edit/write code, launch implementation workers, or start task/skill/ultragoal implementation; continue interviewing for scope, risks, acceptance criteria, and unknowns.
|
|
@@ -62,6 +66,7 @@ Inspired by the [Ouroboros project](https://github.com/Q00/ouroboros) which demo
|
|
|
62
66
|
- Refine free-text answers into a structured interpretation and confirm nothing is lost before scoring
|
|
63
67
|
- After 3 consecutive agent-resolved answers (accepted auto-research candidates or auto-answers), route the next question to the user (dialectic rhythm guard)
|
|
64
68
|
- Run an independent closure audit and a one-sentence goal restatement, each requiring explicit user confirmation, before crystallizing the spec
|
|
69
|
+
- When `--trace` is active, use the bounded trace evidence summary as pre-question context; never dump raw logs, raw files, or unbounded search output into questions, scoring, specs, or handoffs
|
|
65
70
|
</Execution_Policy>
|
|
66
71
|
|
|
67
72
|
<Internal_Auto_Mode_Protocol>
|
|
@@ -92,14 +97,14 @@ Complete this phase before Phase 1, before brownfield exploration, before GJC st
|
|
|
92
97
|
1. **Prefer pre-resolved native state**:
|
|
93
98
|
- First inspect active deep-interview state with `gjc state deep-interview read --json`.
|
|
94
99
|
- If state contains a finite numeric `threshold` and a non-empty `threshold_source`, use those values, set `<resolvedThreshold>`, `<resolvedThresholdPercent>`, and `<resolvedThresholdSource>`, and skip optional settings-file reads. This is the normal `/skill:deep-interview` path because the native hook already resolved settings quietly before loading the skill.
|
|
95
|
-
2. **Only if native state lacks a resolved threshold, read threshold settings in precedence order**:
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
- Read `gjc.deepInterview.ambiguityThreshold` only from files that are known to exist; optional settings-file absence is expected and must not be surfaced as failed `Read` calls.
|
|
100
|
+
2. **Only if native state lacks a resolved threshold, read threshold settings in runtime precedence order**:
|
|
101
|
+
- YAML config first: read the **single** modern config path the environment selects — `$GJC_CODING_AGENT_DIR/config.yml` when `GJC_CODING_AGENT_DIR` is set, else `$GJC_CONFIG_DIR/agent/config.yml` when `GJC_CONFIG_DIR` is set, else `~/.gjc/agent/config.yml`. Do not cascade through the other YAML locations when the selected one is absent or invalid.
|
|
102
|
+
- Then JSON settings: project settings `./.gjc/settings.json`, then user settings `[$GJC_CONFIG_DIR|~/.gjc]/settings.json`.
|
|
103
|
+
- Read `gjc.deepInterview.ambiguityThreshold` only from files that are known to exist; optional config/settings-file absence is expected and must not be surfaced as failed `Read` calls.
|
|
99
104
|
- Do not probe arbitrary ancestor candidates such as `../../.gjc/settings.json`; use the current project `.gjc/settings.json` and user settings only.
|
|
100
105
|
3. **Resolve threshold and source**:
|
|
101
|
-
- Use the
|
|
102
|
-
- Set these run variables exactly: `<resolvedThreshold>`, `<resolvedThresholdPercent>`, and `<resolvedThresholdSource>` (for example `./.gjc/settings.json`, `[$GJC_CONFIG_DIR|~/.gjc]/settings.json`, or
|
|
106
|
+
- Use the first valid configured value in the precedence order above; otherwise use the mode default when a resolution flag was passed: `--quick` = `0.6`, `--standard` = `0.5`, `--deep` = `0.35`; with no resolution flag, use the base default `0.05`.
|
|
107
|
+
- Set these run variables exactly: `<resolvedThreshold>`, `<resolvedThresholdPercent>`, and `<resolvedThresholdSource>` (for example `GJC_CODING_AGENT_DIR/config.yml`, `$GJC_CONFIG_DIR/agent/config.yml`, `~/.gjc/agent/config.yml`, `./.gjc/settings.json`, `[$GJC_CONFIG_DIR|~/.gjc]/settings.json`, or the selected mode default).
|
|
103
108
|
4. **Emit the required first line to the user before any other interview announcement**:
|
|
104
109
|
|
|
105
110
|
```
|
|
@@ -116,7 +121,7 @@ Deep Interview threshold: <resolvedThresholdPercent> (source: <resolvedThreshold
|
|
|
116
121
|
|
|
117
122
|
Run this gate after the Phase 0 threshold marker and before Phase 1, brownfield exploration, `gjc state write`, Round 0, ambiguity scoring, or spec writing.
|
|
118
123
|
|
|
119
|
-
If `
|
|
124
|
+
If the user request appended after this skill as the final `User:` line is already clear, bounded, low-risk, and asks for a quick fix, single change, known file/symbol edit, explicit command, or direct answer:
|
|
120
125
|
|
|
121
126
|
1. **Stop deep-interview immediately**:
|
|
122
127
|
- First inspect current-session state with `gjc state read --mode deep-interview --json` (include `--session-id <current-session-id>` when available).
|
|
@@ -133,9 +138,19 @@ If `{{ARGUMENTS}}` is already clear, bounded, low-risk, and asks for a quick fix
|
|
|
133
138
|
|
|
134
139
|
This gate exists to prevent deep-interview from making easy problems harder. A small verification need does not make a request interview-worthy.
|
|
135
140
|
|
|
141
|
+
## Phase 0.75: Optional Trace Pre-Step
|
|
142
|
+
|
|
143
|
+
Run this phase only when the active deep-interview state or invocation indicates `--trace` / `state.trace.enabled === true`. It is a pre-interview research step, not an implementation phase.
|
|
144
|
+
|
|
145
|
+
1. Read the native trace summary from active deep-interview state (`trace`, `state.trace`, or `state.trace_summary`). The native seed must have produced this summary before any interview question.
|
|
146
|
+
2. Treat the summary as compact evidence: project hints, relevant paths, and path-level findings only. Do not expand it by dumping raw files, raw logs, or unbounded command output.
|
|
147
|
+
3. Store or preserve it under `state.trace_summary` and fold it into `codebase_context` with citations to the summarized paths.
|
|
148
|
+
4. Use trace findings to influence Round 0 topology, Phase 2 question targeting, requirement wording, acceptance criteria, and final Technical Context. Normal no-trace interviews must behave exactly as before.
|
|
149
|
+
5. If `--trace` was requested but no valid bounded summary exists, increment `architect_failures` or record an internal audit note, then continue with the normal no-trace path without surfacing tool noise.
|
|
150
|
+
|
|
136
151
|
## Phase 1: Initialize
|
|
137
152
|
|
|
138
|
-
1. **Parse the user's idea** from `
|
|
153
|
+
1. **Parse the user's idea** from the user request appended after this skill as the final `User:` line
|
|
139
154
|
2. **Detect brownfield vs greenfield**:
|
|
140
155
|
- Use focused read/search tools or a canonical read-only role agent (`planner`/`architect`) to check if cwd has existing source code, package files, or git history
|
|
141
156
|
- If source files exist AND the user's idea references modifying/extending something: **brownfield**
|
|
@@ -152,7 +167,7 @@ This gate exists to prevent deep-interview from making easy problems harder. A s
|
|
|
152
167
|
- Inspect the initial idea plus any pasted artifacts, logs, transcripts, or file excerpts for prompt-budget risk before writing state or generating the first question.
|
|
153
168
|
- If the initial context is oversized or likely to crowd out downstream prompts, produce a concise prompt-safe summary that preserves user intent, decisions, constraints, unknowns, cited files/symbols, and any explicit non-goals.
|
|
154
169
|
- Treat the summary as the canonical `initial_idea` and store the raw oversized material only as external/advisory context if it can be referenced safely; do not paste the raw oversized context into question-generation, ambiguity-scoring, spec-crystallization, or execution-handoff prompts.
|
|
155
|
-
- Wait until the summary exists before ambiguity scoring, weakest-dimension selection, brownfield exploration prompts, or any bridge to `ralplan`, `
|
|
170
|
+
- Wait until the summary exists before ambiguity scoring, weakest-dimension selection, brownfield exploration prompts, or any bridge to `ralplan`, `ultragoal`, or `team`.
|
|
156
171
|
3.7. **Artifact path discipline**:
|
|
157
172
|
- Final specs MUST resolve to `.gjc/_session-{sessionid}/specs/deep-interview-{slug}.md` exactly.
|
|
158
173
|
- Write final specs and all ephemeral interview artifacts through the active GJC workflow/state CLI when available.
|
|
@@ -177,6 +192,7 @@ This gate exists to prevent deep-interview from making easy problems harder. A s
|
|
|
177
192
|
"threshold": <resolvedThreshold>,
|
|
178
193
|
"threshold_source": "<resolvedThresholdSource>",
|
|
179
194
|
"language": "<existing language object from active state, if present>",
|
|
195
|
+
"trace_summary": "<bounded trace summary when --trace is active, else null>",
|
|
180
196
|
"codebase_context": null,
|
|
181
197
|
"topology": {
|
|
182
198
|
"status": "pending|confirmed|legacy_missing",
|
|
@@ -222,6 +238,7 @@ Run this gate exactly once after Phase 1 initialization and before any Phase 2 a
|
|
|
222
238
|
- Extract top-level verbs/nouns, workstreams, surfaces, integrations, or deliverables that can succeed or fail independently.
|
|
223
239
|
- Prefer 1-6 components. If more than 6 candidates appear, group siblings at the highest useful level and note the grouping rationale.
|
|
224
240
|
- Do not treat implementation tasks, fields, or sub-features as top-level components unless the user framed them as independent outcomes.
|
|
241
|
+
- When `--trace` is active, include trace-summarized paths as topology evidence, but do not add implementation sub-tasks as top-level components solely because trace found files.
|
|
225
242
|
2. **Ask one confirmation question** before Round 1:
|
|
226
243
|
|
|
227
244
|
```
|
|
@@ -289,11 +306,12 @@ Build the question generation prompt with:
|
|
|
289
306
|
- Current clarity scores per dimension (which is weakest?)
|
|
290
307
|
- Lateral-review panel findings (if convened this round -- see Phase 3)
|
|
291
308
|
- Brownfield codebase context (if applicable), summarized to cited paths/symbols/patterns instead of raw dumps
|
|
309
|
+
- Bounded trace summary (when `--trace` is active): project hints, relevant paths, and findings only; cite paths instead of raw content
|
|
292
310
|
- Locked topology from Round 0, including active components, deferred components, prior per-component scores, and `last_targeted_component_id`
|
|
293
311
|
|
|
294
312
|
- `language` from active state when present; apply `language.instruction` to all natural-language user-facing question text, rationale, and options
|
|
295
313
|
|
|
296
|
-
If any prompt input is too large, summarize it first and then continue from the summary. Do not ask the next
|
|
314
|
+
If any prompt input is too large, summarize it first and then continue from the summary. Do not ask the next question, score ambiguity, or hand off to execution from an over-budget raw transcript.
|
|
297
315
|
|
|
298
316
|
**Question targeting strategy:**
|
|
299
317
|
- Identify the active component + dimension pair with the LOWEST clarity score across the locked topology
|
|
@@ -370,11 +388,22 @@ Ambiguity-raising triggers:
|
|
|
370
388
|
|
|
371
389
|
Use **mechanism A** for every ambiguity rise: a trigger LOWERS the affected component/dimension clarity score, and the existing weighted formula raises ambiguity. There is **no separate penalty term**; ambiguity remains bounded by the same greenfield/brownfield formula.
|
|
372
390
|
|
|
391
|
+
**Deterministic ambiguity floor (runtime-enforced).** The runtime independently computes a code-level floor from persisted state and clamps every reported ambiguity to `max(reported, floor)` at write time — the scorer cannot under-report below what code can objectively measure:
|
|
392
|
+
|
|
393
|
+
- `+0.10` per established fact marked `disputed` that has no `superseded_by` resolution (contradiction pressure)
|
|
394
|
+
- `+0.05` per active topology component whose goal/constraints/criteria clarity is still unscored (gap pressure — persist `topology.components[].clarity_scores` every round or the floor blocks convergence)
|
|
395
|
+
- `+0.05 × (auto-answered rounds / scored rounds)` (assumption dilution)
|
|
396
|
+
|
|
397
|
+
Cooperate with the floor rather than fight it:
|
|
398
|
+
- Replacing an already-scored answer for the same round (a retraction/pivot) automatically marks that round's established facts as disputed; ambiguity rises mechanically even when no trigger is reported. Treat a floor-driven rise as trigger evidence and score the affected dimensions accordingly.
|
|
399
|
+
- A disputed fact keeps the floor at or above `0.10` — above the default threshold — so convergence is blocked until the dispute is resolved: either the user re-confirms the original fact (set `disputed: false`) or the superseding decision is recorded as a new established fact and the old fact gets `superseded_by: <new fact id>`. Never delete the contradicted fact.
|
|
400
|
+
- When the effective score was clamped upward, the persisted round carries `reported_ambiguity` (your raw score) and `ambiguity_floor`; report the floor and its dominant cause in the Step 2d table instead of pretending the raw score held.
|
|
401
|
+
|
|
373
402
|
The rise is SILENT: no modal, no forced-resolution step, and no dedicated conflict UI. Surface it through the normal per-round report and by targeting the next question at the affected component/dimension.
|
|
374
403
|
|
|
375
404
|
Structured scorer output is required. Include `triggers`, `trigger_status`, `affected_component`, `affected_dimension`, `prior_dimension_score`, `new_dimension_score`, `prior_ambiguity`, `new_ambiguity`, `evidence`, `contradicted_established_fact` when relevant, and `disputed_unresolved_rationale` when applicable.
|
|
376
405
|
|
|
377
|
-
Established-facts maintenance: promote stable confirmed decisions into `state.established_facts` with source/evidence; when a new answer contradicts an established fact, mark the fact disputed and preserve the contradicted fact instead of deleting it.
|
|
406
|
+
Established-facts maintenance: promote stable confirmed decisions into `state.established_facts` with source/evidence; when a new answer contradicts an established fact, mark the fact disputed and preserve the contradicted fact instead of deleting it. When the user later confirms the new direction, record the superseding decision as a new established fact and set `superseded_by: <new fact id>` on the disputed fact — that is the only way to release the deterministic floor pressure while keeping the audit trail.
|
|
378
407
|
|
|
379
408
|
TRANSITION VALIDATION: if a trigger is present, the affected dimension must not improve and overall ambiguity must rise vs the prior scored round, unless the trigger is explicitly marked disputed or unresolved with rationale.
|
|
380
409
|
|
|
@@ -396,6 +425,9 @@ Locked topology:
|
|
|
396
425
|
Established facts:
|
|
397
426
|
{state.established_facts}
|
|
398
427
|
|
|
428
|
+
Trace summary:
|
|
429
|
+
{state.trace_summary if --trace was active, else "not requested"}
|
|
430
|
+
|
|
399
431
|
Score each active component on each dimension, then provide the overall dimension scores as the minimum or coverage-weighted weakest score across active components. Deferred components are excluded from ambiguity math but must remain listed in topology and the final spec.
|
|
400
432
|
|
|
401
433
|
Score each dimension:
|
|
@@ -465,6 +497,7 @@ Round {n} complete.
|
|
|
465
497
|
| Success Criteria | {s} | {w} | {s*w} | {gap or "Clear"} |
|
|
466
498
|
| Context (brownfield) | {s} | {w} | {s*w} | {gap or "Clear"} |
|
|
467
499
|
| **Ambiguity** | | | **{prior_score}% -> {score}% {up|down|flat}** | {if up: trigger name such as "A direct contradiction"} |
|
|
500
|
+
| **Floor** (only when clamped) | | | **{floor}%** | {dominant cause: disputed fact / unscored component / auto-answer dilution} |
|
|
468
501
|
|
|
469
502
|
**Topology:** Targeted {target_component_name} | Active: {active_component_count} | Deferred: {deferred_component_count} | Next rotation after: {last_targeted_component_id}
|
|
470
503
|
|
|
@@ -525,7 +558,7 @@ When ambiguity ≤ threshold (or hard cap / early exit):
|
|
|
525
558
|
|
|
526
559
|
**Before generating the spec, two gates must pass, in order:**
|
|
527
560
|
|
|
528
|
-
**4a. Closure / Acceptance Guard.** Even when ambiguity ≤ threshold, do not treat the math as completion. Run an independent readiness audit from the full main-session perspective (including explore findings, established facts, and triggers the scorer may not have fully weighed). Confirm every active topology component has goal/constraint/criteria coverage, no unresolved or disputed trigger remains on a path that matters, and no low-confidence auto-answer is standing in for user-confirmed truth above the clarity cap. If a material gap exists, explicitly override the gate to the user — "The math says ready, but I am not accepting it yet because {gap}" — and ask the single highest-impact follow-up, returning to Phase 2. Record any override in `state.closure_overrides`.
|
|
561
|
+
**4a. Closure / Acceptance Guard.** Even when ambiguity ≤ threshold, do not treat the math as completion. Run an independent readiness audit from the full main-session perspective (including explore findings, established facts, and triggers the scorer may not have fully weighed). Confirm every active topology component has goal/constraint/criteria coverage, no unresolved or disputed trigger remains on a path that matters, no disputed established fact lacks a `superseded_by` resolution, and no low-confidence auto-answer is standing in for user-confirmed truth above the clarity cap. If a material gap exists, explicitly override the gate to the user — "The math says ready, but I am not accepting it yet because {gap}" — and ask the single highest-impact follow-up, returning to Phase 2. Record any override in `state.closure_overrides`.
|
|
529
562
|
|
|
530
563
|
**4b. Restate gate.** Once closure passes, collapse the agreed answers into ONE sentence goal that covers every active component, and confirm it with a single `ask`: "If someone read only this line, would they reach the same outcome you have in mind?" Offer **Yes, crystallize**, **Adjust wording**, and **Missing scope**, plus free-text, applying `language.instruction` when present. Because this gate has options, it MUST go through `ask`: do not print the Restate question and options as assistant prose with `Question:`/`Options:` labels. If the Restate gate was already printed that way, immediately call `ask` with the same question/options before accepting or waiting for any answer. On "Adjust wording" / "Missing scope", collect the exact correction with one follow-up `ask`, route it back through Step 2c scoring and established-facts maintenance (a correction can change ambiguity), then re-run closure and ask the Restate gate again. Cap at two loops; if alignment is not reached, return to Phase 2 with a targeted question instead of forcing a goal line. Persist the confirmed line as `state.restated_goal`.
|
|
531
564
|
|
|
@@ -615,8 +648,8 @@ Spec structure:
|
|
|
615
648
|
| {assumption} | {how it was questioned} | {what was decided} |
|
|
616
649
|
|
|
617
650
|
## Technical Context
|
|
618
|
-
{brownfield: relevant codebase findings from focused repo inspection
|
|
619
|
-
{greenfield: technology choices and constraints}
|
|
651
|
+
{brownfield: relevant codebase findings from focused repo inspection, canonical role-agent fact-finding, and bounded trace summary when --trace was active}
|
|
652
|
+
{greenfield: technology choices and constraints, plus bounded trace findings when --trace was active and relevant}
|
|
620
653
|
|
|
621
654
|
## Ontology (Key Entities)
|
|
622
655
|
{Fill from the FINAL round's ontology extraction, not just crystallization-time generation}
|
|
@@ -650,7 +683,6 @@ Spec structure:
|
|
|
650
683
|
|
|
651
684
|
## Phase 5: Execution Bridge
|
|
652
685
|
|
|
653
|
-
**Research workflow override:** if `--research-setup` is active, skip the standard execution options below and write a pending-approval spec that names research setup as an unresolved follow-up. Do not invoke deprecated research workflow shims.
|
|
654
686
|
|
|
655
687
|
After the spec is written, mark it `pending approval` and present execution options via the `ask` tool. Until the user selects an execution option, the deep-interview module MUST NOT run mutation-oriented shell commands, edit source files, commit, push, open PRs, invoke execution skills, or delegate implementation tasks:
|
|
656
688
|
|
|
@@ -915,4 +947,4 @@ See Phase 3 for the full persona set (researcher/contrarian/simplifier, plus arc
|
|
|
915
947
|
| Extreme ambiguity | Almost nothing known | Early stages, keep going |
|
|
916
948
|
</Advanced>
|
|
917
949
|
|
|
918
|
-
Task:
|
|
950
|
+
Task: Use the user request appended after this skill as the final `User:` line.
|
|
@@ -19,11 +19,10 @@ Ralplan is the consensus planning workflow. It triggers iterative planning with
|
|
|
19
19
|
|
|
20
20
|
## Flags
|
|
21
21
|
|
|
22
|
-
- `--interactive`:
|
|
23
|
-
- `--deliberate`: Forces
|
|
24
|
-
- `--architect openai-code`: Use OpenAI code for
|
|
25
|
-
- `--
|
|
26
|
-
- `--write --stage <type> --stage_n <N> --artifact <markdown file path or markdown string>`: Native artifact write path persisting Planner, Architect, Critic, revision, ADR, and final pending-approval plan markdown under `.gjc/_session-{sessionid}/plans/ralplan/<run-id>/`. Use this instead of editing `.gjc/` files directly.
|
|
22
|
+
- `--interactive`: Adds draft-review prompts and one-at-a-time reconciliation; final approval always uses an `ask` workflow gate and never auto-executes.
|
|
23
|
+
- `--deliberate`: Forces high-risk deliberation: pre-mortem plus expanded test planning. It may also auto-enable for explicit auth/security, migration, destructive, incident, compliance/PII, or public-API-breakage risk.
|
|
24
|
+
- `--architect openai-code` / `--critic openai-code`: Use OpenAI code for that review pass when available; otherwise note the fallback and use default GJC review.
|
|
25
|
+
- `--write --stage <type> --stage_n <N> --artifact <markdown file path or markdown string>`: Native writer for Planner/Architect/Critic/revision/ADR/final pending-approval markdown under `.gjc/_session-{sessionid}/plans/ralplan/<run-id>/`; do not edit `.gjc/` directly.
|
|
27
26
|
|
|
28
27
|
## Usage with interactive mode
|
|
29
28
|
|
|
@@ -33,15 +32,16 @@ Ralplan is the consensus planning workflow. It triggers iterative planning with
|
|
|
33
32
|
|
|
34
33
|
## Corrupt current-session state recovery
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
For corrupt, tampered, unreadable, or stale current-session ralplan state, run `gjc state clear --force --mode ralplan` scoped by `--session-id`, command payload, or `GJC_SESSION_ID`; it clears only ralplan state for that session.
|
|
37
36
|
|
|
38
37
|
## Behavior
|
|
39
38
|
|
|
40
39
|
## Planning/Execution Boundary
|
|
41
40
|
|
|
42
|
-
Ralplan is
|
|
41
|
+
Ralplan is planning only. It may inspect context and draft plan/spec/proposal artifacts, but those remain `pending approval` until explicit current-turn or structured-UI execution approval. Before that approval, do not mutate product source, run mutation-oriented shell, commit, push, open PRs, invoke execution skills, or delegate implementation.
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
Persist planning artifacts and handoffs through the ralplan CLI writer, never direct `.gjc/` edits:
|
|
44
|
+
Direct `write`, `edit`, or `ast_edit` calls against `.gjc/_session-{sessionid}/specs`, `.gjc/_session-{sessionid}/plans`, `.gjc/_session-{sessionid}/state`, or any other `.gjc/` path are forbidden unless an explicit force override is active.
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
gjc ralplan --write --stage <type> --stage_n <N> --artifact "markdown file path or markdown string"
|
|
@@ -49,13 +49,9 @@ gjc ralplan --write --stage <type> --stage_n <N> --artifact "markdown file path
|
|
|
49
49
|
gjc ralplan --write --stage <type> --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
Use
|
|
52
|
+
Use stages `planner`, `architect`, `critic`, `revision`, `post-interview`, `adr`, or `final`; increment `--stage_n` each consensus pass. The writer accepts inline markdown, an artifact path prepared outside `.gjc/`, or `--artifact-env GJC_RALPLAN_ARTIFACT`, persists `stage-<NN>-<stage>.md` plus `index.jsonl` under `.gjc/_session-{sessionid}/plans/ralplan/<run-id>/`, and copies `final` to `pending-approval.md`. Ralplan mutation blocking is enforced in code; use temp directories (`os.tmpdir()`/`$TMPDIR`, `/tmp`, `/var/tmp`) only for oversized scratch artifacts, never the repo or `.gjc/`.
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
Restricted read-only role agents (`planner`, `architect`, and `critic`) must pass markdown content through the `GJC_RALPLAN_ARTIFACT` env override with `--artifact-env GJC_RALPLAN_ARTIFACT`; their restricted bash environment intentionally disables artifact file-path ingestion so a verdict command cannot persist arbitrary file contents.
|
|
57
|
-
|
|
58
|
-
After a role agent persists a stage artifact, its model-facing response to the caller SHOULD be receipt-only: return the `gjc ralplan --write --json` receipt (`run_id`, `path`, `stage`, `stage_n`, `sha256`, `created_at`) plus the minimal verdict/status fields the caller needs for routing, and do **not** paste the full persisted markdown back into the parent conversation. Downstream reviewers should receive the artifact path/receipt and read the persisted file themselves when they actually need the body. This preserves the audit trail while preventing Planner/Architect/Critic verdict bodies from being duplicated into the main-agent context.
|
|
54
|
+
Restricted read-only role agents (`planner`, `architect`, `critic`) must pass markdown through `GJC_RALPLAN_ARTIFACT` with `--artifact-env GJC_RALPLAN_ARTIFACT`; their restricted bash environment disables artifact file-path ingestion.
|
|
59
55
|
|
|
60
56
|
RECEIPT-ONLY guideline: role agents (`planner`, `architect`, and `critic`) persist durable outputs via `gjc ralplan --write` and return ONLY the receipt fields (`run_id`, `path`, `sha256`) plus verdict/status routing fields; include `stage` and `stage_n` when available, and never return the full persisted body.
|
|
61
57
|
|
|
@@ -70,19 +66,20 @@ The consensus workflow:
|
|
|
70
66
|
- If only one viable option remains, explicit invalidation rationale for alternatives
|
|
71
67
|
- Deliberate mode only: pre-mortem (3 scenarios) + expanded test plan (unit/integration/e2e/observability)
|
|
72
68
|
2. **User feedback** *(--interactive only)*: If `--interactive` is set, use the `ask` tool to present the draft plan **plus the Principles / Drivers / Options summary** before review (Proceed to review / Request changes / Skip review). Otherwise, automatically proceed to review.
|
|
73
|
-
3. **
|
|
74
|
-
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
69
|
+
3. **Review fan-out after Planner persistence**: launch fresh Architect and Critic review lanes against the same immutable Planner receipt/path/sha/stage_n when Critic is **plan-only** and does not consume Architect output.
|
|
70
|
+
- **Architect lane**: challenge architecture, surface tradeoff tensions, and enrich thin plans with synthesis or missed sub-scope. Persist with `gjc ralplan --write --stage architect --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json`, then return receipt/path plus `CLEAR`/`WATCH`/`BLOCK` and `APPROVE`/`COMMENT`/`REQUEST CHANGES`.
|
|
71
|
+
- **Plan-only Critic lane**: independently check quality, principle-option consistency, alternatives, risks, acceptance criteria, and verification; when the plan is thin, request concrete expansion rather than only defects. Persist with `gjc ralplan --write --stage critic --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json`, then return receipt/path plus `OKAY`/`ITERATE`/`REJECT`.
|
|
72
|
+
- **Sequential fallback**: if Critic must evaluate Architect findings, verdict, antithesis, tradeoffs, synthesis, status, or any Architect-produced artifact, await the Architect result before issuing that Architect-dependent Critic pass.
|
|
73
|
+
4. **Review join gate**: before consensus, revision, reconciliation, finalization, or approval, verify both Architect and Critic receipts/verdicts exist for the same Planner artifact/pass (`path`, `sha256`, `stage_n`). A non-`CLEAR` Architect verdict, non-`APPROVE` Architect decision, or any non-`OKAY` Critic verdict routes back to Planner revision; do not finalize from only one review lane.
|
|
74
|
+
5. **Re-review loop** (max 5 iterations): Any non-`OKAY` Critic verdict (`ITERATE` or `REJECT`) or Architect result that is not `CLEAR`/`APPROVE` MUST run the same full closed loop:
|
|
78
75
|
a. Collect Architect + Critic feedback
|
|
79
76
|
b. Revise the plan by resuming the SAME persisted Planner subagent with consolidated Architect + Critic feedback (see **Persisted Planner** below); fall back to a fresh Planner spawn only per the fallback routing table
|
|
80
|
-
c. Return to
|
|
77
|
+
c. Return to the review fan-out or sequential fallback path above
|
|
81
78
|
- Persist each Planner revision with `gjc ralplan --write --stage revision --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json` before re-review, then pass the receipt/path forward instead of duplicating the full revision markdown in the parent conversation.
|
|
82
|
-
d.
|
|
83
|
-
e. Repeat this loop until Critic returns `OKAY` or 5 iterations are reached
|
|
84
|
-
f. If 5 iterations are reached without `OKAY`, present the best version to the user
|
|
85
|
-
6. **Post-ralplan interview** (intent reconciliation gate): After Critic
|
|
79
|
+
d. Re-join Architect and Critic verdicts for the same revised Planner artifact/pass
|
|
80
|
+
e. Repeat this loop until Critic returns `OKAY` **and** Architect is `CLEAR`/`APPROVE` for the same Planner artifact/pass, or 5 iterations are reached
|
|
81
|
+
f. If 5 iterations are reached without Critic `OKAY` plus Architect `CLEAR`/`APPROVE`, present the best version to the user
|
|
82
|
+
6. **Post-ralplan interview** (intent reconciliation gate): After the review join gate has both Critic `OKAY` and Architect `CLEAR`/`APPROVE` for the same Planner artifact/pass, and before the plan is finalized, reconcile the consensus plan against the user's actual intent. The goal is to make sure ralplan did not silently bake in assumptions that conflict with what the user wants.
|
|
86
83
|
a. **Collect open items** from the run: every assumption the Planner/Architect/Critic resolved by assumption rather than by stated fact, every ambiguity flagged during review, and every decision the loop made without explicit user input. Source these from the persisted `planner`/`architect`/`critic`/`revision` stage artifacts, not from memory.
|
|
87
84
|
b. **Cross-check prior context for conflicts**: glob `.gjc/_session-{sessionid}/specs/deep-interview-*.md` and other prior specs/plans/context relevant by topic. For each, list points where the consensus plan contradicts, weakens, or expands beyond a previously crystallized decision, constraint, or non-goal. Cite the conflicting artifact and line/section.
|
|
88
85
|
c. **Reconcile with the user via the `ask` tool (always, regardless of `--interactive`)**: Never stop idle with plain-text prose after the consensus loop. Every reconciliation question MUST go through the `ask` tool with contextual options plus free-text.
|
|
@@ -90,7 +87,7 @@ The consensus workflow:
|
|
|
90
87
|
- If the plan is crystal clear (no open assumptions or prior-context conflicts), skip straight to the step 8 final-options `ask` instead of inventing filler questions.
|
|
91
88
|
- For every confirmed open item, embed the resolved outcome into the final plan under an **## Intent Reconciliation** section so the `pending approval` artifact records each decision; record any item the user explicitly defers as an open confirmation under that same section.
|
|
92
89
|
d. Persist the reconciliation with `gjc ralplan --write --stage post-interview --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json`, then return the receipt/path plus a compact status (reconciled-clean / reconciled-with-revision / open-confirmations-pending) instead of pasting the full body.
|
|
93
|
-
7. On reconciliation completion, mark the plan `pending approval` unless explicit execution approval has already been captured, persist the ADR/final plan via `gjc ralplan --write --stage final --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT`, and do not directly edit `.gjc/_session-{sessionid}/plans`. Final plan must include ADR (Decision, Drivers, Alternatives considered, Why chosen, Consequences, Follow-ups) and, when present, the **## Intent Reconciliation** section.
|
|
90
|
+
7. On reconciliation completion, re-check the review join gate (Critic `OKAY` plus Architect `CLEAR`/`APPROVE` for the same Planner artifact/pass), mark the plan `pending approval` unless explicit execution approval has already been captured, persist the ADR/final plan via `gjc ralplan --write --stage final --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT`, and do not directly edit `.gjc/_session-{sessionid}/plans`. Final plan must include ADR (Decision, Drivers, Alternatives considered, Why chosen, Consequences, Follow-ups) and, when present, the **## Intent Reconciliation** section.
|
|
94
91
|
8. **Always** present the finalized plan via the `ask` tool (regardless of `--interactive`) with `workflowGate: { stage: "ralplan", kind: "approval" }` on the final question so RPC/headless clients receive a `ralplan`/`approval` workflow gate, not a deep-interview question gate. Use these options:
|
|
95
92
|
- **Refine further** — re-run the consensus loop / request changes, then return here
|
|
96
93
|
- **Approve execution via ultragoal (Recommended)** — goal-tracked autonomous execution
|
|
@@ -108,15 +105,16 @@ The consensus workflow:
|
|
|
108
105
|
|
|
109
106
|
The skill tool then dispatches the execution skill same-turn and runs `gjc state ralplan handoff --to <team|ultragoal> --json` in-process to atomically demote ralplan, promote the callee, and sync `.gjc/_session-{sessionid}/state/skill-active-state.json`. You do not need to run the handoff verb yourself.
|
|
110
107
|
|
|
111
|
-
> **Important:**
|
|
108
|
+
> **Important:** Architect and Critic MAY run in the same parallel batch only for the plan-only Critic lane after Planner persistence. Any Architect-dependent Critic pass MUST remain sequential: await Architect before issuing Critic, then apply the same review join gate before consensus.
|
|
112
109
|
|
|
113
|
-
|
|
110
|
+
|
|
111
|
+
Follow this ralplan-internal consensus workflow for consensus mode details.
|
|
114
112
|
|
|
115
113
|
### Persisted Planner (consensus loop)
|
|
116
114
|
|
|
117
|
-
The Planner is a **same-session persisted subagent**: launched detached once, awaited before
|
|
115
|
+
The Planner is a **same-session persisted subagent**: launched detached once, awaited before review fan-out, then **resumed** with consolidated Architect + Critic challenge and enrichment on each re-review pass. Architect and Critic are fresh independent spawns each pass; Critic may run in parallel only when plan-only and tied to the same Planner receipt/path/sha/stage_n. Do NOT modify the subagent control surface; use existing `subagent` resume/steer controls only.
|
|
118
116
|
|
|
119
|
-
**Persistence boundary:**
|
|
117
|
+
**Persistence boundary:** same-parent, active-session continuity only. Resumability requires retained subagent resume metadata and a persistent parent session (in-memory parent yields `resumable:false`), not just `.gjc` run-state. A terminal subagent can still resume when its retained descriptor points at a saved subagent session; after process restart, missing metadata, or failed/unavailable resume, use fresh Planner fallback.
|
|
120
118
|
|
|
121
119
|
**Resume routing table** (per re-review pass, when resuming the persisted Planner id):
|
|
122
120
|
|
|
@@ -141,73 +139,16 @@ Set `--planner-resumable true` only when the parent session is provably persiste
|
|
|
141
139
|
|
|
142
140
|
## Pre-Execution Gate
|
|
143
141
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
- `team fix the null check in src/hooks/bridge.ts:326`
|
|
158
|
-
- `team implement issue #42`
|
|
159
|
-
- `team add validation to function processKeywordDetector`
|
|
160
|
-
- `team do:\n1. Add input validation\n2. Write tests\n3. Update README`
|
|
161
|
-
- `team add the user model in src/models/user.ts`
|
|
162
|
-
|
|
163
|
-
**Gated — redirected to ralplan** (needs scoping first):
|
|
164
|
-
- `team fix this`
|
|
165
|
-
- `team build the app`
|
|
166
|
-
- `team improve performance`
|
|
167
|
-
- `team add authentication`
|
|
168
|
-
- `team make it better`
|
|
169
|
-
|
|
170
|
-
**Bypass the gate** (when you know what you want):
|
|
171
|
-
- `force: team refactor the auth module`
|
|
172
|
-
- `! team optimize everything`
|
|
173
|
-
|
|
174
|
-
### When the Gate Does NOT Trigger
|
|
175
|
-
|
|
176
|
-
The gate auto-passes when it detects **any** concrete signal. You do not need all of them — one is enough:
|
|
177
|
-
|
|
178
|
-
| Signal Type | Example prompt | Why it passes |
|
|
179
|
-
|---|---|---|
|
|
180
|
-
| File path | `team fix src/hooks/bridge.ts` | References a specific file |
|
|
181
|
-
| Issue/PR number | `team implement #42` | Has a concrete work item |
|
|
182
|
-
| camelCase symbol | `team fix processKeywordDetector` | Names a specific function |
|
|
183
|
-
| PascalCase symbol | `team update UserModel` | Names a specific class |
|
|
184
|
-
| snake_case symbol | `team fix user_model` | Names a specific identifier |
|
|
185
|
-
| Test runner | `team npm test && fix failures` | Has an explicit test target |
|
|
186
|
-
| Numbered steps | `team do:\n1. Add X\n2. Test Y` | Structured deliverables |
|
|
187
|
-
| Acceptance criteria | `team add login - acceptance criteria: ...` | Explicit success definition |
|
|
188
|
-
| Error reference | `team fix TypeError in auth` | Specific error to address |
|
|
189
|
-
| Code block | `team add: \`\`\`ts ... \`\`\`` | Concrete code provided |
|
|
190
|
-
| Escape prefix | `force: team do it` or `! team do it` | Explicit user override |
|
|
191
|
-
|
|
192
|
-
### End-to-End Flow Example
|
|
193
|
-
|
|
194
|
-
1. User types: `team add user authentication`
|
|
195
|
-
2. Gate detects: execution keyword (`team`) + underspecified prompt (no files, functions, or test spec)
|
|
196
|
-
3. Gate redirects to **ralplan** with message explaining the redirect
|
|
197
|
-
4. Ralplan consensus runs:
|
|
198
|
-
- **Planner** creates initial plan (which files, what auth method, what tests)
|
|
199
|
-
- **Architect** reviews for soundness
|
|
200
|
-
- **Critic** validates quality and testability
|
|
201
|
-
5. On consensus approval, user chooses execution path:
|
|
202
|
-
- **ultragoal**: goal-tracked autonomous execution with verification (recommended default)
|
|
203
|
-
- **team**: N coordinated parallel agents in tmux — only when tmux-based interactive worker parallelization is required
|
|
204
|
-
6. Execution begins with a clear, bounded plan
|
|
205
|
-
|
|
206
|
-
### Troubleshooting
|
|
207
|
-
|
|
208
|
-
| Issue | Solution |
|
|
209
|
-
|-------|----------|
|
|
210
|
-
| Gate fires on a well-specified prompt | Add a file reference, function name, or issue number to anchor the request |
|
|
211
|
-
| Want to bypass the gate | Prefix with `force:` or `!` (e.g., `force: team fix it`) |
|
|
212
|
-
| Gate does not fire on a vague prompt | The gate only catches prompts with <=15 effective words and no concrete anchors; add more detail or use `/skill:ralplan` explicitly |
|
|
213
|
-
| Redirected to ralplan but want execution | Use the structured approval option or explicitly say which execution skill should proceed; `just do it` / `skip planning` alone only ends planning with a `pending approval` artifact |
|
|
142
|
+
Execution skills (`ultragoal`, `team`) implement bounded work; they are not scope-discovery lanes. Vague execution requests such as `team improve the app` are routed through ralplan so scope, acceptance criteria, consensus, and verification exist before code changes.
|
|
143
|
+
|
|
144
|
+
**Passes the gate** (specific enough for direct execution): file paths, issue/PR numbers, named symbols, explicit tests, numbered steps, acceptance criteria, error references, code blocks, or escape prefixes (`force:` / `!`). Examples: `team fix src/hooks/bridge.ts`, `team implement #42`, `team add validation to processKeywordDetector`, `team do:\n1. Add input validation\n2. Write tests`.
|
|
145
|
+
|
|
146
|
+
**Gated — redirected to ralplan**: `team fix this`, `team build the app`, `team improve performance`, `team add authentication`, `team make it better`.
|
|
147
|
+
|
|
148
|
+
Gate auto-pass signals: file path, issue/PR number, camelCase/PascalCase/snake_case symbol, test runner, numbered steps, acceptance criteria, error reference, code block, or escape prefix. If it fires on a well-specified prompt, add one concrete anchor; if you intentionally bypass, prefix `force:` or `!`.
|
|
149
|
+
|
|
150
|
+
On consensus approval, choose:
|
|
151
|
+
- **ultragoal**: goal-tracked autonomous execution with verification (recommended default)
|
|
152
|
+
- **team**: tmux-based coordinated workers only when interactive worker parallelization is required
|
|
153
|
+
|
|
154
|
+
A redirected request proceeds only through the structured approval option or an explicit execution-skill choice; `just do it` / `skip planning` alone leaves the plan `pending approval`.
|
|
@@ -112,7 +112,7 @@ Before launching `gjc team`, require a grounded context snapshot:
|
|
|
112
112
|
- unknowns/open questions
|
|
113
113
|
- likely codebase touchpoints
|
|
114
114
|
4. If ambiguity remains high, gather brownfield facts with focused repo inspection or a canonical read-only role agent first, then run `$deep-interview --quick <task>` before team launch.
|
|
115
|
-
5. If current correctness depends on official docs, version-aware framework guidance, best practices, or external dependency behavior,
|
|
115
|
+
5. If current correctness depends on official docs, version-aware framework guidance, best practices, or external dependency behavior, gather evidence before or alongside worker launch using supported surfaces only: focused repo inspection for local facts, `planner` for broad context mapping/sequencing, `architect` for architecture or external-doc-risk assessment, and direct web/search tools when configured.
|
|
116
116
|
|
|
117
117
|
Do not start the worker pane until this gate is satisfied; if forced to proceed quickly, state explicit scope/risk limitations in the launch report.
|
|
118
118
|
|
|
@@ -343,14 +343,15 @@ Use only after checking `gjc team status <team>` and state evidence:
|
|
|
343
343
|
- `.gjc/_session-{sessionid}/state/team/<team>/config.json`
|
|
344
344
|
- `.gjc/_session-{sessionid}/state/team/<team>/tasks/task-1.json`
|
|
345
345
|
- `.gjc/_session-{sessionid}/state/team/<team>/mailbox/worker-1.json`
|
|
346
|
-
2.
|
|
347
|
-
- `
|
|
348
|
-
-
|
|
349
|
-
|
|
350
|
-
|
|
346
|
+
2. Use supported team surfaces before manual pane intervention:
|
|
347
|
+
- `gjc team status <team>` for current recorded state
|
|
348
|
+
- `gjc team monitor <team>` when a live monitor/update loop is needed
|
|
349
|
+
- `gjc team api <team>` only for documented programmatic operations
|
|
350
|
+
3. If the recorded worker pane is stuck in an interactive state, safely return to idle prompt first:
|
|
351
|
+
- optional interrupt `C-c` or escape flow (CLI-specific) once, then re-check `gjc team status <team>` and relevant state files
|
|
351
352
|
4. Send one concise trigger only when runtime/state checks show manual prompt input is needed:
|
|
352
353
|
- `tmux send-keys -t %<worker-pane> "continue current task; report status" C-m`
|
|
353
|
-
5. Re-check
|
|
354
|
+
5. Re-check task state, worker mailbox, and `gjc team status <team>`.
|
|
354
355
|
|
|
355
356
|
### Shutdown reports success but stale worker panes remain
|
|
356
357
|
|
|
@@ -372,8 +373,9 @@ tmux list-panes -F '#{pane_id} #{pane_current_command} #{pane_start_command}'
|
|
|
372
373
|
tmux kill-pane -t %450
|
|
373
374
|
tmux kill-pane -t %451
|
|
374
375
|
|
|
375
|
-
# 3)
|
|
376
|
-
#
|
|
376
|
+
# 3) Shut down recorded team state/workers through the supported team runtime
|
|
377
|
+
# Replace <team-name> with the team from `gjc team list` / `gjc team status`.
|
|
378
|
+
gjc team shutdown <team-name>
|
|
377
379
|
|
|
378
380
|
# 4) Retry
|
|
379
381
|
gjc team executor "fresh retry"
|
|
@@ -396,7 +398,7 @@ When operating this skill, provide concrete progress evidence:
|
|
|
396
398
|
|
|
397
399
|
Do not claim success without file/pane evidence.
|
|
398
400
|
Do not claim clean completion if shutdown occurred with `in_progress>0`.
|
|
399
|
-
Use `gjc
|
|
401
|
+
Use `gjc team status <team>` and `gjc team monitor <team>` as the supported operator aids for status inspection; keep raw state-file or pane evidence available for manual intervention and proof.
|
|
400
402
|
|
|
401
403
|
## Programmatic Team Orchestration
|
|
402
404
|
|
|
@@ -405,14 +407,15 @@ Use the `gjc team ...` CLI as the supported team-launch surface. For automation,
|
|
|
405
407
|
### Supported current surfaces
|
|
406
408
|
|
|
407
409
|
- **`gjc team ...` CLI** — Primary method for interactive or automated team orchestration. Use this when you want direct tmux-pane visibility or a scriptable launch path.
|
|
410
|
+
- **`gjc team status <team>`** — Read current team/task/worker state.
|
|
411
|
+
- **`gjc team monitor <team>`** — Follow live progress through the supported runtime surface.
|
|
412
|
+
- **`gjc team shutdown <team>`** — Stop recorded active workers and move the team toward terminal state.
|
|
413
|
+
- **`gjc team api <team>`** — Use only for documented programmatic operations exposed by the team runtime.
|
|
408
414
|
- **Team state files** — Inspect `.gjc/_session-{sessionid}/state/team/<team>/` when you need status, task, or mailbox evidence after launch.
|
|
409
415
|
|
|
410
416
|
### Cleanup distinction
|
|
411
417
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
- `team_cleanup` (**state-server**): Deletes team state **files** on disk (`.gjc/_session-{sessionid}/state/team/<team>/`). Use after a team run is fully complete.
|
|
415
|
-
- tmux/session cleanup: Use the documented `gjc team` shutdown / cleanup flow when you need to stop the worker pane or clean up an interrupted run.
|
|
418
|
+
Use `gjc team shutdown <team>` for recorded active workers. After shutdown reports a terminal state and required evidence is preserved, use supported `gjc state ...` session/mode cleanup commands only when you are intentionally clearing state; do not delete team state by hand during an active run. Use manual tmux/session cleanup only for verified stale panes that are not handled by the documented shutdown flow.
|
|
416
419
|
|
|
417
420
|
### Automation example
|
|
418
421
|
|