@jentrix/plugin-claude 0.6.3 → 0.6.4

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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "jentrix",
3
3
  "description": "Connect this Claude Code session to a Jentrix project: /jentrix-connect binds the current session (trusted lifecycle hooks supply the session id), /jentrix-align anchors it to a task with an accountable owner, /jentrix-plan, /jentrix-checkpoint, /jentrix-review, /jentrix-status and /jentrix-end wrap the same session operations. Business logic lives in the Jentrix CLI — removing this plugin leaves `jentrix session connect` as the universal fallback.",
4
- "version": "0.6.3"
4
+ "version": "0.6.4"
5
5
  }
@@ -112,3 +112,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
112
112
  working column; completed work goes to In review. Accept/Return and terminal
113
113
  completion belong to the operator. Typed artifacts and completed verification
114
114
  commands provide evidence; a report alone does not prove work is finished.
115
+
116
+ Records carry their meaning in a header, not a title. `jentrix push report
117
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
118
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
119
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
120
+ is a verification receipt that counts only for a gate bound to a package
121
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
122
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
123
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
124
+ after a `#` comment), at exit 0, on the revision and working tree the session
125
+ closes on.
126
+ What the host records on its own is provisional and says so.
@@ -74,14 +74,24 @@ the plan, when a long investigation resolves, or before handing the work over.
74
74
  answer says no local activity skeleton exists, say THAT — "never opened" by
75
75
  absence is not the same claim as "never opened" by evidence.
76
76
 
77
- 5. Push it — as an ARTIFACT, never as a comment. A "Checkpoint" posted as a
78
- comment is not a checkpoint: the summary counts REPORTs titled
79
- `Checkpoint …` and prints `checkpoints: N`, and a comment counts zero.
80
- - `jentrix push learning --title "Checkpoint <topic>"` when it is durable
81
- knowledge worth carrying past this work;
82
- - `jentrix push report --title "Checkpoint <topic>"` when it is the
77
+ 5. Push it — as an ARTIFACT, never as a comment, and **with the boundary
78
+ named**. A "Checkpoint" posted as a comment is not a checkpoint, and a
79
+ report merely TITLED "Checkpoint" is indexed by its title, which is a
80
+ guess; `--checkpoint <boundary>` writes the semantic header the summary
81
+ indexes (`checkpoints: N`) and answers the request the `PreCompact` hook
82
+ left in the spool. Boundaries: `compaction` · `handoff` · `intent-change`
83
+ · `task-switch` · `investigation-resolved` · `manual`.
84
+ - `jentrix push learning --checkpoint <boundary> --title "Checkpoint — <topic>"`
85
+ when it is durable knowledge worth carrying past this work;
86
+ - `jentrix push report --checkpoint <boundary> --intent "<current intent>"
87
+ --next "<next action>" --title "Checkpoint — <topic>"` when it is the
83
88
  state of THIS work.
84
- Content goes on stdin.
89
+ Content goes on stdin. When `jentrix session status` says
90
+ `Checkpoint requested: compaction …` and the compaction changed nothing
91
+ worth writing, say so instead of writing filler:
92
+ `jentrix push report --checkpoint none-occurred --title "Checkpoint — nothing changed"`
93
+ with a one-line body. A hook cannot distil (no model turn); leaving the
94
+ request unanswered is what makes `session end` print it at the close.
85
95
  6. Relay the returned `artifactId` to the operator, and say which kind you
86
96
  chose and why.
87
97
  7. If the session's task status no longer matches reality, fix it now:
@@ -136,3 +146,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
136
146
  working column; completed work goes to In review. Accept/Return and terminal
137
147
  completion belong to the operator. Typed artifacts and completed verification
138
148
  commands provide evidence; a report alone does not prove work is finished.
149
+
150
+ Records carry their meaning in a header, not a title. `jentrix push report
151
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
152
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
153
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
154
+ is a verification receipt that counts only for a gate bound to a package
155
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
156
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
157
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
158
+ after a `#` comment), at exit 0, on the revision and working tree the session
159
+ closes on.
160
+ What the host records on its own is provisional and says so.
@@ -62,3 +62,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
62
62
  working column; completed work goes to In review. Accept/Return and terminal
63
63
  completion belong to the operator. Typed artifacts and completed verification
64
64
  commands provide evidence; a report alone does not prove work is finished.
65
+
66
+ Records carry their meaning in a header, not a title. `jentrix push report
67
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
68
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
69
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
70
+ is a verification receipt that counts only for a gate bound to a package
71
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
72
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
73
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
74
+ after a `#` comment), at exit 0, on the revision and working tree the session
75
+ closes on.
76
+ What the host records on its own is provisional and says so.
@@ -19,7 +19,20 @@ pipeline), the typed artifacts ARE the record — push them before closing:
19
19
  1. If this session is aligned (`jentrix session status` shows the alignment):
20
20
  - Push the final report: write a concise session report (what was done,
21
21
  what changed, what's next) and run
22
- `jentrix push report --title "<short title>"` with the content on stdin.
22
+ `jentrix push report --final --title "<short title>"` with the content on
23
+ stdin. `--final` marks it the EXPLICIT final deliverable: the session
24
+ host also records your last response as a PROVISIONAL final output (its
25
+ title says so), and the server keeps at most one current closing output —
26
+ the explicit one supersedes the host's copy, and a later `--final` push
27
+ supersedes the earlier. Without `--final`, the record's final output is
28
+ whatever the host last observed, which may be a mid-turn progress note.
29
+ - **Answer a pending checkpoint request.** If `jentrix session status`
30
+ prints `Checkpoint requested: …`, write it now
31
+ (`jentrix push report --checkpoint <boundary> …`, or
32
+ `--checkpoint none-occurred` when nothing changed). `session end` does
33
+ not refuse over it — it prints the unanswered request at the close, and
34
+ a fresh agent reading the record will see that the boundary went
35
+ undistilled.
23
36
  - Push any decisions made this session that were not already pushed. **Ask
24
37
  what the decision rested on BEFORE you write the memo** — the basis is
25
38
  not a field to fill in afterwards, it is the thing that makes the memo a
@@ -45,18 +58,31 @@ pipeline), the typed artifacts ARE the record — push them before closing:
45
58
  generates the real `git log --patch` for the session's range itself and
46
59
  pushes it as the attested DIFF (evidence check E1) — a model-authored
47
60
  diff would be a second, unattested copy.
61
+ - **Ending dirty by design?** When the authorization was "no commits" (or
62
+ the work stays uncommitted for review), the working tree IS the output.
63
+ `jentrix session end --preserve-uncommitted` pushes the uncommitted
64
+ delta — tracked changes and untracked files, bounded at 256 KB stat-first
65
+ — as an attested patch bound to the close's tree digest. Without the
66
+ flag, `session end` says the tree is dirty and NOT preserved; relay that
67
+ line rather than describing the changes from memory.
48
68
  Ask the operator (native choice UI) before pushing anything they might
49
69
  not want recorded; never invent content — summarize what actually
50
70
  happened.
51
- 2. **Batched mint confirmations.** Collect this session's gap/issue/findings
52
- artifacts that are not yet cards (each push printed its offer) and ask the
53
- operator ONCE, as a single native choice list: which should become cards?
54
- For each accepted one run
71
+ 2. **Batched mint confirmations — optional, never blocking.** Collect this
72
+ session's gap/issue/findings artifacts that are not yet cards (each push
73
+ printed its offer) and ask the operator ONCE, as a single native choice
74
+ list: which should become cards? For each accepted one run
55
75
  `jentrix artifact mint-issue --artifact <id> --from-task <taskId>`
56
76
  (add `--blocks` when it blocks acceptance of the aligned task). Mints are
57
77
  idempotent per artifact (`mint-<artifactId>`), so a retry converges on the
58
78
  same card. A declined mint leaves the artifact exactly as pushed — never
59
- nag again, never mint unasked.
79
+ nag again, never mint unasked. **If no answer can arrive** — a
80
+ non-interactive run, or the operator does not reply — mint nothing, list
81
+ the artifact ids whose mint is still pending in the report you pushed in
82
+ step 1 (or in your closing reply), and go on to steps 3 and 4: the
83
+ artifacts are already preserved, and closing the session is what
84
+ preserves the rest. Never pick an answer for the operator, and never let
85
+ an optional mint stand between the session and its close.
60
86
  3. Move the aligned task to the board's **"In review"** column when the work
61
87
  is finished — not to a terminal one. Acceptance is a human's to record
62
88
  (Accept / Return on the task panel writes who decided, when, and on which
@@ -75,7 +101,9 @@ pipeline), the typed artifacts ARE the record — push them before closing:
75
101
  session status` shows); pass an id only when the operator names a different
76
102
  session. If the CLI reports ambiguous sessions, ask the operator which one;
77
103
  never choose a sibling. Telemetry is recorded by the session host's attested path — never
78
- report token numbers yourself.
104
+ report token numbers yourself. The RUN_SUMMARY does not exist before this
105
+ step — `session end` is what writes it — so its absence in `session
106
+ status` is expected and is never a reason to hold off the close.
79
107
  5. **Relay the closing telemetry line verbatim.** `session end` prints a
80
108
  `Telemetry:` line, and on stderr it may print `NO TOKEN TELEMETRY: …`.
81
109
  Exit 0 does NOT mean telemetry was recorded — on 2026-08-11 a real session
@@ -108,7 +136,27 @@ REFUSE to close when they are unmet:
108
136
  **same gate family**: `typecheck` · `lint` · `test` · `e2e`. Family, not
109
137
  exact command — "tests green" is covered by `pnpm test:mvp` and is NOT
110
138
  covered by `pnpm lint`. A pasted LOG covers nothing; the CLI warns
111
- `UNATTESTED LOG` when you push one, and the summary marks it.
139
+ `UNATTESTED LOG` when you push one, and the summary marks it. The LOG is a
140
+ structured receipt: it counts only when the command **binds to a gate
141
+ definition** — a package script (`pnpm test:mvp`, `npm run typecheck`: the
142
+ family comes from the script's NAME and the receipt records the script's
143
+ body and digest), a known runner (`vitest`, `jest`, `tsc`, `eslint`,
144
+ `playwright test`, `node --test`, `pytest`, `cargo test`, …), or a wrapper
145
+ listed in the checkout's reviewed `.jentrix/gates.json` — it exited 0, and
146
+ it ran at the revision AND on the working tree the session closes on
147
+ (`session end` measures both; a receipt from before your last edit does
148
+ not cover it). `--from-cmd "echo tests green"`, an inline `node -e "…"`,
149
+ or a line composed with `||`, `;`, `|` or `&` — glued or spaced — records a
150
+ LOG and proves nothing, and so do `--help`/`--version`/`--listTests`-style
151
+ runs, subshells, `$(…)` substitution, any `$VAR`/`${VAR}` expansion outside
152
+ single quotes (the receipt cannot see what the shell substituted — `"$FLAG"`
153
+ may be `--help`, `"$FILE"` a path in another checkout), a second line after
154
+ a `#` comment, a `cd`/`pushd` or `--prefix`/`-C`/`--filter` that moves
155
+ execution, and any argument that reaches outside the checkout (an absolute
156
+ or `../` path). The CLI says why when you push one. Run the gate from the
157
+ checkout root as one line of literal arguments, chain gates only with
158
+ `&&`, never pipe the gate (`| tail`): the exit code recorded would be the
159
+ pipe's. A red gate you are recording on purpose takes `--expected-failure`.
112
160
 
113
161
  Comply by pushing the named evidence and retrying, or deviate honestly with a
114
162
  `gap`. `--acknowledge-evidence-gaps` closes anyway and stamps each unmet check
@@ -142,3 +190,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
142
190
  working column; completed work goes to In review. Accept/Return and terminal
143
191
  completion belong to the operator. Typed artifacts and completed verification
144
192
  commands provide evidence; a report alone does not prove work is finished.
193
+
194
+ Records carry their meaning in a header, not a title. `jentrix push report
195
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
196
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
197
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
198
+ is a verification receipt that counts only for a gate bound to a package
199
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
200
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
201
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
202
+ after a `#` comment), at exit 0, on the revision and working tree the session
203
+ closes on.
204
+ What the host records on its own is provisional and says so.
@@ -29,10 +29,21 @@ task deep. This command extends the same rule to the rest.
29
29
  - **Propose few tasks.** A task is a commitment, not a restatement of the
30
30
  prompt. Two or three real units of work beat six that mirror your plan's
31
31
  headings. If the prompt is one unit of work, say so and create nothing.
32
- - **The prompt is provenance, the tasks are commitments.** Save the prompt
33
- once, verbatim, as a `prompt` artifact; do not transcribe it into task
34
- titles. The approved goal is its own `goal` artifact the inputs are typed
35
- records the RUN_SUMMARY's Intent cites, not prose folded into a plan.
32
+ - **The prompt is provenance, the tasks are commitments, the plan is the
33
+ record of the decomposition.** Save the prompt once, verbatim, as a
34
+ `prompt` artifact; do not transcribe it into task titles. The approved goal
35
+ is its own `goal` artifact, and the decomposition itself goal, task
36
+ titles, what was approved and what is still pending — is a `plan` artifact.
37
+ The inputs are typed records the RUN_SUMMARY's Intent and Plan history
38
+ cite, not prose folded into chat. The PLAN exists whether or not any card
39
+ gets created: it records what was proposed and decided.
40
+ - **Never fabricate approval.** When the native choice UI cannot answer
41
+ (a non-interactive run, an operator who has not replied), the approvals
42
+ already in hand still stand — the aligned task's title is the operator's
43
+ words, and a goal the opening prompt states in its own terms is the
44
+ operator's goal — but a title they have not seen is only a proposal.
45
+ Preserve the proposals as the PLAN, create no cards for them, and say in
46
+ your reply which decisions are pending. Silence is not a yes.
36
47
  - Read the board's real columns before placing anything. Never invent a
37
48
  column or a status.
38
49
 
@@ -64,10 +75,19 @@ task deep. This command extends the same rule to the rest.
64
75
  `jentrix push goal --title "Goal"` with the approved goal sentence on
65
76
  stdin;
66
77
  - when a PRD exists for this work, push it too:
67
- `jentrix push prd --title "<PRD title>"` with the PRD body on stdin.
78
+ `jentrix push prd --title "<PRD title>"` with the PRD body on stdin;
79
+ - push the plan — ALWAYS, even when the operator approved nothing yet or
80
+ declined every card: `jentrix push plan --title "Plan"` with, on stdin,
81
+ the goal sentence, each proposed task title marked `approved` /
82
+ `pending` / `declined`, the ids and keys of the cards that were
83
+ created, and the column they landed in. A plan with every title
84
+ `pending` is a true record of a headless run; a session with no PLAN
85
+ artifact has no record that a decomposition happened at all.
68
86
  6. Report the created ids and keys back to the operator, and say which task
69
87
  you are starting on. Move that one into the working column
70
- (`jentrix task move --task <id> --to-column-id <id>`).
88
+ (`jentrix task move --task <id> --to-column-id <id>`). When confirmation
89
+ is still pending, say so and continue with the aligned task — do not wait
90
+ on an answer that cannot arrive.
71
91
 
72
92
  If the operator declines the plan, create nothing and say so plainly. An
73
93
  un-decomposed prompt is a normal outcome; a board full of speculative tasks is
@@ -99,3 +119,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
99
119
  working column; completed work goes to In review. Accept/Return and terminal
100
120
  completion belong to the operator. Typed artifacts and completed verification
101
121
  commands provide evidence; a report alone does not prove work is finished.
122
+
123
+ Records carry their meaning in a header, not a title. `jentrix push report
124
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
125
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
126
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
127
+ is a verification receipt that counts only for a gate bound to a package
128
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
129
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
130
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
131
+ after a `#` comment), at exit 0, on the revision and working tree the session
132
+ closes on.
133
+ What the host records on its own is provisional and says so.
@@ -77,3 +77,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
77
77
  working column; completed work goes to In review. Accept/Return and terminal
78
78
  completion belong to the operator. Typed artifacts and completed verification
79
79
  commands provide evidence; a report alone does not prove work is finished.
80
+
81
+ Records carry their meaning in a header, not a title. `jentrix push report
82
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
83
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
84
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
85
+ is a verification receipt that counts only for a gate bound to a package
86
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
87
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
88
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
89
+ after a `#` comment), at exit 0, on the revision and working tree the session
90
+ closes on.
91
+ What the host records on its own is provisional and says so.
@@ -46,3 +46,15 @@ labels. Read actual board columns before moving tasks. Work goes into its
46
46
  working column; completed work goes to In review. Accept/Return and terminal
47
47
  completion belong to the operator. Typed artifacts and completed verification
48
48
  commands provide evidence; a report alone does not prove work is finished.
49
+
50
+ Records carry their meaning in a header, not a title. `jentrix push report
51
+ --final` is the explicit final deliverable; `--checkpoint <boundary>` is a
52
+ semantic checkpoint (answer a `Checkpoint requested:` line from `session
53
+ status` — a hook cannot distil, only a model turn can); `push log --from-cmd`
54
+ is a verification receipt that counts only for a gate bound to a package
55
+ script, a known runner or a reviewed wrapper, run from the checkout root as one
56
+ plain `&&`-chained line of literal arguments (no `||`/`|`/`;`, no `cd`, no
57
+ help/version flags, no `$VAR` expansion outside single quotes, no second line
58
+ after a `#` comment), at exit 0, on the revision and working tree the session
59
+ closes on.
60
+ What the host records on its own is provisional and says so.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jentrix/plugin-claude",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "The official Jentrix plugin for Claude Code: connected-session commands and trusted lifecycle hooks, materialized by the Jentrix CLI (jentrix plugin install claude).",
5
5
  "keywords": [
6
6
  "jentrix",
@@ -29,5 +29,12 @@
29
29
  "publishConfig": {
30
30
  "access": "public"
31
31
  },
32
+ "jentrix": {
33
+ "host": "claude",
34
+ "behaviorRevision": "2026.09.13-3",
35
+ "semanticSchemaRevision": 1,
36
+ "resourceDigest": "20c6a5e7879d76f1ab52622dd2aa8c05e0d22809db29f05964b3474d40bb6a1f",
37
+ "cliRange": ">=0.11.0 <1.0.0"
38
+ },
32
39
  "scripts": {}
33
40
  }