@abide/abide 0.124.0 → 0.124.1
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 +7 -0
- package/docs/REGISTRY.md +1 -1
- package/docs/RULEBOOK.md +5 -2
- package/docs/abide.md +1 -1
- package/package.json +1 -1
- package/src/compiler/Lowering.ts +29 -4
- package/src/compiler/projectShadow.ts +1 -0
- package/src/server/BRIDGE_VERSION.ts +1 -1
- package/src/shared/reactive/Reactive.ts +12 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @abide/abide
|
|
2
2
|
|
|
3
|
+
## 0.124.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- cd07376: a throttled or debounced body is busy while its window holds a run, and an await waits for it — 5.15 ([`1482fd3`](https://github.com/briancray/abide/commit/1482fd3368675794ab6db48ff1ff2c5b8861d68c))
|
|
8
|
+
- cd07376: a bind: through a path is checked as the get/set pair the build emits — 32.5 ([`c91d03f`](https://github.com/briancray/abide/commit/c91d03f816af91f994314fc17b2101d8ec77ec51))
|
|
9
|
+
|
|
3
10
|
## 0.124.0
|
|
4
11
|
|
|
5
12
|
### Minor Changes
|
package/docs/REGISTRY.md
CHANGED
|
@@ -906,6 +906,6 @@ site's `claudeCode`.
|
|
|
906
906
|
|
|
907
907
|
| Command | Meaning | Rules |
|
|
908
908
|
| --- | --- | --- |
|
|
909
|
-
| `abide-bridge <site> <code> [--claude <path>] [--env NAME=VALUE]… [-- <options>]` | This machine's Claude Code, paired with the browser a site minted the code for. | 44.15, 44.16, 44.24, 44.25, 44.27, 44.30, 44.44, 44.45, 44.46 |
|
|
909
|
+
| `abide-bridge <site> <code> [--claude <path>] [--env NAME=VALUE]… [-- <options>]` | This machine's Claude Code, paired with the browser a site minted the code for. | 44.15, 44.16, 44.24, 44.25, 44.27, 44.30, 44.44, 44.45, 44.46, 44.47 |
|
|
910
910
|
| `abide-bridge install [--claude <path>] [--env NAME=VALUE]… [-- <options>]` | The app that opens a site's `abide-bridge` links on this machine, registered. | 44.41, 44.42, 44.43, 44.44 |
|
|
911
911
|
| `abide-bridge uninstall` | `abide-bridge install`, undone. | 44.43 |
|
package/docs/RULEBOOK.md
CHANGED
|
@@ -290,8 +290,8 @@ two is a comparator answering directly.
|
|
|
290
290
|
|
|
291
291
|
5.14 Declaring both `throttle` and `debounce` MUST refuse at construction.
|
|
292
292
|
|
|
293
|
-
5.15 Where a `throttle` or a `debounce` window is holding a production back,
|
|
294
|
-
|
|
293
|
+
5.15 Where a `throttle` or a `debounce` window is holding a production back, or a body's run under
|
|
294
|
+
5.11, the value served before it MUST go on being served and `s.busy` MUST be true.
|
|
295
295
|
|
|
296
296
|
5.16 A `bind:` read MUST NOT be capped.
|
|
297
297
|
|
|
@@ -3450,6 +3450,9 @@ report is taken, and MUST NOT say it while it redials per 44.25.
|
|
|
3450
3450
|
44.46 A bridge MUST end a turn once `/__abide/bridge` did not take a report carrying it, and MUST
|
|
3451
3451
|
report that turn failed.
|
|
3452
3452
|
|
|
3453
|
+
44.47 A bridge MUST reach `/__abide/bridge` over a certificate that either bun's own authorities or
|
|
3454
|
+
the authorities its machine trusts sign, however the bridge was started.
|
|
3455
|
+
|
|
3453
3456
|
# 45. Offline
|
|
3454
3457
|
|
|
3455
3458
|
45.1 Where `ABIDE_OFFLINE` is on, a page `abide build` built MUST register the worker
|
package/docs/abide.md
CHANGED
|
@@ -11291,7 +11291,7 @@ CLI: what is written in place rather than imported.
|
|
|
11291
11291
|
|
|
11292
11292
|
| Command | Meaning | Rules |
|
|
11293
11293
|
| --- | --- | --- |
|
|
11294
|
-
| `abide-bridge <site> <code> [--claude <path>] [--env NAME=VALUE]… [-- <options>]` | This machine's Claude Code, paired with the browser a site minted the code for. | [44.15](/rulebook#44.15), [44.16](/rulebook#44.16), [44.24](/rulebook#44.24), [44.25](/rulebook#44.25), [44.27](/rulebook#44.27), [44.30](/rulebook#44.30), [44.44](/rulebook#44.44), [44.45](/rulebook#44.45), [44.46](/rulebook#44.46) |
|
|
11294
|
+
| `abide-bridge <site> <code> [--claude <path>] [--env NAME=VALUE]… [-- <options>]` | This machine's Claude Code, paired with the browser a site minted the code for. | [44.15](/rulebook#44.15), [44.16](/rulebook#44.16), [44.24](/rulebook#44.24), [44.25](/rulebook#44.25), [44.27](/rulebook#44.27), [44.30](/rulebook#44.30), [44.44](/rulebook#44.44), [44.45](/rulebook#44.45), [44.46](/rulebook#44.46), [44.47](/rulebook#44.47) |
|
|
11295
11295
|
| `abide-bridge install [--claude <path>] [--env NAME=VALUE]… [-- <options>]` | The app that opens a site's `abide-bridge` links on this machine, registered. | [44.41](/rulebook#44.41), [44.42](/rulebook#44.42), [44.43](/rulebook#44.43), [44.44](/rulebook#44.44) |
|
|
11296
11296
|
| `abide-bridge uninstall` | `abide-bridge install`, undone. | [44.43](/rulebook#44.43) |
|
|
11297
11297
|
|
package/package.json
CHANGED
package/src/compiler/Lowering.ts
CHANGED
|
@@ -371,7 +371,7 @@ export class Lowering {
|
|
|
371
371
|
*/
|
|
372
372
|
reference(holder: object): string {
|
|
373
373
|
const span = this.spanOf(holder)
|
|
374
|
-
return
|
|
374
|
+
return grouped(this.lowerChunk(span, true))
|
|
375
375
|
}
|
|
376
376
|
|
|
377
377
|
/**
|
|
@@ -383,9 +383,17 @@ export class Lowering {
|
|
|
383
383
|
* A COMPUTED STEP IS EMITTED SOURCE, as 31.8's is: `params[s.k]` writes through `s.k` lowered,
|
|
384
384
|
* so the key is read when the input writes and the get reads it too — the binding follows the
|
|
385
385
|
* key. A `!` is a type and no step. `undefined` for an operand that is not a name followed by
|
|
386
|
-
* steps, which `
|
|
386
|
+
* steps, which `lower` lowers as it stands — save 32.76's optional step, which is refused.
|
|
387
|
+
*
|
|
388
|
+
* IN `lower`, SO THE CHECKER READS THE PAIR THE BUILD EMITS. Taken only where the build asked
|
|
389
|
+
* (`reference`), the shadow lowered the same path as a read, and a component's `bind:` held
|
|
390
|
+
* `__bound` to the string it read — TS2769 on a binding the build compiles and runs.
|
|
387
391
|
*/
|
|
388
|
-
private boundPath(
|
|
392
|
+
private boundPath(
|
|
393
|
+
span: Span,
|
|
394
|
+
origins: Origin[] | undefined,
|
|
395
|
+
base: number,
|
|
396
|
+
): string | undefined {
|
|
389
397
|
const source = this.projection.text
|
|
390
398
|
const text = source.slice(span.start, span.end)
|
|
391
399
|
const from = span.start + (text.length - text.trimStart().length)
|
|
@@ -433,7 +441,20 @@ export class Lowering {
|
|
|
433
441
|
}
|
|
434
442
|
if (segments.length === 0) return undefined
|
|
435
443
|
const name = this.nameOf(read)
|
|
436
|
-
|
|
444
|
+
const open = '{ get: () => '
|
|
445
|
+
origins?.push({ at: base, source: from, length: 0 })
|
|
446
|
+
const got = this.lower(
|
|
447
|
+
{ start: from, end: to },
|
|
448
|
+
false,
|
|
449
|
+
origins,
|
|
450
|
+
base + open.length,
|
|
451
|
+
)
|
|
452
|
+
origins?.push({
|
|
453
|
+
at: base + open.length + got.length,
|
|
454
|
+
source: to,
|
|
455
|
+
length: 0,
|
|
456
|
+
})
|
|
457
|
+
return `${open}${got}, set: (${STORED}) => ${name}.set(${this.use('writePath')}(${name}(), [${segments.join(', ')}], ${STORED})) }`
|
|
437
458
|
}
|
|
438
459
|
|
|
439
460
|
/**
|
|
@@ -567,6 +588,10 @@ export class Lowering {
|
|
|
567
588
|
const text = source.slice(from, to)
|
|
568
589
|
const wholeFrom = from + (text.length - text.trimStart().length)
|
|
569
590
|
const wholeTo = from + text.trimEnd().length
|
|
591
|
+
if (holds) {
|
|
592
|
+
const path = this.boundPath(span, origins, base)
|
|
593
|
+
if (path !== undefined) return path
|
|
594
|
+
}
|
|
570
595
|
const reads = this.answer.reads
|
|
571
596
|
let read = this.answer.firstRead(from)
|
|
572
597
|
if (read === reads.length || (reads[read] as Read).start >= to) {
|
|
@@ -694,6 +694,7 @@ const POSITION_DECLARATIONS = `
|
|
|
694
694
|
declare function ${ON}<Name extends string>(name: Name, handler: ((event: Name extends keyof HTMLElementEventMap ? HTMLElementEventMap[Name] : Event) => unknown) | null | undefined | false): void
|
|
695
695
|
declare function ${ANY}(value: any): void
|
|
696
696
|
declare function ${PROP}<Value>(value: Value): Value
|
|
697
|
+
declare function ${BIND}<Value>(value: { get(): Value; set(value: Value): unknown }): void
|
|
697
698
|
declare function ${BIND}(value: any): void
|
|
698
699
|
declare function ${BOUND}<Value>(value: ${REACTIVE}<Value, any, any, any>): Value
|
|
699
700
|
declare function ${BOUND}<Value>(value: { get(): Value; set(value: Value): unknown }): Value
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// The `abide-bridge` release a pairing command names, so a visitor's `bunx` runs the relay this
|
|
2
2
|
// server speaks. `packages/abide/tests/claudeCode.test.ts` holds it to the bridge package's own.
|
|
3
|
-
export const BRIDGE_VERSION = '0.5.
|
|
3
|
+
export const BRIDGE_VERSION = '0.5.2'
|
|
@@ -560,7 +560,11 @@ function markReaders(cell: Cell, wanted: number): void {
|
|
|
560
560
|
const cap = below.cap
|
|
561
561
|
if (cap !== null && below.body !== null) {
|
|
562
562
|
if (windowHolds(below, cap)) {
|
|
563
|
-
|
|
563
|
+
// 5.15: the held run is a production held back, so `busy` moves as it is owed.
|
|
564
|
+
if (!cap.owed) {
|
|
565
|
+
cap.owed = true
|
|
566
|
+
probesMoved(below)
|
|
567
|
+
}
|
|
564
568
|
// BACK TO CLEAN so the next source production marks it again and re-arms.
|
|
565
569
|
// Left marked it takes this walk's own `state >= wanted` short-circuit,
|
|
566
570
|
// and the changes after the first become invisible to the window.
|
|
@@ -1174,6 +1178,8 @@ function openWindow(cell: Cell, cap: Cap): void {
|
|
|
1174
1178
|
cell.state = DIRTY
|
|
1175
1179
|
cell.direct = false
|
|
1176
1180
|
cascade(cell)
|
|
1181
|
+
// The close is a `busy` edge, as a held production's is.
|
|
1182
|
+
probesMoved(cell)
|
|
1177
1183
|
return
|
|
1178
1184
|
}
|
|
1179
1185
|
// A throttle's window ending with nothing held is the window simply over: the
|
|
@@ -2465,6 +2471,11 @@ let PROBE_PASS = 0
|
|
|
2465
2471
|
*/
|
|
2466
2472
|
function walkBusy(cell: Cell, pass: number): boolean {
|
|
2467
2473
|
if (cell.loading) return true
|
|
2474
|
+
// 5.15 over a body: a run the window owes. Read here rather than written into `loading`,
|
|
2475
|
+
// which a load ending inside the window clears while the run is still owed. Only a value with
|
|
2476
|
+
// sources is ever owed, so `busyNow`'s leaf answer never needs it.
|
|
2477
|
+
const cap = cell.cap
|
|
2478
|
+
if (cap !== null && cap.owed) return true
|
|
2468
2479
|
const adoption = cell.adoption
|
|
2469
2480
|
if (cell.sources.length === 0 && adoption === null) return false
|
|
2470
2481
|
if (cell.probePass === pass) return false
|