@jabworks/condux 0.9.1 → 0.10.1
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/package.json +1 -1
- package/skills/subagent-deployment/SKILL.md +7 -1
- package/skills/subagent-deployment/evals/trigger_eval.json +3 -3
- package/skills/technical-spec/SKILL.md +13 -1
- package/skills/technical-spec/references/scaffold.sh +10 -0
- package/skills/technical-spec/references/templates.md +10 -0
- package/skills/workflow/SKILL.md +10 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jabworks/condux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "OpenCode plugin for the condux workflow toolkit — bundles the condux skills and injects the specialist agents (coder, explorer, planner, researcher) plus an opt-in plan-review listener.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: subagent-deployment
|
|
3
|
-
description: "Fan out 2+ independent tasks across named agents (explorer/researcher/planner/coder) in a single message when they share no files and no dependencies. For ad-hoc independent work discovered outside a formal plan. Trigger when two or more genuinely independent tasks
|
|
3
|
+
description: "Fan out 2+ independent tasks across named agents (explorer/researcher/planner/coder) in a single message when they share no files and no dependencies. For ad-hoc independent work discovered outside a formal plan. Trigger when the fan-out is already the ask — \"in parallel\", \"fan out\", \"dispatch these together\", \"kick off explorer and researcher\" — over two or more genuinely independent tasks, nothing shared, no ordering. Independence alone is not the signal: a plain implementation request goes to workflow first, which loads this when the tier warrants it. Also owns which agent gets dispatched: asking to spawn a generic or custom-prompt subagent routes here, where the answer is one of the four named agents instead. Not for executing an ordered plan task-by-task (that's subagent-execution)."
|
|
4
4
|
argument-hint: "<list of independent tasks>"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,6 +8,12 @@ argument-hint: "<list of independent tasks>"
|
|
|
8
8
|
|
|
9
9
|
Deploy independent agents at once, not one at a time. For genuinely unrelated work — not for executing an ordered plan.
|
|
10
10
|
|
|
11
|
+
**This runs inside `/workflow`, not instead of it.** Independent work is a
|
|
12
|
+
precondition, not a trigger: "fix these three unrelated tests" is an
|
|
13
|
+
implementation request and goes to the router, which loads this skill if the
|
|
14
|
+
tier warrants it. What reaches here directly is a request that already names
|
|
15
|
+
the fan-out — parallel, dispatch, fan out, these agents at once.
|
|
16
|
+
|
|
11
17
|
## Usage
|
|
12
18
|
|
|
13
19
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[
|
|
2
|
-
{ "query": "fix these 3 unrelated failing test files at once", "should_trigger": true, "expected_skill": "subagent-deployment" },
|
|
2
|
+
{ "query": "fix these 3 unrelated failing test files at once", "should_trigger": true, "expected_skill": "workflow", "note": "cold bug-fix request: the router owns it and loads subagent-deployment only if the tier warrants" },
|
|
3
3
|
{ "query": "in parallel: look up the stripe api and explore the auth module", "should_trigger": true, "expected_skill": "subagent-deployment" },
|
|
4
|
-
{ "query": "two independent bugs in different packages, handle both", "should_trigger": true, "expected_skill": "
|
|
4
|
+
{ "query": "two independent bugs in different packages, handle both", "should_trigger": true, "expected_skill": "workflow", "note": "cold bug-fix request: independence alone does not bypass the router" },
|
|
5
5
|
{ "query": "fan out this research across agents", "should_trigger": true, "expected_skill": "subagent-deployment" },
|
|
6
6
|
{ "query": "batch these lookups together", "should_trigger": true, "expected_skill": "subagent-deployment" },
|
|
7
7
|
{ "query": "run these together, theyre totally unrelated", "should_trigger": true, "expected_skill": "subagent-deployment" },
|
|
@@ -17,6 +17,6 @@
|
|
|
17
17
|
{ "query": "one small task, just do it yourself", "should_trigger": true, "expected_skill": "workflow" },
|
|
18
18
|
{ "query": "deploy the app to production", "should_trigger": false, "expected_skill": null },
|
|
19
19
|
{ "query": "set up the deployment pipeline for staging", "should_trigger": false, "expected_skill": null },
|
|
20
|
-
{ "query": "parallelize the test suite in ci", "should_trigger":
|
|
20
|
+
{ "query": "parallelize the test suite in ci", "should_trigger": true, "expected_skill": "workflow", "note": "parallelising a test suite is an implementation request, not a fan-out instruction" },
|
|
21
21
|
{ "query": "map reduce over these records", "should_trigger": false, "expected_skill": null }
|
|
22
22
|
]
|
|
@@ -23,7 +23,7 @@ to place the spec.
|
|
|
23
23
|
{feature-slug}/ # cross-cutting, or scaffolded from the repo root
|
|
24
24
|
apps/web/
|
|
25
25
|
{feature-slug}/ # scaffolded while working in apps/web
|
|
26
|
-
index.md # TOC, last updated, commit hash, changelog ← scaffold creates this
|
|
26
|
+
index.md # purpose, TOC, last updated, commit hash, changelog ← scaffold creates this
|
|
27
27
|
decisions.md # Design decisions with context + rationale
|
|
28
28
|
api.md # Endpoints, types, external APIs consumed
|
|
29
29
|
fields.md # Field mappings: BE/3rd-party → UI, or forwarding chains
|
|
@@ -88,6 +88,18 @@ Read [references/templates.md](references/templates.md) for the structure of eac
|
|
|
88
88
|
|
|
89
89
|
- Write only files that have real content
|
|
90
90
|
- After writing, update the `## Contents` section in `index.md` with links to the files you created
|
|
91
|
+
- Replace the HTML comment the scaffold left below the title with a one-line
|
|
92
|
+
`> …` note saying what the spec is for. That note is what `spec-browser`'s
|
|
93
|
+
catalog shows for the spec; leave it and the spec is listed with nothing to
|
|
94
|
+
identify it
|
|
95
|
+
|
|
96
|
+
**Cite committed paths only.** The spec is durable; the design and plan it came
|
|
97
|
+
from live in `.condux/`, which is gitignored — a citation into it is dead on
|
|
98
|
+
every machine but this one. When the changelog or a content file needs to point
|
|
99
|
+
at a design or a verification report, copy that file into the spec directory
|
|
100
|
+
first (`design.md`, `verification.md`) and cite that path. If the artifact is
|
|
101
|
+
already gone, say so and name what survives — a PR, a commit — instead of a
|
|
102
|
+
path that resolves nowhere.
|
|
91
103
|
|
|
92
104
|
## Updating an Existing Spec
|
|
93
105
|
|
|
@@ -82,9 +82,19 @@ fi
|
|
|
82
82
|
|
|
83
83
|
mkdir -p "$SPEC_DIR"
|
|
84
84
|
|
|
85
|
+
# The comment is the purpose slot. spec-browser's catalog (specs/index.md)
|
|
86
|
+
# shows a spec's "> note" as its description and an honest "—" when there is
|
|
87
|
+
# none, so a spec with no purpose line is listed with nothing to identify it.
|
|
88
|
+
# A visible placeholder would be worse — it generates into the catalog looking
|
|
89
|
+
# like content — so the prompt is an HTML comment, which the catalog skips and
|
|
90
|
+
# no rendered view of the file displays.
|
|
85
91
|
cat > "$SPEC_DIR/index.md" <<EOF
|
|
86
92
|
# $INPUT — Tech Spec
|
|
87
93
|
|
|
94
|
+
<!-- Replace this comment with a one-line "> …" note saying what this spec is
|
|
95
|
+
for. It is what specs/index.md shows for this spec; without it the catalog
|
|
96
|
+
lists this spec with no description. -->
|
|
97
|
+
|
|
88
98
|
**Last updated:** $DATE
|
|
89
99
|
**Commit:** $COMMIT
|
|
90
100
|
**Status:** draft
|
|
@@ -9,6 +9,9 @@ Copy-paste templates for each spec file. Omit sections that don't apply — don'
|
|
|
9
9
|
```markdown
|
|
10
10
|
# {Feature Name} — Tech Spec
|
|
11
11
|
|
|
12
|
+
> One line: what this spec is for. This is what the catalog (`specs/index.md`)
|
|
13
|
+
> shows for the spec — without it the spec is listed with no description.
|
|
14
|
+
|
|
12
15
|
**Last updated:** {YYYY-MM-DD}
|
|
13
16
|
**Commit:** {short-hash}
|
|
14
17
|
**Status:** draft | review | stable
|
|
@@ -24,6 +27,13 @@ Copy-paste templates for each spec file. Omit sections that don't apply — don'
|
|
|
24
27
|
- {YYYY-MM-DD} ({short-hash}): Initial spec
|
|
25
28
|
```
|
|
26
29
|
|
|
30
|
+
**Cite committed paths only.** A spec is durable; the design and plan it came
|
|
31
|
+
from are working state under `.condux/`, gitignored and gone on any other
|
|
32
|
+
machine. If the changelog or body needs to point at a design or a verification
|
|
33
|
+
report, copy that file into this spec's directory first (`design.md`,
|
|
34
|
+
`verification.md`) and cite *that*. Six such citations were written before this
|
|
35
|
+
rule existed and two were already dead when they were found.
|
|
36
|
+
|
|
27
37
|
---
|
|
28
38
|
|
|
29
39
|
## decisions.md
|
package/skills/workflow/SKILL.md
CHANGED
|
@@ -183,6 +183,16 @@ The spec is what you keep; the design and plan are scaffolding for building
|
|
|
183
183
|
it. Don't promote working state into `docs/` or the repo root — a project's
|
|
184
184
|
`docs/` belongs to the project, not to condux.
|
|
185
185
|
|
|
186
|
+
**Citation direction: durable content may not depend on ephemeral content.**
|
|
187
|
+
A committed file may not cite a path inside `.condux/` — that path is gone on
|
|
188
|
+
any other machine and on any fresh clone, so the reference is dead for everyone
|
|
189
|
+
but its author. When a spec, a changelog entry or a backlog item needs to point
|
|
190
|
+
at a design or a verification report, **promote it first**: copy that file into
|
|
191
|
+
the durable tree (the spec directory it belongs to) and cite the committed
|
|
192
|
+
path. If the artifact no longer exists, say so and name what survives — a PR, a
|
|
193
|
+
commit — rather than a path that resolves nowhere. The split above says where
|
|
194
|
+
each artifact *lives*; this says which direction a reference may point.
|
|
195
|
+
|
|
186
196
|
**Bootstrap.** `.condux/` is created on demand at the git root by the first
|
|
187
197
|
skill that writes there. Before that first write, check it's ignored:
|
|
188
198
|
|