Logan Allen
8b03fd90c6
Share sheet renders properly in group
2020-01-23 13:14:44 -08:00
Logan Allen
78b829186d
display entities in groups even when they haven't shared contact yet
2020-01-23 13:14:44 -08:00
Logan Allen
de7cd1389d
style fixes, relative to absolute paths, renames, additional contact view features
2020-01-23 13:14:44 -08:00
Logan Allen
41c05dac6e
contact-js: code styling and defensiveness
2020-01-23 13:13:53 -08:00
Logan Allen
ed0ddfb97e
contact card: code style
2020-01-23 13:13:52 -08:00
Matilde Park
9ea67c20c9
card display, edit (all fields)
2020-01-23 13:13:52 -08:00
Matilde Park
a10ac18e67
clean up some leftover TODO comments
2020-01-23 13:13:52 -08:00
Matilde Park
b57fdccd23
add nickname editing, display, remove contact ...
2020-01-23 13:13:52 -08:00
Matilde Park
ec33a4a4f8
edit your sigil color now functional
2020-01-23 13:13:52 -08:00
Matilde Park
b5e9162657
add TODO markers for next-up features
2020-01-23 13:13:52 -08:00
Matilde Park
8ec9031be3
add / edit card.js toggle
2020-01-23 13:13:52 -08:00
Matilde Park
9e4a192fa5
responsive additions
2020-01-23 13:13:52 -08:00
Matilde Park
ce62533a11
add contact to group functionality
2020-01-23 13:13:52 -08:00
Matilde Park
761ea7cc9c
create group functionality
2020-01-23 13:13:52 -08:00
Logan Allen
56a1c3400a
contact-hook: added first complete and compiling version
2020-01-23 13:13:52 -08:00
Logan Allen
ad64763a8c
contacts: ported to static gall
2020-01-23 13:13:52 -08:00
Matilde Park
c8020691f8
beginning of contact card
2020-01-23 13:13:51 -08:00
Matilde Park
1faf3828e3
high contrast, don't return null as class
2020-01-23 13:13:51 -08:00
Matilde Park
aadeab65b4
responsive contacts drawer
2020-01-23 13:13:51 -08:00
Matilde Park
27201cc2f4
add contact list for group, member count
2020-01-23 13:13:51 -08:00
Matilde Park
c59f222443
basic responsive drawer stuff
2020-01-23 13:13:51 -08:00
Matilde Park
92e1970651
/me, /group views, render sigil, render root ident
2020-01-23 13:13:51 -08:00
Matilde Park
c17bec49af
prepping contact add
2020-01-23 13:13:51 -08:00
Logan Allen
ed481d89a5
contacts: end to end tested apis with working reducers
2020-01-23 13:13:51 -08:00
Matilde Park
082a44a7f8
iterate all groups with relative links
2020-01-23 13:13:51 -08:00
Matilde Park
74c17a3851
passing props, scrolling long layouts
...
(figuring out data manipulation)
2020-01-23 13:13:50 -08:00
Logan Allen
924d9996ab
finished hooking up initial data setup to contacts store and view to front-end. still need to do updates and reducer
2020-01-23 13:13:50 -08:00
Matilde Park
df4c07d67e
new.js -> padding and search icon
2020-01-23 13:12:27 -08:00
Matilde Park
1ea0e59e64
root -> new navigation
2020-01-23 13:12:27 -08:00
Matilde Park
23858fc6d7
mannequin newScreen entry fields
2020-01-23 13:12:26 -08:00
Matilde Park
99a73e981c
newscreen scaffold
2020-01-23 13:12:26 -08:00
Matilde Park
462b14bf58
subscribe to contact-store, fill groups headers
2020-01-23 13:12:26 -08:00
Matilde Park
2aefc02112
checkpoint (removing chat api calls, adding contacts)
2020-01-23 13:12:26 -08:00
Matilde Park
cc50ca3668
left panel, responsively
2020-01-23 13:12:26 -08:00
Matilde Park
8de846c60d
removing chat cruft, adding header + libs
2020-01-23 13:12:26 -08:00
Matilde Park
1299e26940
tachyons -> indigo-static
2020-01-23 13:12:26 -08:00
Matilde Park
7dfe151f15
contacts: tile graphic, fixing mount point
2020-01-23 13:12:26 -08:00
Logan Allen
47c1745074
contacts: added store, view, marks, ui
2020-01-23 13:12:26 -08:00
Logan Allen
524bdbd8c1
sur: added identity structure with support for ship signatures or ring signatures
2020-01-23 13:12:26 -08:00
Isaac Visintainer
f49e97a5c3
fix publish-action mark
2020-01-23 10:52:09 -08:00
Fang
f4ed3fe980
clay: document %t care
2020-01-22 21:23:14 -08:00
Matilde Park
22f1a52e08
link: amend "channels" copy on landing
...
It should be "collections," as per OS1 discussions.
2020-01-22 22:20:14 -05:00
Matilde Park
89aa143403
drum: add link-store and related hooks to boot
2020-01-22 18:20:06 -05:00
Matilde Park
d3f57fbf9d
interface: add links FE source code
2020-01-22 18:16:44 -05:00
Matilde Park
200d7548f6
links: add links landscape application to arvo
2020-01-22 18:16:27 -05:00
Matilde Park
34b9c445e3
link-server-hook: add tile serving, %png mounts
...
Front-end work necessitates images being mounted, and the tile served on
Landscape. This commit adds it to link-server-hook.
2020-01-22 18:14:57 -05:00
Isaac Visintainer
e9452bfa72
don't send null kick if subscribers list is empty
...
scry old files into the correct structure
2020-01-22 12:47:00 -08:00
Jared Tobin
267081424b
Merge branch 'yt-preview' ( #2055 )
...
* origin/yt-preview:
chat: add expandable youtube embed messages
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-22 15:14:37 +04:00
Anthony Arroyo
b96d6c5b5f
chat: add expandable youtube embed messages
...
YouTube links now have a [embed] link that expands an inline embed of
the video. Embeds don't load until clicked, so don't fear the tracker.
2020-01-22 15:01:01 +04:00
Jared Tobin
c182672b54
Merge branch 'ames-goof' ( #2166 )
...
* origin/ames-goof:
ames: adjust route update logic
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-22 13:14:39 +04:00
Ted Blackman
11c92e691d
ames: adjust route update logic
...
There was a typo in the routing logic that was comparing equality
against a value where it should have been doing a pattern match. The
value compared against contained the literal * gate, which would never
match route.peer-state, so this condition was always true, meaning the
fix that had added this extra condition (5406f06
) did not actually
change the behavior from what it been previously.
2020-01-22 12:50:18 +04:00
Isaac Visintainer
1fde0913cb
wrote on-load arm for state transitions &c
2020-01-21 10:49:35 -08:00
Isaac Visintainer
9a8f1bec90
made publish marks backward compatible
2020-01-21 10:49:35 -08:00
Isaac Visintainer
366772c559
store, update, send tile notification number
2020-01-21 10:49:35 -08:00
Isaac Visintainer
041900dc26
handle marking posts as read
2020-01-21 10:49:35 -08:00
Isaac Visintainer
97f820a2c6
fixed group and invite bugs
2020-01-21 10:49:35 -08:00
Isaac Visintainer
d4ae9dbcc8
added js reducers
2020-01-21 10:49:35 -08:00
Isaac Visintainer
e807e6c223
paginated frontend api
2020-01-21 10:49:35 -08:00
Isaac Visintainer
dcec0315ae
sending updates to subscribers
2020-01-21 10:49:35 -08:00
Isaac Visintainer
504b9b289c
group and permissions creation on %new-book action
2020-01-21 10:49:35 -08:00
Isaac Visintainer
2836cf3f08
reworked file ingestion to not use ford
2020-01-21 10:49:35 -08:00
Jared Tobin
062c0244f6
Merge branch 'support-asan' ( #2175 )
...
* origin/support-asan:
u3: enables ASan for u3i_molt and friends
u3: enable ASan for u3r_mean and friends
u3: skip RLIMIT_CORE under ASan
u3: specially defines c3_assert for ASan compatiblity
u3: moves loom base on linux-64 to accomodate ASan
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-16 23:39:27 -08:00
Jared Tobin
8ab2afe8b4
Merge branches 'vere-test-exit', 'spinner-leak' and 'exit-cleanup'
...
* origin/vere-test-exit:
vere: fixes Makefile test-runner, exiting on failed test
* origin/spinner-leak:
vere: re-plugs leak in terminal spinner
vere: plugs leak in terminal spinner
* origin/exit-cleanup:
vere: adds trivial i/o driver exit handlers
vere: dispose of http-server resources on exit
vere: dispose of http-client resources on exit
vere: close terminal driver last
vere: properly un/initialize curl
vere: properly un/initialize openssl
worker: free jet dashboard on exit
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-16 06:26:14 -08:00
Joe Bryan
375d4af68e
u3: enables ASan for u3i_molt and friends
2020-01-14 20:42:23 -08:00
Joe Bryan
ee112fa150
u3: enable ASan for u3r_mean and friends
2020-01-14 20:41:21 -08:00
Joe Bryan
119fb59d5f
u3: skip RLIMIT_CORE under ASan
2020-01-14 20:41:02 -08:00
Joe Bryan
bea30f8a2c
u3: specially defines c3_assert for ASan compatiblity
2020-01-14 20:40:25 -08:00
Joe Bryan
884a08a967
u3: moves loom base on linux-64 to accomodate ASan
2020-01-14 20:39:49 -08:00
Joe Bryan
561db380c4
vere: adds trivial i/o driver exit handlers
2020-01-14 20:34:26 -08:00
Joe Bryan
9abe805933
vere: dispose of http-server resources on exit
2020-01-14 20:34:26 -08:00
Joe Bryan
b7138abd0b
vere: dispose of http-client resources on exit
2020-01-14 20:33:52 -08:00
Joe Bryan
0393047847
vere: close terminal driver last
2020-01-14 20:33:43 -08:00
Joe Bryan
84ccfa97d8
vere: properly un/initialize curl
2020-01-14 20:33:34 -08:00
Joe Bryan
d71c26417a
vere: properly un/initialize openssl
2020-01-14 20:33:24 -08:00
Joe Bryan
c945c58375
worker: free jet dashboard on exit
2020-01-14 20:33:15 -08:00
Joe Bryan
5f3a697aab
vere: re-plugs leak in terminal spinner
2020-01-14 20:26:28 -08:00
Joe Bryan
adb41996f0
vere: plugs leak in terminal spinner
2020-01-14 20:26:22 -08:00
Joe Bryan
bb83acce96
vere: fixes Makefile test-runner, exiting on failed test
2020-01-14 20:24:01 -08:00
Fang
ade8e205ec
link-server-hook: support writing notes
...
Also cleans up the POST interface in general. No more paths in the URL,
all relevant details go into the json now.
Renames /~link/add to /~link/save to match the +action tag.
As such, format for /~link/save is:
{path: '/some/group', title: 'Some title', url: 'https://urbit.org/ '}
Format for /~link/note is:
{path: '/some/group', url: 'https://urbit.org ', udon: 'This is cool.'}
2020-01-14 15:32:32 -08:00
Jared Tobin
ce6f82a58d
chat: trim whitespace [ci skip]
2020-01-14 11:21:24 -08:00
Jared Tobin
3a6fb37b25
Merge branch 'edit-mugs' ( #2169 )
...
* origin/edit-mugs:
u3: clear cached mugs on cell edit
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-14 11:13:20 -08:00
Joe Bryan
94800ca79c
u3: clear cached mugs on cell edit
...
This commit fixes a bug wherein cached mugs were wrongfully retained on
editing cells, producing a jet mismatch in +mug.
2020-01-14 11:11:41 -08:00
Jared Tobin
a0cb74b658
Merge branch 'matilde/chat-dark-mode' ( #2144 )
...
* origin/matilde/chat-dark-mode:
chat: fade images on dark mode
chat: add dark mode
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-14 11:09:18 -08:00
Jared Tobin
430f4c36d6
Merge branch 'lens-fix' ( #2162 )
...
* origin/lens-fix:
lens: don't prematurely flush state
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-14 08:52:01 -08:00
Philip Monk
d578159791
ames: fix assertion bug and add debug info
...
If we receive the naxplanation before the nack, the assertion in the gte
direction fails. The intent of the assertion is to make sure top of the
live queue never falls behind current.state, so it was simply in the
wrong direction.
2020-01-14 08:34:12 -08:00
Fang
a3fbd7a25d
link-server-hook: refactor scries
2020-01-10 14:51:14 -08:00
Fang
5ec9aea139
link-server-hook: include comment count with submissions
2020-01-10 14:46:38 -08:00
Fang
df2ed4b5a6
link-server-hook: include item count with page count
2020-01-10 14:25:17 -08:00
Isaac Visintainer
2cd9fc75a4
lens: don't prematurely flush state
2020-01-10 12:55:58 -08:00
Fang
740836348d
link-server-hook: fall back to serving index.html
2020-01-10 12:08:13 -08:00
Isaac Visintainer
a07a3747d1
invite-hook: fixed incorrect assertion about outgoing invites
2020-01-09 16:16:39 -08:00
Jared Tobin
754fba30e3
Merge branch 'matilde/meta-morgue' ( #2159 )
...
* origin/matilde/meta-morgue:
soto: add "dead" alt keys to ignored list
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-08 10:12:10 +08:00
Jared Tobin
795b811aca
Merge branch 'matilde/chat-timestamp' ( #2146 )
...
* origin/matilde/chat-timestamp:
chat: correct datestamp to match @da
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-08 10:11:33 +08:00
Fang
00a4c91f92
link: encode urls in paths in base64
2020-01-07 17:38:39 -08:00
Fang
d806209b7f
link-server-hook: include total page count
2020-01-07 17:23:30 -08:00
Matilde Park
a5e68f280d
soto: add "dead" alt keys to ignored list
...
alt+n produces a ~, on top of a key called "Dead". This ignores "dead"
to send the ~ and function as normal.
2020-01-07 20:14:39 -05:00
Fang
4610b26948
link: rename generator as per type change
2020-01-07 13:46:13 -08:00
Fang
879e45c377
Merge branch 'master' into m/uplink
2020-01-07 13:30:55 -08:00
Jared Tobin
8afad66138
Merge branch 'm/chat-cli-reconnect' ( #2147 )
...
* m/chat-cli-reconnect:
chat-cli: reconnect with actual bowl
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-07 04:25:14 +08:00
Fang
0ff2f44f31
chat-cli: reconnect with actual bowl
...
Fixes a bug introduced in 4798b9d
.
This, uh, fell into the same old case of using an arm from a |_ without
initializing that core with a sample first. In this case, that resulted
in the bowl in connect being the default bowl here. This is fine for
~zod, since it's the default ship, but gives incorrect behavior for
anyone else.
2020-01-07 04:21:49 +08:00
Jared Tobin
01afc2a143
Merge branch 'm/gall-gift-paths' ( #2134 )
...
* origin/m/gall-gift-paths:
gall: (list path) in %fact and %kick
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-07 04:17:32 +08:00
Matilde Park
4143b0060f
chat: fade images on dark mode
...
Adds 60% opacity to dim images within messages in dark mode.
2020-01-06 08:09:53 -05:00
Jared Tobin
cd9624e097
Merge branch 'm/whitespace' ( #2149 )
...
* origin/m/whitespace:
various: remove trailing whitespace
ci: reject trailing whitespace
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-06 10:55:13 +08:00
Jared Tobin
f94ba8ce9c
Merge branch 'm/xmas' ( #2143 )
...
* origin/m/xmas:
xmas: remove, obsoleted by alef
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-06 10:53:15 +08:00
Jared Tobin
836142ad0d
Merge branch 'rcrdlbl/chat-sidebar-margin-fix' ( #2137 )
...
* rcrdlbl/chat-sidebar-margin-fix:
chat: add bottom padding to sidebar items
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-06 07:45:25 +08:00
Jared Tobin
5b0fd5fb78
Merge branch 'm/webchat-me' ( #2135 )
...
* origin/m/webchat-me:
webchat: render "me" messages in italics
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-06 07:25:53 +08:00
Jared Tobin
6f7aae3574
Merge branch 'ames-clean' ( #2127 )
...
* origin/ames-clean:
ames: update comment docs
Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-06 07:25:22 +08:00
Fang
fcf1846b6f
various: remove trailing whitespace
2020-01-03 22:06:42 +01:00
Matilde Park
271e594f61
chat: correct datestamp to match @da
...
The datestamp in webchat currently leftpads the month numeral.
This commit amends it so that the month numeral doesn't pad with zeroes.
2020-01-01 08:54:36 +01:00
Matilde Park
d45be05c26
chat: add dark mode
...
Adds custom classes and declarations for dark mode color scheme.
Uses prefers-color-scheme media query to check preference.
2019-12-27 12:15:03 +01:00
Fang
e005cefe77
xmas: remove, obsoleted by alef
2019-12-27 02:19:36 +01:00
Przemyslaw Dabrowski
f8c305b65b
chat: add bottom padding to sidebar items
...
Pretty simple really, fixes issue #2131 .
Decided to use padding instead of margin because the underflow is nice,
but not at the detriment of being able to see the last chat preview
2019-12-23 22:24:24 -05:00
Fang
b8a336c607
webchat: render "me" messages in italics
2019-12-23 23:11:04 +01:00
Fang
ae8a57ca25
gall: (list path) in %fact and %kick
...
Instead of providing a (unit path), allows for (list path), which better
supports the "update to path and subpath cases".
For example, if /things wants updates about everything, and
/things/specific wants updates about the specific thing, they'll both
need to receive a %fact when the specific thing changes.
Previously, these would have been two separate moves. Now, gall handles
the multi-targeting for you.
2019-12-23 13:37:32 +01:00
Fang
ea7c1db61c
various: use =/ in place of =+ ^-
...
Also faceless =; where appropriate.
2019-12-21 14:29:14 -03:30
Fang
21ac0e513b
hoon: parse =; without face
...
Allows for =;([a=@ b=@] ...) and similar constructions.
Also affects =/ and =^.
2019-12-21 14:20:11 -03:30
Fang
4798b9df1f
chat-cli: reconnect to chat-store on-kick
...
Also reconnects on-load, if no chat-store subscription appears to be
open. This should resolve any current disconnects.
2019-12-21 13:02:33 +01:00
Fang
c814114d93
chat-cli: add trace printf for tuba crashes
2019-12-21 12:59:45 +01:00
Fang
5cd8d98dd6
chat-cli: don't pass mark into +poke-noun
2019-12-21 12:58:22 +01:00
Ted Blackman
895f1c069d
ames: update comment docs
2019-12-21 01:56:51 -05:00
Fang
9f18877c0a
link: rudimentary comments
...
As of yet largely untested. The "urls in paths" might bring trouble.
2019-12-21 00:52:09 +01:00
Jared Tobin
103e375417
Merge branch 'ford-safe' ( #2117 )
...
* origin/ford-safe:
ford: clear build results on +load
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-20 13:22:23 -03:30
Fang
beb783808c
link-proxy-hook: correctly use wire vs path
2019-12-20 16:02:09 +01:00
Fang
8a0baed192
link: %add -> %save
2019-12-20 15:58:32 +01:00
Jared Tobin
e1df5545e5
Merge branch 'matilde/chat-name-validation' ( #2116 )
...
* origin/matilde/chat-name-validation:
chat: validate chat names
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-20 10:44:30 -03:30
Jared Tobin
ee0de1a657
Merge branch 'm/clay-u' ( #2119 )
...
* origin/m/clay-u:
clay: implement %u care
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-19 14:09:52 -03:30
Jared Tobin
eee651042c
Merge branch 'm/eth-sending' ( #2094 )
...
* origin/m/eth-sending:
eth-sender: do proper nonce reading
zuse: implement eth rlp decoding
zuse: correctly encode leading zeroes in rlp data
zuse: lightly restructure encode:rlp:ethereum
static gall: update send-txs
ethio: implement +request-batch-rpc-loose
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-19 11:20:06 -03:30
Fang
3808f02287
clay: implement %u care
...
Previously, it would always produce ~, regardless of the path asked
about.
Now, it produces a loobean, based on whether or not a file exists at the
specified path.
2019-12-18 21:02:38 +01:00
Fang
626f6abfce
link-server-hook: serve static app files from clay
...
Any requests that aren't explicitly defined endpoints try to load
content from clay instead, but only for html, css and js files.
Depends on #2119 .
2019-12-18 20:35:50 +01:00
Jared Tobin
9b0582323c
Merge branch 'philip/eth-watcher' ( #2113 )
...
* philip/eth-watcher:
ph: fix tests by spamming blocks regularly
gaze: reflect changes to eth-watcher
ames: better printfs
jael: only advance lifes
jael: stop ship-to-ship
jael: add "eager" mode to avoid hitting nodes as much
jael: properly store ship sources
gen: add +azimuth-sources
jael: re-enable ship-to-ship communication
eth-watcher: actually stop pending thread when restarting
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-18 12:13:27 -03:30
Philip Monk
1a7658bd91
ph: fix tests by spamming blocks regularly
2019-12-18 11:53:36 -03:30
Fang
b6f97da2d7
link-server-hook: expose submissions json endpoint
2019-12-18 16:19:03 +01:00
Philip Monk
de2d0f3014
gaze: reflect changes to eth-watcher
2019-12-18 11:38:56 -03:30
Philip Monk
0e876b3cd4
ames: better printfs
2019-12-18 11:31:17 -03:30
Philip Monk
3d30b3b73c
jael: only advance lifes
...
This matches the semantics of rifts and makes it more forgiving of
misordered updates.
2019-12-18 11:31:14 -03:30
Philip Monk
16d98e5eda
jael: stop ship-to-ship
2019-12-18 11:19:41 -03:30
Philip Monk
18c3e7253b
jael: add "eager" mode to avoid hitting nodes as much
2019-12-18 10:58:00 -03:30
Philip Monk
15bd35301e
jael: properly store ship sources
2019-12-18 10:42:57 -03:30
Philip Monk
7706ed6a0c
gen: add +azimuth-sources
2019-12-18 10:41:39 -03:30
Matilde Park
e2cfcafc92
chat: validate chat names
...
Add a regex check for non-lowercase, non-slash, non-hyphen characters,
or numerals, and a quick check for starts-with-slashes, double-slashes,
to a boolean before creating a chat at that path.
2019-12-18 00:53:18 -05:00
Ted Blackman
9fb37543ec
ford: clear build results on +load
2019-12-18 00:25:27 -05:00
Philip Monk
7ca3d9624e
ames: handle misordered crashing boons
...
Two bugs fixed here: first, if the %done reentrancy triggered another
%boon, that wasn't getting translated to a %lost, even though it could
have been the reason the event crashed in the first place.
Second, the %done reentrancy needs to happen after we emit our move, so
that we don't invert the order of the %boon's we produce.
2019-12-17 20:58:30 -08:00
Philip Monk
e5ac690fd3
jael: re-enable ship-to-ship communication
...
Also fix bug in eth-watcher that didn't cancel outstanding threads when
config changes.
And set default rift for ourselves to 0.
2019-12-17 16:14:07 -08:00
Philip Monk
e88f91f3b2
eth-watcher: actually stop pending thread when restarting
2019-12-17 16:14:02 -08:00
Philip Monk
a64e516fc5
Merge pull request #2098 from urbit/philip/eyre-quiet
...
eyre: turn sigpam into flog
2019-12-17 15:54:16 -08:00
Fang
9f47874760
link-server-hook: remove obsolete workaround
...
The "no-data bug" in eyre was fixed prior to the 0.10.0 release.
2019-12-17 23:32:41 +01:00
Joe Bryan
1cf8e6e640
vere: plug leak in worker args
2019-12-16 11:59:04 -08:00
Joe Bryan
0162379f62
worker: plug leak in event tracing
2019-12-16 11:59:04 -08:00
Joe Bryan
e9f3aa19ef
vere: free curl response buffers after use
2019-12-16 11:59:04 -08:00
Joe Bryan
e9b1b22a6e
vere: plugs a leak on the "boothack" command socket connection
...
but more work is needed to fully close and cleanup
2019-12-16 11:59:04 -08:00
Joe Bryan
dc5e5f38a7
test: free malloc'd structures in tests
2019-12-16 11:59:04 -08:00
Joe Bryan
73ad2c543f
vere: consistently use c3 malloc/free wrappers
2019-12-16 11:59:03 -08:00
Joe Bryan
4691fa2a8d
vere: plugs leak of http response headers
2019-12-14 23:26:24 -08:00
Joe Bryan
01470355d1
vere: fix use-after-free in closing/canceling http request
2019-12-14 18:25:43 -08:00
Joe Bryan
d5949f2358
vere: fix use-after-free when sending http response
2019-12-14 18:25:39 -08:00
Fang
bdc7fb81e0
eth-sender: do proper nonce reading
2019-12-14 21:50:07 +01:00
Fang
1647d760d1
zuse: implement eth rlp decoding
...
Also updates existing tests to check both en- and decoding.
2019-12-14 21:39:54 +01:00
Fang
7755bc9718
zuse: correctly encode leading zeroes in rlp data
2019-12-14 21:25:20 +01:00
Fang
5c56cce6ea
zuse: lightly restructure encode:rlp:ethereum
2019-12-14 21:24:56 +01:00
Philip Monk
769a1c96af
eyre: turn sigpam into flog
...
This error is mostly harmless, but it does indicate we aren't cleaning
up our subscriptions properly. This lets you silence with |knob.
fixes #2088
2019-12-14 00:49:23 -08:00
Philip Monk
bfd2e533a1
goad: make startup resilient to errors
...
By not running the risky %goad card in on-init. Also includes some qol
fixes.
2019-12-13 18:50:26 -08:00
Philip Monk
b14606660a
goad: recompile apps after changes to /sys
...
OTAs commonly end up in an inconsistent state if apps depend on changes
to /sys. For example, the %sift changes break on OTA because %spider
needs to be reloaded so that it's aware of the new thread type. This
adds a %goad app, which reloads all apps after every change to /sys.
Getting this to start OTA is nontrivial, but this pattern should work
for apps in the future. The changes to clock shouldn't generally be
necessary; they are only necessary here because we can't rely on hood to
start goad, since hood fails to compile if it's run before zuse is
reloaded. Once goad is active, this will cease to be a problem.
2019-12-13 17:14:51 -08:00
Fang
fc1d852faf
static gall: update send-txs
...
Renamed to eth-sender. Can still sign eth-txs at multiple gas prices,
fan transactions to multiple nodes, wait for confirmation between
transaction batches (now of user-specified size).
The previous nonce reading implementation was broken beyond belief and
has been taken out. Can be reimplemented once RLP decoding is in the
stdlib.
2019-12-14 00:18:30 +01:00
Fang
b482249712
ethio: implement +request-batch-rpc-loose
...
Produces batch request results regardless of node-side error.
Reimplements +request-batch-rpc-strict using it.
2019-12-13 23:30:52 +01:00
Elliot Glaysher
44f6a90a4c
hoon: fix typo in +put:in
...
This fixes +put:in so that it works without the correct jet. There's a
mismatch where the hoon code is wrong and the jet is correct, so that
when we try to run this on alternate interpreters which may not have the
+in jets, things won't work.
2019-12-13 21:00:21 +08:00
Jared Tobin
aff97bf150
Merge branch 'm/eth-apps' ( #2084 )
...
* origin/m/eth-apps:
claz: clean up head of app file
static gall: update claz
ethio: add +get-next-nonce
zuse: update %eth-get-transaction-count
zuse: include all relevant azimuth addresses
ethio: implement +batch-read-contract-strict
ethio: fail request-rpc more properly
static gall: update gaze
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 16:27:04 +08:00
Jared Tobin
9ba4505086
Merge branch 'ames-sift' ( #2081 )
...
* ames-sift:
ames: refactor +load
ames: +send-blob better ship printing
hood: |ames-sift generator to trace by ship
ames: add %sift to trace by ship
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 16:06:32 +08:00
Ted Blackman
35596ca7de
ames: refactor +load
2019-12-12 15:55:37 +08:00
Ted Blackman
d4574b5da4
ames: +send-blob better ship printing
2019-12-12 15:55:36 +08:00
Ted Blackman
c500e03b81
hood: |ames-sift generator to trace by ship
2019-12-12 15:55:36 +08:00
Ted Blackman
d77fb0f685
ames: add %sift to trace by ship
2019-12-12 15:55:32 +08:00
Jared Tobin
2cf8bb215d
Merge branch 'urbit-ID' ( #2077 )
...
* origin/urbit-ID:
updates to 'Urbit identity' language in comet boot message
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:52:07 +08:00
Jared Tobin
15c929077d
Merge branch 'newt-plug-leak' ( #2076 )
...
* origin/newt-plug-leak:
newt: free completed message buffer
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:51:43 +08:00
Jared Tobin
1a88edeb37
Merge branch 'vere-build-tests' ( #2075 )
...
* origin/vere-build-tests:
vere: updates the test build targets to be generic
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:51:19 +08:00
Jared Tobin
85d447f173
Merge branch 'philip/gall-noop' ( #2073 )
...
* origin/philip/gall-noop:
gall: no-op on duplicate watch-ack
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:50:19 +08:00
Jared Tobin
2aa86e3121
Merge branch 'philip/stuck-flow' ( #2071 )
...
* origin/philip/stuck-flow:
ames: recover from mismatched message nums
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:49:53 +08:00
Jared Tobin
3888eabaa8
Merge branch 'ames-set-port' ( #2057 )
...
* origin/ames-set-port:
ames: refactors udp init() and bind()
ames: honor -p for galaxies, with warning
ames: adds port printfs for all ships
ames: honor -p for non-galaxies
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:49:34 +08:00
Jared Tobin
e4a7dae888
Merge branch 'philip/login-instructions' ( #2039 )
...
* origin/philip/login-instructions:
eyre: add instructions to login page
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-12 15:46:36 +08:00
Fang
8857213000
claz: clean up head of app file
2019-12-11 23:00:49 +01:00
Fang
864b19e075
link-server-hook: disable verb by default
2019-12-11 21:16:20 +01:00
Fang
2048f7ab9e
link: make network comms work
...
This resolves a number of issues that were keeping communications with
foreign ships from working.
- there was no link-update mark
- there was no +on-arvo handling in link-listen-hook
- link-listen-hook was subscribing to the non-existent "link-hook"
- link-proxy-hook permission check was looking at a wrong path
Also makes link-listen-hook aware that subscriptions might get rejected
because of permissions, so that it ignores failed subscriptions instead
of being loud about it.
2019-12-11 20:49:50 +01:00
Fang
3a859ef585
link: add minimal link-server-hook and link-webext
...
link-server-hook exposes (parts of) the link-store over eyre, on the
condition that the client is authenticated as the host ship.
link-webext as committed is a very minimal web extension. When its
toolbar button is clicked, it saves the current webpage to /private
in the link-store.
In the future, this should support choosing a target to save to,
highlighting already-saved pages, and many other features.
2019-12-11 20:49:50 +01:00
Fang
25d390d6b1
server: properly defined request-line type
2019-12-11 20:49:49 +01:00
Fang
a95449cc64
link: social bookmarking core implementation
...
Stores URLs and their titles for the local ship. Can listen to
"submissions" on foreign ships.
Has a primitive perspective on groups, treating them as
always-interesting. Auto-subscribes to all ships in all groups.
Foreign communications untested.
2019-12-11 20:49:49 +01:00
Fang
a272f7c868
group-store: create, add, remove generators
2019-12-11 20:49:48 +01:00
Fang
fab9097110
static gall: update claz
...
Largely one-to-one port feature-wise.
Support for document polls was added.
Command preparation and verification got split out into
/ted/claz/prep-command, and got a dedicated +prep-result type to
facilitate future support for more complex preparation steps.
2019-12-11 17:32:33 +01:00
Fang
965529525b
ethio: add +get-next-nonce
2019-12-11 17:32:33 +01:00
Fang
a16fbd20ae
zuse: update %eth-get-transaction-count
...
It apparently now requires a second argument indicating the block to get
the result at.
2019-12-11 17:32:33 +01:00
Fang
f5ea5a4401
zuse: include all relevant azimuth addresses
2019-12-11 17:11:47 +01:00
Fang
9a708fb8f8
ethio: implement +batch-read-contract-strict
...
And re-implement +read-contract to use that under the hood.
2019-12-11 17:11:47 +01:00
Fang
abe92e289a
ethio: fail request-rpc more properly
...
strand-fail instead of crashing.
2019-12-11 17:11:47 +01:00
Fang
67825a08d1
static gall: update gaze
...
Noteworthy changes:
- split block timestamp requests into smaller batches
- track invite events
- improved debug pokes
2019-12-11 17:11:46 +01:00
Philip Monk
3b41a8be15
gall: no-op on duplicate watch-ack
...
fixes #2070
2019-12-10 18:49:50 -08:00
Philip Monk
29f078bb14
ames: don't forward up the sponsorship chain
...
This is *actually* why the galaxies are under so much load. They're in
a forwarding loop with their stars, and this breaks the loop.
2019-12-10 16:20:12 -08:00
Robert
220fca335b
updates to 'Urbit identity' language in comet boot message
2019-12-10 13:32:57 -08:00
Joe Bryan
1f87417008
newt: free completed message buffer
2019-12-10 12:41:06 -08:00
Joe Bryan
50db1149eb
vere: updates the test build targets to be generic
2019-12-10 11:27:57 -08:00
Jared Tobin
853e33d88a
Merge branch 'newt-test' ( #2069 )
...
* origin/newt-test:
vere: adds tests for newt ipc framing, fixes infinite loop
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-10 19:40:39 +08:00
Jared Tobin
733d7fd7e5
Merge branch 'philip/leave' ( #2068 )
...
* philip/leave:
gall: remove message type from wire
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-10 19:34:30 +08:00
Philip Monk
68279d91e4
gall: remove message type from wire
...
%leave over the network didn't work because we included the message type
in the wire from gall, so the duct for the initial %watch and the %leave
were different. We need to know the message type so we can route the
acknowledgment as %poke-ack, %watch-ack, or no-op.
This moves this piece of information to a piece of state, where we queue
up the message types per [duct wire]. Ames guarantees that
acknowledgments will come in order.
This also includes an easy state adapter. The more interesting part of
the upgrade is that we likely have outstanding subscriptions with the
old wire format. The disadvantage of storing information in wires is
that it can't be upgraded in +load. So, here we listen for updates on
the old wire format, and when we get them we kill the old subscription,
so that it will be recreated with the new wire format.
As an aside, this is a good example of what we mean when we say
subscriptions may be killed at any time, so apps must handle this case.
Finally, this fixes the "attributing" ship to ~zod for agent requests.
This information was ignored for agent requests, but including it causes
spurious duct mismatches.
2019-12-10 19:32:26 +08:00
Jared Tobin
d21310ace8
Merge branch 'la-unread' ( #2064 )
...
* origin/la-unread:
chat-js: fix unread counts and indentation
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-10 17:05:43 +08:00
Jared Tobin
3f50a11e48
Merge branch 'philip/drum' ( #2063 )
...
* origin/philip/drum:
drum: revert tang ordering change
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-10 16:26:49 +08:00
Jared Tobin
69c2f5517c
Merge branch 'malloc-print' ( #2061 )
...
* origin/malloc-print:
vere: print arg to c3_malloc() et. al. on failure
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-10 16:19:11 +08:00
Philip Monk
e7c8a44e11
ames: recover from mismatched message nums
...
We've seen issues where the message-num of the head of live.state is
less than current.state. When this happens, we continually try to
resend message n-1, but we throw away any acknowledgment for n-1 because
current.state is already n. This halts progress on that flow.
We don't know what causes us to get in this bad state, so this adds an
assert to the packet pump that we're in a good state, run every time
the packet pump is run. When this crashes, we can turn on |ames-verb
and hopefully identify the cause.
This also adds logic to +on-wake in the packet pump to not try to resend
any messages that have already been acknowledged. This is just to
rescue ships that currently have these stuck flows.
(Incidentally, I'd love to have a rr-style debugger for stuff like this.
Just run a command that says "replay my event log watching for this
specific condition and then stop and let me poke around".)
2019-12-09 23:31:18 -08:00
Joe Bryan
1f05927558
vere: adds tests for newt ipc framing, fixes infinite loop
2019-12-09 18:18:07 -08:00
Logan Allen
30264bbc93
chat-js: fix unread counts and indentation
2019-12-09 13:05:56 -08:00
Philip Monk
5ff9e04204
drum: revert tang ordering change
...
Turns out this wasn't a regression, it was intended behavior. I
continue to believe it's the wrong behavior, but that will require a
longer discussion.
2019-12-09 11:47:48 -08:00
Joe Bryan
0235b178f9
ames: refactors udp init() and bind()
2019-12-09 11:11:32 -08:00
Joe Bryan
6bd34bbd00
ames: honor -p for galaxies, with warning
2019-12-09 11:10:40 -08:00
Ted Blackman
10e7c0945a
vere: print arg to c3_malloc() et. al. on failure
2019-12-08 19:32:55 -05:00
Fang
6722f789a9
chat-hook: no-op on /backlog kick if not synced
...
This matches the behavior that's used for +kick on /mailbox, among other flows.
2019-12-08 20:08:23 +01:00
Joe Bryan
134e947481
ames: adds port printfs for all ships
2019-12-07 23:59:21 -08:00
Joe Bryan
5784373bb6
ames: honor -p for non-galaxies
2019-12-07 23:56:38 -08:00
Jared Tobin
fa4544406e
Merge branch 'chat-safe-tab' ( #2053 )
...
* origin/chat-safe-tab:
chat: give terminal bell on tab in an empty buffer
chat: don't crash on tab in an empty buffer
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 17:03:44 +08:00
Jared Tobin
74c3ad619a
Merge branch 'decommission' ( #2051 )
...
* origin/decommission:
ames: remove last remnants of |nuke
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 17:02:55 +08:00
Jared Tobin
31f20c30c6
Merge branch 'philip/ew-printfs' ( #2050 )
...
* origin/philip/ew-printfs:
eth-watcher: silence printfs
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 17:01:01 +08:00
Jared Tobin
dc45806e99
Merge branch 'mp/chat-design-tweak' ( #2049 )
...
* mp/chat-design-tweak:
chat: chat tab bar re-aligned and resized
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 16:55:29 +08:00
Jared Tobin
63bd7c62db
Merge branch 'mp/soto-catch-unidentified' ( #2018 )
...
* mp/soto-catch-unidentified:
soto: mutate cursor for tab complete inserts
soto: click sets cursor
soto: catch 'unidentified' key
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 16:51:52 +08:00
Jared Tobin
de7b7d80f0
Merge branch 'pkova/patch-1' ( #2017 )
...
* pkova/patch-1:
vere: filter out content-length header from eyre
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 16:51:00 +08:00
Jared Tobin
27b5ded1d2
Merge branch 'm/chat-eval' ( #2009 )
...
* m/chat-eval:
chat: include .^ paths in its eval failure case
chat: improve eval implementation
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-07 16:48:42 +08:00
Matilde Park
f5faf6eb11
chat: chat tab bar re-aligned and resized
...
The placement of the buttons and chat title on Landscape were slightly
off-line with each other. This commit lines them up
and changes font size to f8 to match the mockup closely.
2019-12-06 16:44:45 -05:00
Philip Monk
abde1d8aa9
ames: reduce load by increasing timer delays
2019-12-06 12:11:06 -08:00
Joe Bryan
c8958a2553
chat: give terminal bell on tab in an empty buffer
2019-12-06 12:03:32 -08:00
Joe Bryan
706d25ba79
chat: don't crash on tab in an empty buffer
2019-12-06 12:02:59 -08:00
Joe Bryan
a0d2d41d0c
ames: remove last remnants of |nuke
2019-12-06 11:46:55 -08:00
Philip Monk
2d9a043e6f
eth-watcher: silence printfs
2019-12-06 11:19:05 -08:00
Jared Tobin
ea8e331d93
vere: patch version bump [ci skip]
2019-12-06 21:25:01 +08:00
Jared Tobin
5cbfb844e8
Merge branch 'newt-clean' ( #2042 )
...
* newt-clean:
vere: refactors ipc message parsing and assembly
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 21:15:21 +08:00
Joe Bryan
acddc88d66
vere: refactors ipc message parsing and assembly
...
We've periodically seen malloc failures (ie, returning a null pointer)
in newt.c, our IPC implementation ("memory lost" assertion failures).
I've suspected that they were caused by attempts to allocate zero bytes.
We were not properly following libuv's read callback conventions for
EAGAIN/EWOULDBLOCK, which would've had that result.
The message parsing and assembly was in one large function that I found
it hard to follow, so I've refactored into smaller pieces, so it should
be more maintainable going forward.
2019-12-06 21:13:42 +08:00
Pyry Kovanen
864fa7ef47
vere: filter out content-length header from eyre
2019-12-06 13:21:25 +02:00
Jared Tobin
d5f1efc7bc
Merge branch 'permisson-group-hook-fix' ( #2044 )
...
* permisson-group-hook-fix:
permission-group-hook: fixed permission associate flow
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 12:24:07 +08:00
Jared Tobin
16b81727d2
Merge branch 'la-scrollback' ( #2037 )
...
* la-scrollback:
chat-store: fix scrollback issue due to malformattedd peek
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 12:22:20 +08:00
Jared Tobin
383a86032f
Merge branch 'philip/dns-quiet' ( #2036 )
...
* philip/dns-quiet:
dns: give quieter errors
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 12:21:21 +08:00
Jared Tobin
0bad1401f0
Merge branch 'philip/drum-order' ( #2035 )
...
* philip/drum-order:
drum: print tangs in order
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 12:20:53 +08:00
Jared Tobin
4251b13d0e
Merge branch 'matilde/chat-feedback' ( #2027 )
...
* matilde/chat-feedback:
chat: Fix chat join link - %ask-history error
chat: join channel on enter
chat: wrap long links, join button uses pointer
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 12:10:55 +08:00
Jared Tobin
3fc349d995
Merge branch 'philip/eth-watcher-silence' ( #2022 )
...
* philip/eth-watcher-silence:
eth-watcher: be quieter about parse errors
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-06 12:10:12 +08:00
Isaac Visintainer
5a7c0b1181
permission-group-hook: fixed permission associate flow
2019-12-05 15:45:30 -08:00
Philip Monk
956a3c7420
eyre: add instructions to login page
2019-12-05 12:31:42 -08:00
Logan Allen
14dc580c06
chat-store: fix scrollback issue due to malformattedd peek
2019-12-05 12:18:21 -08:00
Philip Monk
1eeca16f1a
dns: give quieter errors
...
!! crashes the thread, so dojo prints a stack trace. An explicit
failure lets you give a custom error message.
2019-12-05 11:59:59 -08:00
Philip Monk
ddbfb53b28
drum: print tangs in order
2019-12-05 11:58:55 -08:00
Jared Tobin
5eec015343
chat-store: fix errant 'this'
...
6c938e1
resolved a merge conflict, but retained a reference to 'this'
from the wrong parent.
2019-12-05 21:18:11 +08:00
Jared Tobin
6c938e188d
Merge branch 'm/chat-store-eval' ( #2010 )
...
* m/chat-store-eval:
chat-store: only evaluate our own %code
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-05 20:59:13 +08:00
Ted Blackman
bee0b5803a
ames: don't crash on missing queued larval event
2019-12-05 17:04:24 +08:00
Jared Tobin
13f6fefb95
Merge branch 'correct-r-limits' ( #2028 )
...
* correct-r-limits:
nix: removes unnecessary use of `cat` in ivory-header build
u3: correctly sets RLIMIT_NOFILE cross-platform
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-05 16:48:16 +08:00
Jared Tobin
2391090b56
Merge branch 'philip/boot-order' ( #2023 )
...
* philip/boot-order:
drum: boot to dojo and start acme
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-05 16:45:25 +08:00
Jared Tobin
834cd78a1b
Merge branch 'liam-fitzgerald/tab-complete-chat' ( #1995 )
...
* liam-fitzgerald/tab-complete-chat:
chat-cli: update tab-complete to static gall
chat-cli: autocomplete on empty command
chat-cli: use tall-form cencab
chat-cli: clarify tab completion suggestions
chat-cli: address style issues
chat-cli: add tab autocomplete
language-server: genericise searching gates
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-05 16:43:37 +08:00
Jared Tobin
f23bbd1cec
Merge branch 'pkova/master' ( #1991 )
...
* pkova/master:
zuse: implement json number to @rd parsing
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-05 16:38:57 +08:00
Jared Tobin
41b64feb16
Merge branch 'philip/p2p' ( #2025 )
...
* philip/p2p:
ames: don't overwrite lane if already direct
Signed-off-by: Jared Tobin <jared@tlon.io>
2019-12-05 16:08:01 +08:00
Philip Monk
5406f06092
ames: don't overwrite lane if already direct
...
This is why basically all packets are going through the galaxies right
now. Most of the time, the flow right now is:
* talking to ~dopzod but don't know where it is, so ask ~zod to forward,
which it does
* ~dopzod responds both directly (on the origin lane) and through ~zod
* (if NAT, the direct response doesn't get back, but the one through
~zod does. Then you respond directly to ~dopzod because their lane
piggybacked on the response. ~dopzod responds both directly and
through ~zod, and the story picks up the same as if you weren't behind a
NAT)
* now you have a direct lane to ~dopzod, so all is well.
* now the duplicate response from ~dopzod through ~zod comes in (takes a
little longer because it's bouncing off ~zod), resetting your lane to
"provisional"
* since your lane is provisional, you send your next packet both
directly and through ~zod
* GOTO 2
This change says "if I already have a direct lane, don't overwrite it
with a provisional one". This way, the only way the direct lane can be
overwritten is if they stop responding on it (cleared on "not
responding; still trying").
I also added |- to +send-blob to make |ames-verb %rot less confusing.
2019-12-05 16:05:06 +08:00