feature-factory 0.8.3 → 0.8.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.
Files changed (2) hide show
  1. package/WORKFLOW.md +29 -15
  2. package/package.json +1 -1
package/WORKFLOW.md CHANGED
@@ -99,36 +99,50 @@ must APPROVE before you accept that step. Story, research, and design are not au
99
99
 
100
100
  Before any intake action, including ticket, story, or design detection, branch intent, run-id
101
101
  derivation, manifest or state reads, and every `factory` command, process the raw invocation arguments
102
- as follows. The platform skill first performs any host-specific placement admission and supplies this
103
- workflow the unchanged admitted request. Placement is not a run mode.
104
-
105
- Ignore leading whitespace. The **mode prefix** is the maximal consecutive sequence of
106
- whitespace-delimited tokens that are exactly and case-sensitively `--autonomous` or `--headless`.
107
- The first other token ends the prefix.
108
-
109
- 1. If both distinct flags occur in that prefix, in either order, return exactly:
102
+ as follows.
103
+
104
+ **The platform skill owns invocation-option admission, and this workflow never parses the
105
+ invocation.** Each host skill defines the complete leading option prefix its `/feature` invocation
106
+ accepts -- placement, mode, and host options such as `--base` and `--max-retries` -- consumes exactly
107
+ those spans and their separators, and supplies this workflow two things: the **admitted mode tokens**,
108
+ which are the exact case-sensitive `--autonomous` and `--headless` tokens it consumed, and the
109
+ **admitted remainder**, the request bytes beginning at the first token it did not consume, preserved
110
+ unchanged. This workflow never decides where that prefix ends. Placement is not a run mode.
111
+
112
+ Defining a terminator here would contradict the skill that already applied one, and every option later
113
+ added to a host would become request content on this side only. That is not hypothetical. `--base` and
114
+ `--max-retries` were added to the host skills while this section still ended the prefix at the first
115
+ non-mode token, so the two documents disagreed over whether `--max-retries 5 <run-id>` was an option
116
+ pair or part of the run id. Read alone, this section silently derived the run id `max-retries-5-1606`;
117
+ read alongside the skill, a driver correctly refused to run at all. Both documents governing the same
118
+ bytes is the defect, so only one of them does.
119
+
120
+ The rules below are host-independent and are stated over the admitted mode tokens and the admitted
121
+ remainder.
122
+
123
+ 1. If both distinct mode tokens were admitted, in either order, return exactly:
110
124
  `conflicting mode flags: --autonomous and --headless; choose one`. Return immediately, before any
111
125
  intake, run-id derivation, state read, or CLI action. Never fall back to interactive or another
112
126
  mode.
113
- 2. Otherwise remove every token in the recognized prefix and its separating whitespace. Use only the
114
- unchanged remainder for ticket detection, story content, design detection, branch intent, and
115
- run-id derivation.
127
+ 2. Otherwise use only the unchanged admitted remainder for ticket detection, story content, design
128
+ detection, branch intent, and run-id derivation.
116
129
  3. Apply exactly one mapping for a new manifest:
117
130
  - `--autonomous` maps only to `factory init --mode autonomous`.
118
131
  - `--headless` maps only to `factory init --mode headless`.
119
- - With no recognized leading mode token, omit `--mode`; existing `factory init` records
132
+ - With no admitted mode token, omit `--mode`; existing `factory init` records
120
133
  `interactive`.
121
134
 
122
135
  Those three compatibility phrases name init command stems, not runnable invocations. The selected
123
136
  fresh-run invocation is fully qualified in Step 0 and ends with `--repo "$RUN_REPO"`.
124
137
 
125
- Repeated copies of one recognized flag are idempotent: remove them all and select that mode once. An
126
- exact mode token after the first other token is request content and neither selects nor conflicts.
138
+ Repeated copies of one mode token are idempotent: the skill consumes them all and this workflow
139
+ selects that mode once. A mode token the skill did not admit, standing after the first request token,
140
+ is request content and neither selects nor conflicts.
127
141
  Natural-language intent, `--interactive`, capitalization variants, abbreviations, assignment or
128
142
  punctuation forms, quoted lookalikes, and near misses are request content, not selectors. Do not add a
129
143
  generic malformed-option rejection.
130
144
 
131
- After successful nonconflicting admission, reject an empty, whitespace-only, or mode-only remainder
145
+ After successful nonconflicting admission, reject an empty or whitespace-only admitted remainder
132
146
  with exactly `missing /feature request; no run created.` This rejection and a mode conflict precede
133
147
  run-id derivation and every tool, client, state, or CLI action.
134
148
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-factory",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "Durable, observed control plane for /feature runs. Host-agnostic: no opencode dependency.",
5
5
  "type": "module",
6
6
  "license": "MIT",