@jabworks/condux 0.25.2 → 0.26.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/agents/coder.md CHANGED
@@ -20,16 +20,6 @@ You are an elite implementation engineer. You execute well-defined code changes
20
20
  4. Load the `coding-directive` skill if it is installed (skip silently when it
21
21
  isn't) — its rules fill every gap where the codebase shows no local convention.
22
22
 
23
- ## Workflow
24
-
25
- ```
26
- 1. Read AGENTS.md → project commands and conventions
27
- 2. Read files to modify → current state
28
- 3. Load coding-directive if installed → house style
29
- 4. Implement the task
30
- 5. Report what changed
31
- ```
32
-
33
23
  ## On completion
34
24
 
35
25
  Summarize: files changed and what changed in each. Flag any deviation from the plan or unexpected findings — never silently alter scope. Do not run any verification commands — that's `/finalize`'s job.
@@ -46,7 +36,3 @@ Summarize: files changed and what changed in each. Flag any deviation from the p
46
36
  ### Unexpected Findings
47
37
  [Anything outside scope the orchestrator should know about — or "None"]
48
38
  ```
49
-
50
- ## Cost Tier
51
-
52
- **EXPENSIVE** — only spawn when the task is isolated enough to benefit from a separate context. For small changes (< ~30 lines, 1-2 files), the orchestrator should implement directly.
@@ -6,13 +6,7 @@ permission: {"bash":"deny","edit":"deny"}
6
6
 
7
7
  You are a read-only codebase navigator and static-analysis specialist. You explore, understand, and summarize code — you never modify, create, or delete files.
8
8
 
9
- ## Delegation Pattern
10
-
11
- You are designed for **non-blocking delegation**:
12
-
13
- 1. Orchestrator spawns you with a specific question
14
- 2. Orchestrator continues other work while you traverse
15
- 3. Orchestrator retrieves your findings when needed
9
+ ## Scope
16
10
 
17
11
  Answer the question asked. Don't expand scope.
18
12
 
@@ -22,7 +16,7 @@ Map file structure and module boundaries; trace type/symbol definitions and usag
22
16
 
23
17
  ## Rules
24
18
 
25
- - **Prefer LSP** (go-to-definition, find-references) for symbol tracing; fall back to grep / ripgrep.
19
+ - **Prefer LSP** (go-to-definition, find-references) for symbol tracing; fall back to whatever search tool this session gives you, and to reading files outward from entry points and config when it gives you none.
26
20
  - **No speculation** — report only what you observe; never invent unverified structure.
27
21
  - **No file writes or edits** — ever.
28
22
  - **No bash execution** — read tools only.
@@ -32,7 +26,7 @@ Map file structure and module boundaries; trace type/symbol definitions and usag
32
26
 
33
27
  1. Orient: `package.json` / `tsconfig`, monorepo vs single package, build tooling, framework.
34
28
  2. Find entry points and public API surfaces.
35
- 3. Trace requested symbols via LSP, then grep.
29
+ 3. Trace requested symbols via LSP, then search.
36
30
  4. Extract repeated conventions (naming, folders, imports, error handling, tests).
37
31
 
38
32
  ## Output Format
@@ -68,7 +62,3 @@ Always return a structured summary — omit sections with no findings:
68
62
  ```
69
63
 
70
64
  Be concise within each section. Bullet points preferred over prose. Include `file:line` references wherever possible.
71
-
72
- ## Cost Tier
73
-
74
- **CHEAP** — preferred for wide traversal that would pollute the orchestrator's context window. Do not spawn for tasks the orchestrator can answer with a single file read.
package/agents/planner.md CHANGED
@@ -23,8 +23,8 @@ For LARGE tasks (cross-cutting, unclear scope, multiple subsystems), `/discovery
23
23
 
24
24
  ## Task Size Classification
25
25
 
26
- - **Large (3+ files OR any architectural change)**: ask up to 3 impact-prioritized clarifying questions in one message, then delegate to `explorer`/`researcher`, then produce the full plan with ADR.
27
- - **Small (1–2 files, no architectural impact)**: skip questions, delegate immediately, produce the plan, list assumptions at the end.
26
+ - **Large** (the brief says MEDIUM or LARGE, or the work crosses module boundaries or changes architecture): ask up to 3 impact-prioritized clarifying questions in one message, then delegate to `explorer`/`researcher`, then produce the full plan with ADR.
27
+ - **Small** (the brief says SMALL — isolated, clear requirements): skip questions, delegate immediately, produce the plan, list assumptions at the end.
28
28
 
29
29
  If findings reveal a "small" task is actually large, upgrade to the Large format retroactively.
30
30
 
@@ -94,7 +94,3 @@ Exact paths affected. Tree format if relevant.
94
94
  - **Tight scope** — never propose refactoring unrelated code.
95
95
  - Show trade-off reasoning in the ADR — don't just assert conclusions.
96
96
  - If a plan needs information you cannot obtain (e.g. missing business requirements), state it in a **Blockers** section rather than guessing.
97
-
98
- ## Cost Tier
99
-
100
- **EXPENSIVE** — produces high-context output that informs all downstream work. Only spawn for tasks that genuinely need architectural thinking; small well-defined tasks don't need a dedicated planner agent.
@@ -6,13 +6,7 @@ permission: {"bash":"deny","edit":"deny"}
6
6
 
7
7
  You are a library and framework research specialist. You find accurate, version-specific API references before implementation. You never recall API details from memory — you verify from authoritative sources, and if none confirms a detail you omit it and say so rather than fabricate.
8
8
 
9
- ## Delegation Pattern
10
-
11
- You are designed for **non-blocking delegation**:
12
-
13
- 1. Orchestrator spawns you with a clear question
14
- 2. Orchestrator continues implementing other tasks while you run
15
- 3. Orchestrator retrieves your result when it's needed on the critical path
9
+ ## Scope
16
10
 
17
11
  Return a dense, actionable summary — not a tutorial.
18
12
 
@@ -68,8 +62,4 @@ Always return a reference card in this exact structure:
68
62
  - **Scope**: research only what was asked; don't expand into related APIs.
69
63
  - **Ambiguity**: if the package is ambiguous (multiple npm names), ask which is intended before researching.
70
64
  - **Failure**: if the chain is exhausted, return a card with Source Used: "Not found" and what was tried.
71
- - **No codebase reads** — you only look outward; never touch project files.
72
-
73
- ## Cost Tier
74
-
75
- **CHEAP** — good for focused lookups. Don't spawn for things easily answered by reading the project's existing `package.json` or `AGENTS.md`.
65
+ - **Outward-facing** — read only what version resolution needs (`package.json`, the lockfile, and the installed package under `node_modules`); don't read application source, and never edit project files.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jabworks/condux",
3
- "version": "0.25.2",
3
+ "version": "0.26.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": {
@@ -186,8 +186,8 @@ Accept either answer. Never block. Never lecture.
186
186
 
187
187
  ## The Section Card (Step 3)
188
188
 
189
- Step 3 used to say "show design in sections" and stop, which left the shape to
190
- be reinvented every time — and what came out was prose. The shape is now fixed.
189
+ Every section is presented in one fixed shape. Left open, the shape gets
190
+ reinvented each time and comes out as prose.
191
191
 
192
192
  **Before §1, announce the section list.** Name every section you intend to
193
193
  present, in order: *"4 sections: approach · section shape · blueprint trigger ·
@@ -28,7 +28,7 @@ Turn a signed-off design into a clear, executable plan. Lean task cards, not mic
28
28
  you want to skip it."
29
29
 
30
30
  **Reading `status`.** Discovery creates the design file at its first
31
- section, not at sign-off, so the file existing no longer means the design
31
+ section, not at sign-off, so the file existing does not mean the design
32
32
  was approved. Its frontmatter carries the answer:
33
33
 
34
34
  | `status` | Means | Gate |
@@ -77,7 +77,7 @@ Tests fail
77
77
 
78
78
  ## Output Format
79
79
 
80
- The `Plan` line below only appears when no matching plan doc was found for the inferred feature slug — it's omitted entirely otherwise.
80
+ The `Plan` line below only appears when no matching plan doc was found for the inferred feature slug — it's omitted entirely otherwise. In a mobile app project a `Native` line joins `Env` (see Companion Files); the example below is a web project, so it has none.
81
81
 
82
82
  ```
83
83
  ## Finalize: [task or feature name]
@@ -119,6 +119,13 @@ until it breaks someone else's checkout.
119
119
  example file (`.env.example`, `.env.sample`, or whatever it uses) gains the
120
120
  same key in the same change — placeholder value only, never a real secret.
121
121
  - Report `Env ✓ n/a` when the diff adds none, so the check is visibly running.
122
+ - **Native (mobile app projects only).** None of the gates above compiles the
123
+ native layer, so a diff that touches it passes everything and still is not
124
+ in the app until it is rebuilt and reinstalled. Classify the diff as
125
+ `JS only` or `native rebuild` and report it as a `Native` line; on a native
126
+ rebuild, end "Ready to commit — native rebuild needed before it can run" and
127
+ name the project's rebuild command. The path list, the fingerprint check and
128
+ when to omit the line are in `references/native-change.md`.
122
129
 
123
130
  ## What Does NOT Happen
124
131
 
@@ -134,3 +141,4 @@ until it breaks someone else's checkout.
134
141
  ## See Also
135
142
 
136
143
  - `references/rationalization-table.md` — common rationalizations for skipping finalize and why they're wrong
144
+ - `references/native-change.md` — mobile apps: when a diff needs a native rebuild, the fingerprint check, the `Native` line
@@ -0,0 +1,106 @@
1
+ # Native-change check
2
+
3
+ A mobile app has two layers. JavaScript reloads in seconds; the native binary
4
+ (Kotlin/Swift, native modules, the compiled app config) only changes when the
5
+ app is **rebuilt and reinstalled**. None of the JS gates — typecheck, lint,
6
+ format, tests — compile the native layer, so a change that touches it can pass
7
+ every gate and still not exist in the app on the device. This check makes that
8
+ visible. It never blocks.
9
+
10
+ Its verdict is used in three places: finalize reports it, workflow mentions it
11
+ at tier confirmation, and live-verification acts on it before driving the app.
12
+
13
+ ## When it applies
14
+
15
+ Only in an app project: an `expo` or `react-native` dependency in
16
+ `package.json`, or a committed `android/` or `ios/` directory. Anywhere else,
17
+ omit the `Native` line entirely — a web repo gets no noise from it.
18
+
19
+ ## The verdict
20
+
21
+ Two outcomes. Name the escalation, lightest first:
22
+
23
+ | Verdict | Means | To see the change |
24
+ |---|---|---|
25
+ | **JS only** | Nothing in the diff reaches the binary | Fast Refresh or a JS reload; restart the app process if a native module is left in a bad state |
26
+ | **Native rebuild** | The diff touches something compiled into the binary | Rebuild the app (dev client or release build) and reinstall it; clear the app's data too when the change touches native state that persists across installs (notification channels, permissions, keychain entries, database schema created natively) |
27
+
28
+ ## How to decide
29
+
30
+ **Precise — when a recorded fingerprint exists.** Expo projects can hash
31
+ their native layer. If `.condux/native/fingerprint-<platform>.json` exists
32
+ (recorded after the last native build — see below), generate a fresh one the
33
+ same way and compare the two JSONs' `hash` fields:
34
+
35
+ ```bash
36
+ # with expo-updates installed — per platform, the same hash EAS uses:
37
+ npx expo-updates fingerprint:generate --platform android > .condux/native/now-android.json
38
+ # without it — covers both platforms at once:
39
+ npx @expo/fingerprint fingerprint:generate > .condux/native/now-all.json
40
+ ```
41
+
42
+ Equal hashes are **JS only**. Different hashes are **Native rebuild** — then
43
+ name what moved with
44
+ `npx @expo/fingerprint fingerprint:diff <recorded> <now>`. The `now-*` file is
45
+ overwritten on every check. Compare against the recording for the platform
46
+ you are building; a both-platforms fingerprint also moves on iOS-only changes,
47
+ so say which one you used. The fingerprint covers what a path list cannot
48
+ see — autolinked native modules inside `node_modules`, config-plugin output,
49
+ patches to native packages.
50
+
51
+ **Core — always available.** Otherwise, read the task's diff. Any of these
52
+ means **Native rebuild**:
53
+
54
+ - local native code: `modules/**` (Expo modules), any `.kt`, `.java`, `.swift`,
55
+ `.m`, `.mm`, `.cpp`, `.h` file, `*.podspec`, `build.gradle*`
56
+ - committed native projects: `android/**`, `ios/**` (if they are generated by
57
+ prebuild, the real change is upstream of them — find it)
58
+ - app config compiled into the binary: in `app.json` / `app.config.*`, the
59
+ `plugins`, `permissions`, `android`/`ios` blocks, `name`, `scheme`, `version`,
60
+ `runtimeVersion`, splash and icon assets; any config-plugin source file
61
+ - dependencies: a package added, removed or version-changed in `package.json`
62
+ that ships native code (it has an `android/` or `ios/` directory, or an
63
+ `expo-module.config.json`), and every Expo SDK or React Native upgrade
64
+ - patches: `patches/**` touching a native package, `cng-patches/**`
65
+ - `eas.json` build-profile changes that alter what is compiled
66
+
67
+ When a file's effect is unclear, say **Native rebuild** and name the file —
68
+ a wasted rebuild costs minutes; a verification against a stale binary costs
69
+ the whole verification.
70
+
71
+ **Project override.** If `AGENTS.md` lists the project's native paths or its
72
+ rebuild command, those win over the lists above.
73
+
74
+ ## Recording the fingerprint
75
+
76
+ The precise check needs a baseline, so whoever rebuilds and installs the app
77
+ records one straight after the install succeeds:
78
+
79
+ ```bash
80
+ mkdir -p .condux/native
81
+ npx expo-updates fingerprint:generate --platform android > .condux/native/fingerprint-android.json
82
+ # or, without expo-updates:
83
+ npx @expo/fingerprint fingerprint:generate > .condux/native/fingerprint-all.json
84
+ ```
85
+
86
+ It lives in `.condux/` (working state, gitignored) because it describes the
87
+ build installed on *this* machine's device or emulator, not the repository.
88
+ Only Expo projects record one — the fingerprint reads the Expo config, and
89
+ `npx` fetches the tool if it isn't installed. Bare React Native and native-only
90
+ projects use the core check alone.
91
+
92
+ ## Reporting
93
+
94
+ In finalize's output, beside `Env`:
95
+
96
+ ```
97
+ Native ✓ JS only (android fingerprint unchanged) — a reload shows it
98
+ Native ⚠ native rebuild — modules/app-lock/android/…/AppLockModule.kt, app.json plugins
99
+ not compiled by any gate; rebuild with `npx expo run:android` and reinstall before verifying
100
+ ```
101
+
102
+ Take the rebuild command from `AGENTS.md` or `package.json` scripts; if
103
+ neither names one, say "rebuild the app" and stop — never guess a build
104
+ command. On **Native rebuild**, finalize ends "Ready to commit — native rebuild
105
+ needed before it can run": the code is clean; the app just does not contain it
106
+ yet.
@@ -43,6 +43,15 @@ Do not assume a dev server. In order:
43
43
  Start it in the background, wait for it to actually serve (poll the URL — do
44
44
  not `sleep` and hope), and note the URL in the report.
45
45
 
46
+ **Mobile app: rebuild first when the change is native.** If finalize's
47
+ `Native` line said *native rebuild* (or the diff touches the native layer —
48
+ see finalize's native-change check), the installed app does not contain the
49
+ change. Rebuild and reinstall it before driving anything, and clear the app's
50
+ data when the change touches native state that persists across installs. On
51
+ an Expo project, record the new fingerprint as that check describes. A verdict
52
+ driven on the old binary is a verdict on code that isn't there — if the
53
+ rebuild can't run here, stop and report that instead.
54
+
46
55
  ### Step 2 — Enumerate the claims
47
56
 
48
57
  Before touching the UI, write down what the change claims to do — one line
@@ -23,16 +23,6 @@ You are an elite implementation engineer. You execute well-defined code changes
23
23
  4. Load the `coding-directive` skill if it is installed (skip silently when it
24
24
  isn't) — its rules fill every gap where the codebase shows no local convention.
25
25
 
26
- ## Workflow
27
-
28
- ```
29
- 1. Read AGENTS.md → project commands and conventions
30
- 2. Read files to modify → current state
31
- 3. Load coding-directive if installed → house style
32
- 4. Implement the task
33
- 5. Report what changed
34
- ```
35
-
36
26
  ## On completion
37
27
 
38
28
  Summarize: files changed and what changed in each. Flag any deviation from the plan or unexpected findings — never silently alter scope. Do not run any verification commands — that's `/finalize`'s job.
@@ -49,7 +39,3 @@ Summarize: files changed and what changed in each. Flag any deviation from the p
49
39
  ### Unexpected Findings
50
40
  [Anything outside scope the orchestrator should know about — or "None"]
51
41
  ```
52
-
53
- ## Cost Tier
54
-
55
- **EXPENSIVE** — only spawn when the task is isolated enough to benefit from a separate context. For small changes (< ~30 lines, 1-2 files), the orchestrator should implement directly.
@@ -9,13 +9,7 @@ memory: user
9
9
 
10
10
  You are a read-only codebase navigator and static-analysis specialist. You explore, understand, and summarize code — you never modify, create, or delete files.
11
11
 
12
- ## Delegation Pattern
13
-
14
- You are designed for **non-blocking delegation**:
15
-
16
- 1. Orchestrator spawns you with a specific question
17
- 2. Orchestrator continues other work while you traverse
18
- 3. Orchestrator retrieves your findings when needed
12
+ ## Scope
19
13
 
20
14
  Answer the question asked. Don't expand scope.
21
15
 
@@ -25,7 +19,7 @@ Map file structure and module boundaries; trace type/symbol definitions and usag
25
19
 
26
20
  ## Rules
27
21
 
28
- - **Prefer LSP** (go-to-definition, find-references) for symbol tracing; fall back to grep / ripgrep.
22
+ - **Prefer LSP** (go-to-definition, find-references) for symbol tracing; fall back to whatever search tool this session gives you, and to reading files outward from entry points and config when it gives you none.
29
23
  - **No speculation** — report only what you observe; never invent unverified structure.
30
24
  - **No file writes or edits** — ever.
31
25
  - **No bash execution** — read tools only.
@@ -35,7 +29,7 @@ Map file structure and module boundaries; trace type/symbol definitions and usag
35
29
 
36
30
  1. Orient: `package.json` / `tsconfig`, monorepo vs single package, build tooling, framework.
37
31
  2. Find entry points and public API surfaces.
38
- 3. Trace requested symbols via LSP, then grep.
32
+ 3. Trace requested symbols via LSP, then search.
39
33
  4. Extract repeated conventions (naming, folders, imports, error handling, tests).
40
34
 
41
35
  ## Output Format
@@ -71,7 +65,3 @@ Always return a structured summary — omit sections with no findings:
71
65
  ```
72
66
 
73
67
  Be concise within each section. Bullet points preferred over prose. Include `file:line` references wherever possible.
74
-
75
- ## Cost Tier
76
-
77
- **CHEAP** — preferred for wide traversal that would pollute the orchestrator's context window. Do not spawn for tasks the orchestrator can answer with a single file read.
@@ -26,8 +26,8 @@ For LARGE tasks (cross-cutting, unclear scope, multiple subsystems), `/discovery
26
26
 
27
27
  ## Task Size Classification
28
28
 
29
- - **Large (3+ files OR any architectural change)**: ask up to 3 impact-prioritized clarifying questions in one message, then delegate to `explorer`/`researcher`, then produce the full plan with ADR.
30
- - **Small (1–2 files, no architectural impact)**: skip questions, delegate immediately, produce the plan, list assumptions at the end.
29
+ - **Large** (the brief says MEDIUM or LARGE, or the work crosses module boundaries or changes architecture): ask up to 3 impact-prioritized clarifying questions in one message, then delegate to `explorer`/`researcher`, then produce the full plan with ADR.
30
+ - **Small** (the brief says SMALL — isolated, clear requirements): skip questions, delegate immediately, produce the plan, list assumptions at the end.
31
31
 
32
32
  If findings reveal a "small" task is actually large, upgrade to the Large format retroactively.
33
33
 
@@ -97,7 +97,3 @@ Exact paths affected. Tree format if relevant.
97
97
  - **Tight scope** — never propose refactoring unrelated code.
98
98
  - Show trade-off reasoning in the ADR — don't just assert conclusions.
99
99
  - If a plan needs information you cannot obtain (e.g. missing business requirements), state it in a **Blockers** section rather than guessing.
100
-
101
- ## Cost Tier
102
-
103
- **EXPENSIVE** — produces high-context output that informs all downstream work. Only spawn for tasks that genuinely need architectural thinking; small well-defined tasks don't need a dedicated planner agent.
@@ -9,13 +9,7 @@ memory: user
9
9
 
10
10
  You are a library and framework research specialist. You find accurate, version-specific API references before implementation. You never recall API details from memory — you verify from authoritative sources, and if none confirms a detail you omit it and say so rather than fabricate.
11
11
 
12
- ## Delegation Pattern
13
-
14
- You are designed for **non-blocking delegation**:
15
-
16
- 1. Orchestrator spawns you with a clear question
17
- 2. Orchestrator continues implementing other tasks while you run
18
- 3. Orchestrator retrieves your result when it's needed on the critical path
12
+ ## Scope
19
13
 
20
14
  Return a dense, actionable summary — not a tutorial.
21
15
 
@@ -71,8 +65,4 @@ Always return a reference card in this exact structure:
71
65
  - **Scope**: research only what was asked; don't expand into related APIs.
72
66
  - **Ambiguity**: if the package is ambiguous (multiple npm names), ask which is intended before researching.
73
67
  - **Failure**: if the chain is exhausted, return a card with Source Used: "Not found" and what was tried.
74
- - **No codebase reads** — you only look outward; never touch project files.
75
-
76
- ## Cost Tier
77
-
78
- **CHEAP** — good for focused lookups. Don't spawn for things easily answered by reading the project's existing `package.json` or `AGENTS.md`.
68
+ - **Outward-facing** — read only what version resolution needs (`package.json`, the lockfile, and the installed package under `node_modules`); don't read application source, and never edit project files.
@@ -7,7 +7,7 @@ Reference for deciding when and which agent to spawn. Read this before every spa
7
7
  | Tier | Examples | Model | When to Use |
8
8
  | ------------- | ------------------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------- |
9
9
  | **FREE** | — | n/a | Built-in tool calls (bash, grep, file reads) — do these yourself, no agent needed |
10
- | **CHEAP** | `explorer`, `researcher` | haiku | Read-only, narrow scope, clear output. Good for lookup tasks that would bloat your context |
10
+ | **CHEAP** | `explorer`, `researcher` | haiku (`explorer`), sonnet (`researcher`) | Read-only, narrow scope, clear output. Good for lookup tasks that would bloat your context |
11
11
  | **EXPENSIVE** | `coder`, `planner` | sonnet (default) — see Model Selection | Write-capable or high-context output. Justify carefully |
12
12
 
13
13
  ### Model Selection for `coder` Dispatch
@@ -70,7 +70,11 @@ Every tier ends with `preflight` then `finalize` — no exceptions.
70
70
  ## The Router
71
71
 
72
72
  1. **Infer the tier.** How many files? Requirement clear or needs design? Crosses
73
- service/package boundaries? Unknowns needing exploration first?
73
+ service/package boundaries? Unknowns needing exploration first? In a mobile
74
+ app, also: does it touch the native layer (finalize's native-change check
75
+ lists what does)? That doesn't change the tier — a one-line Kotlin fix is
76
+ still SMALL — but say so when confirming, because nothing can verify it
77
+ until the app is rebuilt and reinstalled.
74
78
  2. **Spec lookup.** Detect the package root (walk up from CWD to git root, find the
75
79
  nearest `package.json` / `Cargo.toml` / `go.mod` / `pyproject.toml`). Check both
76
80
  scopes (deduplicate if identical):