@hraness/message-like-me 0.8.6 → 0.8.8

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.
@@ -14,6 +14,12 @@ the leased ref move only while the matching App-sourced success is current.
14
14
  No personal access token, deploy key, Vercel token, or repository-administration
15
15
  permission belongs in either workflow.
16
16
 
17
+ Routine production promotion needs no human confirmation. The current-main
18
+ source, public artifacts, complete workflow history, App authority, writer
19
+ denial, expected-old lease, and provider readback are machine gates. An agent
20
+ may perform the independent review and exact dispatch required for a changed
21
+ workflow-control epoch; that review precedes dispatch.
22
+
17
23
  ## Establish the production controls once
18
24
 
19
25
  Apply these controls in order. Record the exact readbacks in the change review.
@@ -59,9 +65,12 @@ for this rollout and do not create a replacement Sites project.
59
65
  GitHub's authenticated repository API and do not substitute a name at the
60
66
  token-mint boundary.
61
67
  5. Create environment `production-ref-writer-key`. Limit deployment branches
62
- to selected branch `main` only. Require reviewer `@0thernet` and leave
63
- prevent-self-review disabled for this owner-operated release path. Do not add
64
- a custom deployment-protection-rule App. Store the private key only as
68
+ to selected branch `main` only. Configure no required reviewers, no wait
69
+ timer, and no custom deployment-protection-rule App. Keep administrator
70
+ bypass disabled (`can_admins_bypass=false`). The checked workflow admits
71
+ only verified releases and revalidates the complete control range before
72
+ reading the key; environment admission does not wait for a person. Store the
73
+ private key only as
65
74
  environment secret `MLM_RELEASE_APP_PRIVATE_KEY`; store checked variables
66
75
  `MLM_RELEASE_APP_CLIENT_ID`, `MLM_RELEASE_APP_ID`,
67
76
  `MLM_RELEASE_APP_INSTALLATION_ID`, and `MLM_RELEASE_APP_SLUG` in that
@@ -88,9 +97,10 @@ for this rollout and do not create a replacement Sites project.
88
97
  8. Keep active no-bypass ruleset `Immutable version tags` scoped exactly to
89
98
  `refs/tags/v*`, with only update and deletion restrictions. It allows a new
90
99
  stable tag to be created but prevents an existing release tag from moving or
91
- disappearing. Read back `current_user_can_bypass=never` before release.
92
- 9. Enable immutable releases for the repository. Immediately before creating
93
- each version tag, use owner-admin access out of band to require the repository
100
+ disappearing. Read back `current_user_can_bypass=never` during the
101
+ administrative controls census below.
102
+ 9. Enable immutable releases for the repository. During that census, use
103
+ owner-admin access out of band to require the repository
94
104
  immutable-releases endpoint to report `enabled=true`; record whether owner
95
105
  policy also reports `enforced_by_owner`. The Actions token cannot perform
96
106
  this administrative read. The workflow must still prove the resulting
@@ -118,9 +128,14 @@ for this rollout and do not create a replacement Sites project.
118
128
  Never retag or reuse `v0.8.0`. The public repository and package must retain
119
129
  automatic npm provenance for every automated release.
120
130
 
121
- After setup, use owner-admin access out of band to read back the exact Vercel
122
- production branch, environment, variables, secret names, complete App
123
- installation, and all GitHub ref rulesets. Never give that administrative
131
+ After setup, use owner-admin access out of band for a complete administrative
132
+ controls census: read back the exact Vercel production branch, environment,
133
+ variables, secret names, complete App installation, immutable-release setting,
134
+ and all GitHub ref rulesets. Refresh this census when control configuration or
135
+ workflow authority changes, when drift is detected, and during interrupted
136
+ authority recovery. Keep the reviewed evidence with that change or incident;
137
+ do not replay the historical bootstrap mutations to refresh it. Ordinary
138
+ releases do not repeat the complete owner-admin census. Never give that administrative
124
139
  credential or evidence collector to the release workflow. Its narrowed App
125
140
  token proves only its own effective identity, repository, permission, and
126
141
  expiry closure. The Message Like Me post-control record must prove all of these
@@ -142,9 +157,9 @@ assertions together:
142
157
  `workflows` authority, and an exhaustive
143
158
  `/installation/repositories` set of exactly
144
159
  `{hraness/message-like-me}` with repository ID `1342143606`;
145
- - `production-ref-writer-key` admits only `main`, requires the expected
146
- reviewer, exposes only the expected key and checked variables, and has no
147
- custom deployment-protection rules;
160
+ - `production-ref-writer-key` admits only `main`, has no required reviewers,
161
+ wait timer, or custom deployment-protection rules, disables administrator
162
+ bypass, and exposes only the expected key and checked variables;
148
163
  - the Vercel project reads back
149
164
  `link.productionBranch=website-production`, while its project root, build,
150
165
  install, Git, domain, environment, and deployment settings remain identical
@@ -158,11 +173,27 @@ dependency, lockfile, or generated documentation.
158
173
 
159
174
  Treat the production and canary ruleset IDs and their complete live readbacks as
160
175
  an external release gate, not as inputs the promotion workflow may administer.
161
- The workflow must not create, replace, patch, disable, or broaden a ruleset. A
162
- release operator revalidates the existing IDs, targets, lifecycle rules,
163
- App-pinned status context, integration ID, enforcement state, and empty bypass
164
- sets before admitting a release. Any drift blocks promotion until it is reviewed
165
- and repaired out of band.
176
+ The workflow must not create, replace, patch, disable, or broaden a ruleset.
177
+ The administrative census establishes the existing IDs, targets, lifecycle
178
+ rules, App-pinned status context, integration ID, enforcement state, and empty
179
+ bypass sets. Every production attempt still validates the exact current
180
+ source and artifact, helper hashes and control epoch, effective App token
181
+ permissions and repository scope, live rules exposed to its scoped token,
182
+ App-sourced status, writer-denial proof, expected-old lease, and provider
183
+ outcome. These checks do not claim an administrator's complete controls view.
184
+ Observed drift blocks promotion until the controls are reviewed, repaired,
185
+ and admitted through a fresh administrative census.
186
+
187
+ For an existing environment that still requires a person, first merge this
188
+ admission policy after independent review and the required checks. Revalidate
189
+ the current workflow and helper hashes, the successful production and writer
190
+ canary evidence, exact ref rules, App scope, and provider state. Then remove
191
+ only the required-reviewer rule through the environment API, preserving its
192
+ main-only branch policy, disabled administrator bypass, key, and variables.
193
+ Read back the complete environment and the unchanged authority controls.
194
+ Existing machine gates remain required, including control-epoch admission and
195
+ interrupted-authority quarantine. An unrelated release failure is not a reason
196
+ to remove or bypass them.
166
197
 
167
198
  ### Review one workflow-control epoch
168
199
 
@@ -258,17 +289,18 @@ When an established protected ref predates reviewed workflow-control changes:
258
289
  the workflow source for a canary review. Do not fetch an unbounded ref
259
290
  namespace, hand-assemble a digest, use a different checkout, or reorder the
260
291
  inventory.
261
- 3. Dispatch one fresh manual attempt 1 from exact current `main` with that exact
292
+ 3. Before dispatching the reviewed control-epoch transition, compare the tag,
293
+ v2 domain, protected ref, old SHA, target SHA, workflow-source SHA, ordered
294
+ inventory, change list, and digest with both the independently reviewed
295
+ failed-run summary and the locally reconstructed receipt. Reject the
296
+ dispatch if any field or ordered inventory row differs. Dispatch one fresh
297
+ manual attempt 1 from exact current `main` with that exact
262
298
  digest. Automatic `workflow_run` events, rerun attempts, already-exact refs,
263
299
  and unchanged-workflow ranges must reject any digest. The gate recomputes the
264
300
  complete inventory and digest before environment admission; any source, tag,
265
301
  ref, target, ancestry, inventory, or digest drift fails closed.
266
- 4. Before approving `production-ref-writer-key`, compare the fresh run title,
267
- tag, v2 domain, protected ref, old SHA, target SHA, workflow-source SHA,
268
- ordered inventory, change list, and digest with both the independently
269
- reviewed failed-run summary and the locally reconstructed receipt. Reject the
270
- environment admission if any field or ordered
271
- inventory row differs. After approval, the hash-pinned helper
302
+ 4. The workflow enters `production-ref-writer-key` after its read-only
303
+ admission jobs succeed, without a human approval. The hash-pinned helper
272
304
  recomputes and revalidates the same transition before reading the key. The
273
305
  normal split-authority sequence then applies unchanged: terminalize the status
274
306
  to the exact App-authored `error`, then prove the writer is denied with one exact
@@ -674,7 +706,7 @@ or decreasing inventory digest fails closed. Because an administrator could
674
706
  delete and recreate evidence between API reads, the owner freeze and
675
707
  before/after admin readbacks remain part of admission.
676
708
 
677
- After the main-only environment approval, the helper repeats the complete
709
+ After the main-only environment admission, the helper repeats the complete
678
710
  snapshot before it may read the private key. The status-only App may then POST
679
711
  only one distinct `error` for the exact failed target, prove that exact status
680
712
  through the combined-status endpoint, and revoke the token through the same
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hraness/message-like-me",
3
- "version": "0.8.6",
3
+ "version": "0.8.8",
4
4
  "description": "A local-first CLI and Agent Skill for studying private messaging history and drafting messages that sound like you.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -85,6 +85,7 @@
85
85
  "devDependencies": {
86
86
  "@types/bun": "1.3.14",
87
87
  "effect": "3.22.1",
88
+ "fast-check": "4.9.0",
88
89
  "sigstore": "4.1.1",
89
90
  "typescript": "6.0.3"
90
91
  }
@@ -91,7 +91,7 @@ and message overlap or fail closed. Group DMs remain separate. Keep both
91
91
  provenances and treat the resulting exact-message dedupe as a source fact, not
92
92
  an identity inference.
93
93
 
94
- When the user supplies a finished Wrench/Beeper Message Like Me bundle, ingest
94
+ When the user supplies a finished Ghostget/Beeper Message Like Me bundle, ingest
95
95
  only its normalized absolute directory path:
96
96
 
97
97
  ```sh
@@ -100,13 +100,13 @@ messagelikeme sources list --json
100
100
  ```
101
101
 
102
102
  Do not request or handle the Beeper credential, call Beeper directly, improvise
103
- a provider parser, or open the bundle's NDJSON files. Wrench owns provider
103
+ a provider parser, or open the bundle's NDJSON files. Ghostget owns provider
104
104
  capture; Message Like Me owns strict verification, normalization, and local
105
105
  analysis. Use `sources show <source-id> --json` for redacted completeness and
106
106
  health. Add `--private` only when the user's task requires provider account
107
107
  metadata.
108
108
 
109
- When the user supplies a finished Wrench/Wacli native WhatsApp v2 bundle, use
109
+ When the user supplies a finished Ghostget/Wacli native WhatsApp v2 bundle, use
110
110
  the same strict importer:
111
111
 
112
112
  ```sh
@@ -115,8 +115,8 @@ messagelikeme ingest bundle --input <absolute-private-whatsapp-bundle> --json
115
115
 
116
116
  Do not request or handle Wacli session state or WhatsApp linked-device
117
117
  authentication, call Wacli, inspect its database, synchronize the account, or
118
- open bundle records in agent context. Wrench owns those provider operations.
119
- The Wrench v0.16.7/Wacli v0.15.0 producer omits every reaction-shaped row and
118
+ open bundle records in agent context. Ghostget owns those provider operations.
119
+ The Ghostget v0.17.1/Wacli v0.15.0 producer omits every reaction-shaped row and
120
120
  reports `reaction-state-unproven` when it encounters one because current active
121
121
  or removed state is not durable. Treat that warning, and an empty reaction
122
122
  artifact from this producer, as unobservable reaction behavior. Do not infer
@@ -185,7 +185,7 @@ parameters changes the operational meaning of turns, sessions, and latency.
185
185
 
186
186
  Study packets, Ensoul source packets, evaluation packets, and explicit private
187
187
  handoffs are the only CLI exports that contain message bodies. A handoff is for
188
- bounded coordination with Wrench and is not evidence that anything was sent.
188
+ bounded coordination with Ghostget and is not evidence that anything was sent.
189
189
  Retain the study
190
190
  command's JSON receipt and copy its `packetSha256`
191
191
  into the finished profile; the packet does not contain its own digest. Analyze
@@ -19,9 +19,9 @@ sensitive local data.
19
19
  - A native WhatsApp bundle is still only a finished offline input. Do not
20
20
  request Wacli session files or WhatsApp authentication, invoke Wacli,
21
21
  synchronize a linked device, inspect its database, or expose exact JIDs.
22
- Wrench owns that provider boundary. `--overlap-source` requires explicit
22
+ Ghostget owns that provider boundary. `--overlap-source` requires explicit
23
23
  intent and exact CLI proof; it never authorizes fuzzy account or contact
24
- matching. The Wrench v0.16.7 producer omits reaction-shaped Wacli rows with
24
+ matching. The Ghostget v0.17.1 producer omits reaction-shaped Wacli rows with
25
25
  `reaction-state-unproven`; never turn that missing evidence into a claim that
26
26
  no reactions occurred.
27
27
  - Treat a caller-owned X data archive ZIP as private source evidence. Pass only