@hraness/message-like-me 0.8.6 → 0.8.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.7 (2026-09-09)
4
+
5
+ - Make the exact public `@hraness/message-like-me@0.8.7` npm package the
6
+ supported default install, with the same reviewed bytes mirrored in the
7
+ immutable GitHub Release.
8
+ - Show how an unsent draft can use evidence about tone, rhythm, and attention
9
+ before introducing import commands. The website examples remain synthetic;
10
+ the site never receives message history or produces drafts.
11
+ - Make supported sources and their limits easier to scan, with import details
12
+ available beside each source. Local-only ingestion and drafts-only behavior
13
+ remain unchanged.
14
+ - Strengthen the development Effect architecture checker. Public protocols,
15
+ the source readers, and command behavior are unchanged.
16
+
3
17
  ## 0.8.6 (2026-09-07)
4
18
 
5
19
  - Make the exact public `@hraness/message-like-me@0.8.6` npm package the
package/README.md CHANGED
@@ -43,7 +43,7 @@ Message Like Me requires Bun 1.3.14 or newer. Install the exact public npm
43
43
  package, then install both bundled Agent Skills:
44
44
 
45
45
  ```sh
46
- bun add --global @hraness/message-like-me@0.8.6
46
+ bun add --global @hraness/message-like-me@0.8.7
47
47
  messagelikeme skill install
48
48
  ```
49
49
 
package/dist/cli.js CHANGED
@@ -24742,7 +24742,7 @@ function rejectUnused(parsed, allowedOptions, allowedFlags) {
24742
24742
  import { isAbsolute as isAbsolute6, resolve as resolve8 } from "path";
24743
24743
 
24744
24744
  // src/version.ts
24745
- var MESSAGE_LIKE_ME_VERSION = "0.8.6";
24745
+ var MESSAGE_LIKE_ME_VERSION = "0.8.7";
24746
24746
 
24747
24747
  // src/command-input.ts
24748
24748
  var HELP = `Message Like Me ${MESSAGE_LIKE_ME_VERSION}
@@ -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.7",
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
  }