houseaccount 0.8.0 → 0.9.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25c029d0c9b4a7be0acc92597d51ab5ff79de388f92446ad603a5d64ceeaab3a
4
- data.tar.gz: 85a331299adfb3bc24800738dee1d094a185037a17bf169747912ea96f29f3f8
3
+ metadata.gz: eda698b249d0a859fdd7e065f4eb5e03b80aac58f18427980f71fc4afa64544d
4
+ data.tar.gz: 5235bd2a69be8fccb8c1e0d0eb084211a8ac5300ffc38d4a9f5b1c7d74f48313
5
5
  SHA512:
6
- metadata.gz: 5639f3869ea8eaf95321546515d0aeaad2263042e8de41a77ff7c74a212638be06f73e842ef7e35c118e2009e3886be0e06c67de025cb0f77b6fb09b7ff2ec9a
7
- data.tar.gz: 32dc62a114967214bf1f2ee7880223e599f306f0d74cc75e0a4d98eb33d6da61c7f66e73a23ca1fef22e8d2702c1f03f41c75abe3df88cdd2c21a969de8ac002
6
+ metadata.gz: 5098a845c0501400495e7cd5452ba5d6ed070d7bffd0f511ea424e525df08ed34782e5cc70a7a4462d4962eb14fc357c5f1df013116720e3a784242ee19ecf6b
7
+ data.tar.gz: 6923638ae33a328473bb3e343d9296fbf3b332c2f722c6bc9c7a77cb35c258a8fe1943f00204166d1a0458a34b4de48c426360f8e4ab9bf706d6fdc567881e9c
data/CHANGELOG.md CHANGED
@@ -7,6 +7,33 @@ For more information about changelogs, check [Keep a Changelog](http://keepachan
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## 0.9.0 - 2026-09-14
11
+
12
+ * [Breaking change] A one-time code carries the line for the phone again
13
+
14
+ 0.8.0 took `@host #code` out because it is plainly visible in the message that arrives.
15
+ Visible is what it is for: it is Apple's own format, it tells a reader which site the code
16
+ belongs to, and it binds the code to that domain so no other site can ask for it. Without
17
+ it iOS falls back to guessing at the text, which it does not do reliably — the suggestion
18
+ above the keyboard stopped appearing. `HouseAccount.one_time_code` takes `host:` again,
19
+ defaulting to the application's own.
20
+
21
+ * [Fix] A seventh digit leaves no bar behind in the first slot
22
+
23
+ The real field lies transparently across all six slots, and its hidden text sits crammed
24
+ against the left edge rather than under them. A keystroke iOS cannot place answers by
25
+ selecting inside that field, and the grab handles it draws for a selection are its own to
26
+ paint — so one surfaced over the first slot. The selection is collapsed back to the end
27
+ once the code is whole.
28
+
29
+ ## 0.8.1 - 2026-09-14
30
+
31
+ * [Fix] The wall is drawn again after a page Turbo morphs
32
+
33
+ A refresh in place is told what the server sent, and the server sends no wall, so the
34
+ cyanotype came down on any page that redirected to itself — a form refused, say — and the
35
+ controller, still connected, never heard of it.
36
+
10
37
  ## 0.8.0 - 2026-09-14
11
38
 
12
39
  * [Breaking change] A one-time code is the sentence alone, without the line for the phone
data/README.md CHANGED
@@ -20,10 +20,10 @@ gem install houseaccount
20
20
 
21
21
  ```ruby
22
22
  # Gemfile
23
- gem 'houseaccount', '~> 0.8.0'
23
+ gem 'houseaccount', '~> 0.9.0'
24
24
  ```
25
25
 
26
- `~> 0.8.0` stops short of `0.9`, since below 1.0 a minor release may break whatever it likes.
26
+ `~> 0.9.0` stops short of `0.10`, since below 1.0 a minor release may break whatever it likes.
27
27
  Rails 8.1 and Ruby 3.2 are the minimum.
28
28
 
29
29
  A page takes the gem's layout, and wears the same head:
@@ -60,7 +60,7 @@ which Pages redirects away from.
60
60
 
61
61
  With the gem in the bundle an app serves `/css/houseaccount.css`, `/js/houseaccount.js`,
62
62
  `/theme/*`, `/font/*`, `/logo/*` and `/favicon/*` itself — and its own version's copy under
63
- `/v0.8.0/`, which is what the head helper links, cached for a year — answers a 400, 404, 406, 422 or 500
63
+ `/v0.9.0/`, which is what the head helper links, cached for a year — answers a 400, 404, 406, 422 or 500
64
64
  with the house's own page, and has these helpers in every view:
65
65
 
66
66
  ```erb
@@ -181,13 +181,15 @@ HouseAccount::Message.new side: :left, text: answer.note, sender: 'Claude', at:
181
181
  ```
182
182
 
183
183
  A code sent to a phone is the same words from every app, `HouseAccount.one_time_code`, in
184
- each voice they are said in. `written` is the one sentence a person reads; `spoken` is that
185
- same sentence with its digits one at a time, so a listener can write them down. The words are
184
+ each voice they are said in. `written` is the sentence a person reads and, under it, the
185
+ `@host #code` line that offers the code above the keyboard on the phone it arrived on;
186
+ `spoken` is the sentence alone, its digits one at a time so a listener can write them down.
187
+ The host is the application's default one unless `host:` says otherwise, and the words are
186
188
  the gem's `config/locales` entry.
187
189
 
188
190
  ```ruby
189
191
  HouseAccount.one_time_code(contact.pin).written
190
- # => "Enter this 6-digit code to proceed: 482913"
192
+ # => "Enter this 6-digit code to proceed: 482913\n\n@houseaccount.com #482913"
191
193
  HouseAccount.one_time_code(contact.pin).spoken
192
194
  # => "Enter this 6-digit code to proceed: 4, 8, 2, 9, 1, 3"
193
195
  ```
@@ -203,8 +205,8 @@ Those follow the latest release. Every release is also kept whole under its own
203
205
  forever and cached for a year, for a page that would rather move on its own terms:
204
206
 
205
207
  ```html
206
- <link rel='stylesheet' href='https://design.houseaccount.com/v0.8.0/css/houseaccount.css'>
207
- <script type='module' src='https://design.houseaccount.com/v0.8.0/js/houseaccount.js'></script>
208
+ <link rel='stylesheet' href='https://design.houseaccount.com/v0.9.0/css/houseaccount.css'>
209
+ <script type='module' src='https://design.houseaccount.com/v0.9.0/js/houseaccount.js'></script>
208
210
  ```
209
211
 
210
212
  A host with a Content Security Policy allows that origin for `style-src`, `script-src` and
@@ -4,7 +4,10 @@ en:
4
4
  ask: Ask a question
5
5
  close: Close
6
6
  okay: Okay
7
- one_time_code: 'Enter this 6-digit code to proceed: %{pin}'
7
+ one_time_code: |-
8
+ Enter this 6-digit code to proceed: %{pin}
9
+
10
+ @%{host} #%{pin}
8
11
  send: Send
9
12
  spoken_one_time_code: 'Enter this 6-digit code to proceed: %{pin}'
10
13
  typing: Typing
@@ -1,4 +1,4 @@
1
1
  module HouseAccount
2
2
  # Version of the gem, read by the gemspec and by hosts checking compatibility.
3
- VERSION = '0.8.0'
3
+ VERSION = '0.9.0'
4
4
  end
data/lib/houseaccount.rb CHANGED
@@ -29,10 +29,14 @@ module HouseAccount
29
29
  MARKS.key?(name) ? name : :houseaccount
30
30
  end
31
31
 
32
- # The one sentence that carries a 6-digit code to a phone, written as a person reads it and
33
- # spoken a digit at a time so a listener can write it down.
34
- def self.one_time_code(pin)
35
- Copy.new written: I18n.t('houseaccount.one_time_code', pin:),
32
+ # The words that carry a 6-digit code to a phone, in both voices. `written` is the sentence
33
+ # a person reads and, under it, the line Safari matches against the page about to be filled,
34
+ # `@host #code`, which offers the code above the keyboard so nobody leaves for Messages to
35
+ # copy it. `spoken` is the sentence alone, its digits one at a time so a listener can write
36
+ # them down, and without a line meant for a phone rather than a person. Every app of the
37
+ # house that sends a code sends these, from `config/locales`.
38
+ def self.one_time_code(pin, host: Rails.application.default_url_options[:host])
39
+ Copy.new written: I18n.t('houseaccount.one_time_code', pin:, host:),
36
40
  spoken: I18n.t('houseaccount.spoken_one_time_code', pin: pin.chars.join(', '))
37
41
  end
38
42
  end
data/public/index.html CHANGED
@@ -66,8 +66,8 @@
66
66
  </div>
67
67
  <div class='col-12'>
68
68
  <div class='card p-3'>
69
- <strong>Pinned to a version — the latest is 0.8.0</strong>
70
- <span class='design-url'>https://design.houseaccount.com/v0.8.0/css/houseaccount.css · /v0.8.0/js/houseaccount.js · /v0.8.0/theme/nord.css</span>
69
+ <strong>Pinned to a version — the latest is 0.9.0</strong>
70
+ <span class='design-url'>https://design.houseaccount.com/v0.9.0/css/houseaccount.css · /v0.9.0/js/houseaccount.js · /v0.9.0/theme/nord.css</span>
71
71
  <span class='small fg-2 mt-1'>Every release stays at its own prefix forever, whole and cached for a year, for a page that moves on its own terms. The unversioned paths follow the latest.</span>
72
72
  </div>
73
73
  </div>