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