@pennixrv/trellis 0.7.0-beta.43 → 0.7.0-beta.44

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.
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.7.0-beta.44",
3
+ "description": "Bounded Codex memory queries and workflow asset boundaries",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "Read Codex JSONL memory queries in bounded passes, preserve compaction and repeated-turn semantics, enforce context character budgets, and clarify managed asset, dispatch, archive acceptance, and bulk research boundaries.",
7
+ "migrations": [],
8
+ "notes": "No migrations. Existing session data, task state, and user-owned workflow files are preserved."
9
+ }
@@ -2,8 +2,12 @@
2
2
 
3
3
  Use after the user has authorized independent evidence and the task owns a
4
4
  reviewed unit mapping. Read `subnode-work.md` for artifact and acceptance rules.
5
- Codex inline mode governs native implement/check agents; it does not disable
6
- explicit Channel evidence. Missing independent reports cannot be replaced by
5
+ Codex inline workflows skip native implement/check dispatch and keep ordinary
6
+ implementation/checking in the main session; inline mode does not disable
7
+ explicit Channel evidence. Channel implement/check workers belong to a
8
+ separately selected Channel-driven workflow, not `codex-subnode-channel`.
9
+ Codex Channel workers disable their own native multi-agent features to prevent
10
+ recursive dispatch. Missing independent reports cannot be replaced by
7
11
  main-session pass claims.
8
12
 
9
13
  ## Prepare And Dispatch In One Host Call
@@ -3,6 +3,13 @@
3
3
  Use these patterns by intent. Prefer durable channels for multi-round work and
4
4
  `channel run` for one-shot questions.
5
5
 
6
+ The selected project workflow owns the dispatch and evidence contract. Under
7
+ `codex-subnode-channel`, the main session implements/checks inline and explicitly
8
+ approved independent evidence uses the subnode brief/report/acceptance path in
9
+ `subnode-work.md`. The generic agent examples below do not override that path.
10
+ Codex Channel workers disable their own native multi-agent features to prevent
11
+ recursion; main-session inline mode does not disable explicit Channel evidence.
12
+
6
13
  ## Pattern A: Multi-round Brainstorm
7
14
 
8
15
  Use when the user says "和 codex/claude 讨论一下", "brainstorm", or "拉一个 agent
@@ -49,7 +56,10 @@ needed.
49
56
 
50
57
  ## Pattern B: Implement / Check Agent
51
58
 
52
- Use when the user asks to dispatch implementation or review work.
59
+ Use only when the selected workflow permits Channel implement/check dispatch
60
+ and the task authorizes it, such as a Channel-driven workflow. Under
61
+ `codex-subnode-channel`, use an approved independent-evidence subnode instead;
62
+ ordinary implementation/checking stays in the main session.
53
63
 
54
64
  ```bash
55
65
  TASK=.trellis/tasks/05-12-foo
@@ -74,7 +84,9 @@ already run.
74
84
 
75
85
  ## Pattern C: Parallel Reviewers
76
86
 
77
- Use one channel and distinct worker names.
87
+ Use one channel and distinct worker names only under the same permitted
88
+ dispatch contract as Pattern B. These generic check workers are not the default
89
+ review path for `codex-subnode-channel`.
78
90
 
79
91
  ```bash
80
92
  trellis channel create cr-feature --ephemeral
@@ -4,10 +4,11 @@ When the user wants to change AI entry points, auto-trigger rules, or explicit c
4
4
 
5
5
  Before editing, classify the skill you are about to touch:
6
6
 
7
- - **Bundled upstream skill** — `trellis-meta`, `trellis-spec-bootstrap`, `trellis-session-insight`, `trellis-channel`. Source of truth lives in the Trellis CLI repo under `packages/cli/src/templates/common/bundled-skills/<name>/`; auto-dispatched to every platform's skill root by `getBundledSkillTemplates()` on `trellis init` / `trellis update`. Local edits here are tracked by `.trellis/.template-hashes.json` and will be flagged on the next update.
8
- - **Project-local skill** — anything else under `.{platform}/skills/`. Owned by the user; not refreshed by `trellis update`.
7
+ - **Bundled multi-file skill** — `trellis-meta`, `trellis-spec-bootstrap`, `trellis-session-insight`, `trellis-channel`, `trellis-research-record`. Source lives under `packages/cli/src/templates/common/bundled-skills/<name>/`; `getBundledSkillTemplates()` distributes it to each platform skill root on init/update.
8
+ - **Other Trellis-managed entry** — single-file skills such as `trellis-check` and `trellis-before-dev`, command-backed skills such as `trellis-finish-work`, and platform-specific entries. Their sources live under `common/skills/`, `common/commands/` or the relevant platform template directory. Configurators generate them and update tracks their template hashes too.
9
+ - **Project-local entry** — content created by the project outside the managed template set, owned by the user and not refreshed by `trellis update`. Its directory or absence from a short bundled-name list does not establish ownership.
9
10
 
10
- The remainder of this file uses "skill" for the local file; the override and conflict rules differ between the two cases.
11
+ The remainder uses "skill" for the local file. Confirm its actual source and generated-file ownership before choosing the edit path.
11
12
 
12
13
  ## Read These Files First
13
14
 
@@ -15,7 +16,7 @@ The remainder of this file uses "skill" for the local file; the override and con
15
16
  2. Target platform skill/command/prompt/workflow directory
16
17
  3. Related agent or hook files
17
18
  4. Whether project rules already exist in `.trellis/spec/`
18
- 5. `.trellis/.template-hashes.json` — confirms whether the skill you are about to edit is upstream-owned (entry present) or project-local (entry absent)
19
+ 5. `.trellis/.template-hashes.json` and the relevant template/configurator — a hash entry confirms management; a missing entry alone does not prove project ownership.
19
20
 
20
21
  ## Which Entry Type To Choose
21
22
 
@@ -25,7 +26,7 @@ The remainder of this file uses "skill" for the local file; the override and con
25
26
  | User wants to trigger manually with a command | Add or modify a command/prompt/workflow. |
26
27
  | Team project conventions | Prefer `.trellis/spec/` or a project-local skill — never a bundled skill directory. |
27
28
  | Tweak a bundled skill (`trellis-meta` et al.) for the user's own project | Create a project-local sibling skill (different name) that overrides intent, or edit `.trellis/spec/`. Edits inside the bundled skill directory survive only until the next `trellis update` and will need a "keep" choice each time. |
28
- | Contribute the change back upstream | Edit `packages/cli/src/templates/common/bundled-skills/<name>/` in the Trellis CLI repo, not the deployed copy. |
29
+ | Contribute the change back upstream | Edit its actual bundled, common skill/command or platform template source in the Trellis CLI repo, not the deployed copy. |
29
30
  | Change Trellis flow semantics | Synchronize `.trellis/workflow.md`. |
30
31
 
31
32
  ## Modify A Skill
@@ -50,12 +51,12 @@ Do not write vague descriptions such as "helpful project skill"; they can trigge
50
51
 
51
52
  ### Bundled vs. Project-Local
52
53
 
53
- The same directory shape is used by two very different ownership models:
54
+ The same directory shape can contain different ownership models:
54
55
 
55
- | Aspect | Bundled (`trellis-meta`, `trellis-spec-bootstrap`, `trellis-session-insight`, `trellis-channel`) | Project-local |
56
+ | Aspect | Trellis-managed entry | Project-local |
56
57
  | --- | --- | --- |
57
- | Source of truth | `packages/cli/src/templates/common/bundled-skills/<name>/` in Trellis CLI repo | Inside the user project itself |
58
- | Dispatch | Auto-dispatched to every platform skill root by `getBundledSkillTemplates()` (`packages/cli/src/templates/common/index.ts`) on `trellis init` / `trellis update` | Created by the user (or another skill) and never moved |
58
+ | Source of truth | Actual bundled, common skill/command or platform template in the Trellis CLI repo | Inside the user project itself |
59
+ | Generation | Bundled files use `getBundledSkillTemplates()`; other entries use the platform configurator on init/update | Created by the user (or another skill) |
59
60
  | Hash tracking | Every file recorded in `.trellis/.template-hashes.json`; conflict prompt on update | Not tracked |
60
61
  | Editing locally | Allowed but will be marked "modified by user" on next update | Free editing |
61
62
  | The right way to customize | Add a *new* project-local skill with a *different* name that supplements (or supersedes) the bundled one | Edit the file directly |
@@ -92,7 +93,7 @@ If a command only repeats workflow rules, prefer making it reference/read `.trel
92
93
  | ZCode | `.zcode/skills/`, `.zcode/commands/` |
93
94
  | Kilo / Antigravity / Devin | workflows + skills |
94
95
 
95
- Every directory above is a deploy target for the four bundled skills. Each platform receives a full copy on `trellis init` and refresh on `trellis update`; nothing has to be wired by hand.
96
+ The bundled multi-file skills are distributed to each supported platform skill root on init/update; other managed entries follow that platform's configurator. Read the actual template set rather than inferring it from a fixed count.
96
97
 
97
98
  ## Add A Project-Local Skill
98
99
 
@@ -111,8 +112,9 @@ Pick a name that does **not** collide with the bundled set:
111
112
  - `trellis-spec-bootstrap`
112
113
  - `trellis-session-insight`
113
114
  - `trellis-channel`
115
+ - `trellis-research-record`
114
116
 
115
- A reused name causes `getBundledSkillTemplates()` to overwrite the project-local copy on the next update. A common convention is to prefix the project name: `acme-trellis-deploy`, `acme-trellis-onboarding`.
117
+ Also avoid names of generated single-file or platform entries. A collision becomes managed template content or an update conflict; it is not a durable override. A common convention is to prefix the project name: `acme-trellis-deploy`, `acme-trellis-onboarding`.
116
118
 
117
119
  ## Notes
118
120
 
@@ -22,10 +22,12 @@ Each phase contains numbered steps, such as `1.3 Configure context`. These numbe
22
22
 
23
23
  ## Skill Routing
24
24
 
25
- `workflow.md` separates routing by platform capability:
25
+ Read the selected `workflow.md` and current task phase to determine routing;
26
+ platform capability alone does not select the implementation/check path:
26
27
 
27
- - Platforms with sub-agent support: dispatch `trellis-implement` by default for implementation and `trellis-check` for checking.
28
- - Platforms without sub-agent support: the main session reads skills such as `trellis-before-dev`, then executes directly.
28
+ - A workflow that selects native sub-agent dispatch uses its platform-supported `trellis-implement` / `trellis-check` path.
29
+ - An inline workflow has the main session read `trellis-before-dev`, implement and check directly. Explicit Channel independent evidence remains subject to that workflow's authorization and acceptance contract.
30
+ - A Channel-driven workflow is a separate selected variant; generic Channel examples do not override an inline workflow.
29
31
 
30
32
  When changing local AI behavior, update the routing descriptions in `workflow.md` first, then check whether the corresponding platform skill, command, or agent files need to stay in sync.
31
33
 
@@ -59,7 +61,7 @@ Common changes:
59
61
  | Add a phase | Update the Phase Index, phase body, routing, and state blocks. |
60
62
  | Change task creation policy | Update the `no_task` state block and Phase 1 description. |
61
63
  | Change the default implementation/check path | Update Phase 2 and skill routing. |
62
- | Change the wrap-up flow | Update Phase 3 and `finish-work` related descriptions. Note the current split: Phase 3.4 = AI-driven code commits (batched, user-confirmed), Phase 3.5 = `/finish-work` (archive + record session). `/finish-work` refuses to run if the working tree is dirty. |
64
+ | Change the wrap-up flow | Update Phase 3 and `finish-work` descriptions together. Follow the selected workflow's commit/push authorization; finish-work checks acceptance and classifies task-related versus unrelated dirty paths before archive and journal recording. |
63
65
  | Change platform differences | Update routing descriptions grouped by platform. |
64
66
 
65
67
  After editing, make the AI reread `.trellis/workflow.md`; do not assume the flow from the old conversation is still valid.
@@ -63,6 +63,29 @@ intent, including any minimal source-note status/version/target-link update.
63
63
  Existing authorized task/spec duties do not acquire an extra confirmation gate.
64
64
  Verify each target independently; do not introduce automatic synchronization.
65
65
 
66
+ ## Bulk history and resource boundaries
67
+
68
+ For bulk or remote history research, first define the project path, platform,
69
+ date range, question and required session types. Start with metadata and a small
70
+ sample to verify the stored structure; filter before extracting bodies. Confirm
71
+ main-session versus child-session scope from actual metadata, not file counts.
72
+
73
+ Choose the processing location and authorized destination before reading a
74
+ large corpus. Process one bounded unit at a time, retain only needed results,
75
+ and transfer only the requested material. Test the intended bulk path on small
76
+ or synthetic data and observe memory/output before scaling. On resource
77
+ pressure, stop the affected work, preserve its checkpoint and reduce the unit;
78
+ do not continue a remote scan or increase concurrency blindly.
79
+
80
+ `--limit` limits displayed rows, not scan work or a process memory budget.
81
+ Codex small-output `search`/`context` avoid accumulating all dialogue bodies,
82
+ but per-record parsing, fingerprints/index metadata and output still cost
83
+ memory. Full `extract`/phase results and the other platform adapters may retain
84
+ complete dialogue arrays. Do not promise constant memory or infer an earlier
85
+ OOM's cause from these limits alone. Preserve the source logs; raw dialogue,
86
+ credentials and runtime data do not belong in Git. Historical findings still
87
+ require current-source verification and do not authorize automatic write-back.
88
+
66
89
  ## How to call it
67
90
 
68
91
  Full CLI reference is in `references/cli-quick-reference.md`. The 80% case is one of:
@@ -16,7 +16,7 @@ This prints:
16
16
  - **Git status** — quick visual on what's dirty.
17
17
  - **Recent commits** — you'll need their hashes in Step 4 for `--commit`.
18
18
 
19
- If `--mode record` surfaces other completed tasks not tied to the current session, surface them to the user with a one-shot confirmation: "These N tasks look done — archive them too in this round? [y/N]". Default is no; the current active task is always archived in Step 3 regardless.
19
+ If `--mode record` surfaces other completed tasks not tied to the current session, surface them to the user with a one-shot confirmation: "These N tasks look done — archive them too in this round? [y/N]". Default is no; archive the current task only after the acceptance check below.
20
20
 
21
21
  ## Step 2: Sanity check — classify dirty paths
22
22
 
@@ -44,13 +44,28 @@ Then route:
44
44
  > "FYI, dirty files outside this task's scope — leaving them for the other window: `<list>`."
45
45
  - **Genuinely unsure** — ask the user once: "Are `<list>` this task's work I forgot to commit, or another window's? (commit / ignore)" — then route per their answer.
46
46
 
47
+ ### Acceptance check before archive
48
+
49
+ Compare the task's PRD-defined endpoint and required acceptance criteria with
50
+ actual evidence in its records and verification results. Reuse valid results;
51
+ state which checks ran, did not run, were blocked, or had limited coverage.
52
+ Installation, publishing, project updates or live execution require their own
53
+ evidence when they are part of the authorized endpoint; static readiness or
54
+ isolated tests cannot stand in for them. Clean bootstrap/cleanup is conditional
55
+ on the task goal and authorization, not an automatic finishing step.
56
+
57
+ If a required criterion is unmet or lacks sufficient evidence, return to the
58
+ corresponding work and leave the task unarchived. Reporting a limitation does
59
+ not satisfy a required criterion. Keep this conclusion in the existing task
60
+ record; do not add a separate acceptance receipt.
61
+
47
62
  ## Step 3: Archive task(s)
48
63
 
49
64
  ```bash
50
65
  {{PYTHON_CMD}} ./.trellis/scripts/task.py archive <task-name>
51
66
  ```
52
67
 
53
- At minimum: the current active task (if any). Plus any extra tasks the user confirmed in Step 1. Each archive produces a `chore(task): archive ...` commit via the script's auto-commit.
68
+ Archive the current active task and any extra tasks confirmed in Step 1 only when their required acceptance has been verified. Each archive produces a `chore(task): archive ...` commit via the script's auto-commit.
54
69
 
55
70
  If there is no active task and the user did not confirm any cleanup archives, skip this step.
56
71
 
@@ -1,6 +1,6 @@
1
1
  # Code Quality Check
2
2
 
3
- Comprehensive quality verification for recently written code. Combines spec compliance, cross-layer safety, and pre-commit checks.
3
+ Verify the task's affected behavior against the current implementation, applicable specs, and acceptance criteria.
4
4
 
5
5
  ---
6
6
 
@@ -11,6 +11,11 @@ git diff --name-only HEAD
11
11
  git status
12
12
  ```
13
13
 
14
+ Use the diff as the entry point. Follow the affected behavior through existing
15
+ implementation, necessary callers, configuration, tests, documentation and
16
+ generated consumers. Expand when evidence of an existing problem could affect
17
+ the task result; do not default to a whole-module or whole-repository audit.
18
+
14
19
  ## Step 2: Read Task Artifacts and Applicable Specs
15
20
 
16
21
  Read the current task artifacts in order:
@@ -35,6 +40,12 @@ Read the specific guideline files referenced — the index is a pointer, not the
35
40
 
36
41
  Run the project's lint, type-check, and test commands. Fix any failures before proceeding.
37
42
 
43
+ Choose checks by changed behavior and risk. When the task includes installation,
44
+ release or a live workflow, verify its normal entry and required endpoint;
45
+ isolated tests do not prove those endpoints. A clean bootstrap or destructive
46
+ cleanup applies only when required by the task and authorized. Reuse valid
47
+ results and distinguish checks run, not run, blocked, or limited.
48
+
38
49
  ## Step 4: Review Against Checklist
39
50
 
40
51
  ### Code Quality
@@ -47,9 +58,9 @@ Run the project's lint, type-check, and test commands. Fix any failures before p
47
58
 
48
59
  ### Test Coverage
49
60
 
50
- - [ ] New function → unit test added?
51
- - [ ] Bug fix → regression test added?
52
- - [ ] Changed behavior → existing tests updated?
61
+ - [ ] Non-trivial behavior and material risks covered by meaningful checks?
62
+ - [ ] Bug fix has a regression that reaches the failing path?
63
+ - [ ] Existing tests updated when their behavior changed, without duplicating trivial implementation?
53
64
 
54
65
  ### Spec Sync
55
66
 
@@ -62,7 +73,7 @@ Run the project's lint, type-check, and test commands. Fix any failures before p
62
73
  - [ ] Any tidying of code the task did not require?
63
74
  - [ ] Any abstraction, config or extension point added for a case that does not exist yet?
64
75
  - [ ] Any speculative fallback for a state that cannot occur?
65
- - [ ] Any file changed that the acceptance criteria do not mention?
76
+ - [ ] Each changed file serves the task or a necessary consumer, even if the AC do not name it individually?
66
77
  - [ ] Any workaround added at the caller instead of a fix where the behavior actually lives?
67
78
 
68
79
  ## Step 5: Cross-Layer Dimensions (if applicable)
@@ -100,6 +111,12 @@ Skip this step if your change is confined to a single layer.
100
111
 
101
112
  Report every violation you find. Then:
102
113
 
114
+ Verify important findings against current requirements, actual sources, callers
115
+ and relevant counterevidence before prioritizing. Separate observed facts from
116
+ inferences; a rule's presence, a zero call count or an intentional behavior is
117
+ not by itself proof of a defect. Record task-relevant findings and their effect
118
+ on acceptance; new consequential scope choices follow the task's decision gate.
119
+
103
120
  - Mechanical and local (lint nit, missing type, wrong import, dead branch, failing assertion) → fix in place, then re-run project checks.
104
121
  - Design or judgment (naming a shared concept, moving a module boundary, changing a public interface, reassigning where behavior lives) → record the evidence and your recommendation, and stop. Do not rewrite it silently.
105
122
 
@@ -63,7 +63,7 @@ These guides help you **ask the right questions before coding**.
63
63
  2. **Ignoring design comments**: Flagging intentional behavior documented in code comments as bugs
64
64
  3. **Variable misreading**: Not tracing a variable to its actual definition (e.g., Map keyed by path vs name)
65
65
 
66
- **Verification rule**: Every CRITICAL/WARNING finding must be verified against the actual code before prioritizing. Budget ~35% false-positive rate for AI reviews.
66
+ **Verification rule**: Every CRITICAL/WARNING finding must be verified against the actual code before prioritizing.
67
67
 
68
68
  ---
69
69
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pennixrv/trellis",
3
- "version": "0.7.0-beta.43",
3
+ "version": "0.7.0-beta.44",
4
4
  "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "inquirer": "^9.3.7",
35
35
  "undici": "^6.21.0",
36
36
  "zod": "^4.4.2",
37
- "@pennixrv/trellis-core": "0.7.0-beta.43"
37
+ "@pennixrv/trellis-core": "0.7.0-beta.44"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@eslint/js": "^9.18.0",