wowbagger 0.5.0-beta.0 → 0.5.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.
- package/CHANGELOG.md +59 -0
- package/README.md +145 -81
- package/package.json +1 -1
- package/schemas/report-config-v1.json +4 -0
- package/schemas/report-config-v2.json +5 -0
- package/skills/wowbagger/SKILL.md +7 -5
- package/src/report-evidence.js +158 -41
- package/src/report-graph.js +201 -73
- package/src/report-html.js +358 -155
- package/src/report-impact.js +106 -0
- package/src/report-selection.js +97 -0
- package/src/report-sequencing.js +4 -4
- package/src/report-svg.js +74 -20
- package/src/report-view.js +14 -1
- package/src/report.js +98 -21
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,65 @@ consolidation. The first tagged release inherits this file.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## 0.5.0 - 2026-09-05
|
|
11
|
+
|
|
12
|
+
- **The report is one decision-focused workspace.** Items, Flow, and
|
|
13
|
+
Dependencies sit behind accessible view navigation; only the selected section
|
|
14
|
+
shows, and a reader without scripting keeps every section through anchors and
|
|
15
|
+
native `details`. The duplicated Work next and Attention lists are gone: one
|
|
16
|
+
canonical list carries five quick views (Work next, In progress, Blocked,
|
|
17
|
+
Needs triage, All open), one canonical detail per retained item, a desktop
|
|
18
|
+
list/detail split, and inline details below 1100px. Search plus facet groups
|
|
19
|
+
are the shared scope for the summaries, Flow, and the graph; quick views and
|
|
20
|
+
Show history change only the list. Opening a detail no longer clears the
|
|
21
|
+
search or facets, and a detail opened from Flow or Dependencies returns to
|
|
22
|
+
Items with the scope intact. Missing metadata is its own `Missing` chip,
|
|
23
|
+
distinct from a literal `Unclassified` value, and `tags` is projected as a
|
|
24
|
+
multi-value mapped field with per-field coverage counts.
|
|
25
|
+
- **Concentrations and blockers lead to exact items.** Scoped attention
|
|
26
|
+
actions, an area/status matrix with count and blocked count per cell, and
|
|
27
|
+
scoped members of the existing area-diverse batches each open a labelled
|
|
28
|
+
drilldown of their contributing items. Item details state downstream reach
|
|
29
|
+
and, separately, the items that become ready if done, derived once at
|
|
30
|
+
generation from the complete ledger and exposed to the browser as an
|
|
31
|
+
immutable `impactById`; excluded named-view items never enter it. Core
|
|
32
|
+
readiness and the recommended order are unchanged.
|
|
33
|
+
- **Flow is scoped and interactive.** Flow recomputes in the browser from the
|
|
34
|
+
scoped open and terminal population with inclusive From/To range controls
|
|
35
|
+
that refuse an invalid range visibly while keeping the last valid charts.
|
|
36
|
+
Weekly buckets, aging cells, completion samples, and cumulative date/band
|
|
37
|
+
selections drill into exact contributing items, including now-closed items
|
|
38
|
+
accepted on the selected date. Closures and done are named separately, the
|
|
39
|
+
forecast is computed only when Flow first opens, and an item killed straight
|
|
40
|
+
from triage no longer counts as missing acceptance history.
|
|
41
|
+
- **The graph follows the shared scope.** The graph-only status filter is
|
|
42
|
+
removed; nodes, induced links, labels, and the roster follow the report
|
|
43
|
+
scope, node and roster selections open the canonical detail, and downstream
|
|
44
|
+
and ready-if-done actions drill into the same sets the detail names. The
|
|
45
|
+
graph starts only when Dependencies first opens, pauses while hidden, and
|
|
46
|
+
probes WebGL once. The legend, the WebGL-less roster, reduced motion, the
|
|
47
|
+
vendored bundle pin, and the no-fetch content security policy are unchanged.
|
|
48
|
+
- `scripts/report-design-demo.js` publishes a deterministic, explicitly
|
|
49
|
+
synthetic report through the real pipeline for browser verification.
|
|
50
|
+
- **Stable and prerelease channels are defined.** A stable release sets both
|
|
51
|
+
`latest` and `next` to the stable version; a later prerelease moves only
|
|
52
|
+
`next` while `latest` stays on stable. Publish stable releases with
|
|
53
|
+
`npm publish --tag latest` and prereleases with `npm publish --tag next`.
|
|
54
|
+
- **Release tooling is version-aware.** The cut still proves exact version-site
|
|
55
|
+
equality and never edits the manifest; publication and channel verification
|
|
56
|
+
follow the stable-or-prerelease target state above.
|
|
57
|
+
|
|
58
|
+
The alpha.14 hard cutover remains the baseline: `claim-store-unavailable`
|
|
59
|
+
answers **The durable claim store is unavailable.** with
|
|
60
|
+
`claim-store-unreadable`; upgrade every writer before the first alpha.14 create.
|
|
61
|
+
There is no automatic migration or mixed-version grace period. There is no
|
|
62
|
+
batch mutation. The create-then-commit loop, implemented most briefly as serial
|
|
63
|
+
`create --auto-commit`, remains the supported bulk path. Ledger item #186 records the
|
|
64
|
+
permanent no-batch decision, and item #182 owns existing duplicate numbers.
|
|
65
|
+
The fence adds no new Git roster or history
|
|
66
|
+
traversal and costs two extra fsync'd journal appends within the 65,536-entry
|
|
67
|
+
limit.
|
|
68
|
+
|
|
10
69
|
## 0.5.0-beta.0 - 2026-08-30
|
|
11
70
|
|
|
12
71
|
- Promote Wowbagger from alpha to beta while keeping `next` as the documented
|
package/README.md
CHANGED
|
@@ -30,16 +30,17 @@ agent to use those guarantees instead of hand-editing your Markdown.
|
|
|
30
30
|
|
|
31
31
|
**Start here:** [install the core and set up a ledger](#start-here).
|
|
32
32
|
|
|
33
|
-
> **Status:
|
|
34
|
-
>
|
|
35
|
-
>
|
|
36
|
-
> and can change before the first stable release.
|
|
33
|
+
> **Status: published and self-hosted.** `0.5.0` is published on npm and has
|
|
34
|
+
> a matching repository tag. It is the version this repository runs its own
|
|
35
|
+
> backlog on. The API is stable at core contract version 5.
|
|
37
36
|
>
|
|
38
|
-
> **
|
|
39
|
-
>
|
|
40
|
-
>
|
|
41
|
-
>
|
|
42
|
-
>
|
|
37
|
+
> **Channels.** A stable release sets both `latest` and `next` to the stable
|
|
38
|
+
> version and publishes with `npm publish --tag latest`. A later prerelease
|
|
39
|
+
> moves only `next` and publishes with `npm publish --tag next`, so `latest`
|
|
40
|
+
> stays on the stable release. While every published release is a prerelease,
|
|
41
|
+
> `latest` mirrors `next`: install the prerelease explicitly with
|
|
42
|
+
> `wowbagger@next`. After the first stable release, a bare install resolves
|
|
43
|
+
> to the stable release.
|
|
43
44
|
>
|
|
44
45
|
> **What is proved.** Contract version **5** validates the complete Markdown
|
|
45
46
|
> ledger, selects a deterministic ready queue, exposes bounded `list` and
|
|
@@ -50,11 +51,12 @@ agent to use those guarantees instead of hand-editing your Markdown.
|
|
|
50
51
|
> verification, and publication finalization coordinate cooperating writers
|
|
51
52
|
> without pretending to be an exclusive dispatch lock.
|
|
52
53
|
>
|
|
53
|
-
> `report` is a self-contained
|
|
54
|
-
>
|
|
55
|
-
>
|
|
56
|
-
>
|
|
57
|
-
>
|
|
54
|
+
> `report` is a self-contained decision workspace: one scoped item browser with
|
|
55
|
+
> **Work next** and other quick views, an area/status matrix, scoped attention
|
|
56
|
+
> actions, dependency impact, interactive Flow charts, and a 3D dependency
|
|
57
|
+
> graph that all share one scope. Version 2 report configurations add named
|
|
58
|
+
> custom views whose statistics, readiness, attention, flow, graph, and impact
|
|
59
|
+
> all describe one filtered subset. Reports remain derived output, not mirrored
|
|
58
60
|
> ledger state.
|
|
59
61
|
>
|
|
60
62
|
> The core ships Claude Code, Codex, and OpenCode adapter packages on one shared
|
|
@@ -77,7 +79,7 @@ Wowbagger is the core authority for a Git-native work ledger. Use it instead
|
|
|
77
79
|
of editing ledger Markdown by hand.
|
|
78
80
|
|
|
79
81
|
```sh
|
|
80
|
-
wowbagger --version # require 0.5.0
|
|
82
|
+
wowbagger --version # require 0.5.0
|
|
81
83
|
wowbagger capabilities --json # require contract_version: 5
|
|
82
84
|
wowbagger validate --ledger ledger --json
|
|
83
85
|
wowbagger ready --ledger ledger --as-of YYYY-MM-DD --json
|
|
@@ -104,10 +106,11 @@ Install the core CLI, then verify it. The supported runtime is Node.js 24; Node
|
|
|
104
106
|
26 remains excluded because of the separate Vitest incompatibility:
|
|
105
107
|
|
|
106
108
|
```sh
|
|
107
|
-
npm install -g wowbagger@
|
|
109
|
+
npm install -g wowbagger@latest # stable release
|
|
110
|
+
npm install -g wowbagger@0.5.0 # exact plugin-matched release
|
|
108
111
|
# or, from this release's Git tag:
|
|
109
|
-
# npm install -g github:lstutzman/wowbagger#v0.5.0
|
|
110
|
-
wowbagger --version # 0.5.0
|
|
112
|
+
# npm install -g github:lstutzman/wowbagger#v0.5.0
|
|
113
|
+
wowbagger --version # 0.5.0
|
|
111
114
|
wowbagger capabilities --json # must report contract_version: 5
|
|
112
115
|
```
|
|
113
116
|
|
|
@@ -334,7 +337,7 @@ Four separate things, deliberately:
|
|
|
334
337
|
|
|
335
338
|
The core and the plugin install independently and must carry matching
|
|
336
339
|
distribution versions. The core contract version and the adapter contract
|
|
337
|
-
version are separate domains: the core is at **
|
|
340
|
+
version are separate domains: the core is at **5**, the adapter is at **2**, and
|
|
338
341
|
the legacy work-claim, ledger-publication, and ledger-mutation envelopes stay at
|
|
339
342
|
**1**.
|
|
340
343
|
|
|
@@ -345,12 +348,14 @@ the legacy work-claim, ledger-publication, and ledger-mutation envelopes stay at
|
|
|
345
348
|
Wowbagger ships as an npm package with a single `wowbagger` binary. There are
|
|
346
349
|
two supported install routes:
|
|
347
350
|
|
|
348
|
-
- **npm registry** — `npm install -g wowbagger
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
bytes.
|
|
351
|
+
- **npm registry** — `npm install -g wowbagger` installs the stable release
|
|
352
|
+
once it exists; `npm install -g wowbagger@next` installs the newest
|
|
353
|
+
prerelease. While every published release is a prerelease, `latest` mirrors
|
|
354
|
+
`next`, so a bare install resolves to the same bytes. After the first
|
|
355
|
+
stable release, `latest` stays on stable and only `next` follows later
|
|
356
|
+
prereleases.
|
|
352
357
|
- **git tag** —
|
|
353
|
-
`npm install -g github:lstutzman/wowbagger#v0.5.0
|
|
358
|
+
`npm install -g github:lstutzman/wowbagger#v0.5.0` installs this
|
|
354
359
|
release. Installing at a ref installs the core and every adapter that ref
|
|
355
360
|
carries.
|
|
356
361
|
|
|
@@ -373,8 +378,9 @@ sending the request and reading the refusal — an `unknown-member` issue at
|
|
|
373
378
|
`/set/body_append` means the core predates the append — or pin the distribution
|
|
374
379
|
version.
|
|
375
380
|
|
|
376
|
-
- **Node.js:**
|
|
377
|
-
20
|
|
381
|
+
- **Node.js:** 24 and later. The release gate runs the full suite on Node
|
|
382
|
+
24.20.0 with the strict deprecation gate; Node 26 stays excluded because of
|
|
383
|
+
the separate Vitest incompatibility.
|
|
378
384
|
- **Platforms:** the core runs wherever Node.js runs. The Claude Code adapter
|
|
379
385
|
declares Darwin, Linux, and Windows `supported` from native common-vector
|
|
380
386
|
evidence. Every other shipped adapter target remains `unverified`.
|
|
@@ -421,8 +427,8 @@ wowbagger core, this is how you move forward safely.
|
|
|
421
427
|
Upgrade the pieces you installed:
|
|
422
428
|
|
|
423
429
|
```sh
|
|
424
|
-
npm install -g wowbagger@
|
|
425
|
-
npm install -g github:lstutzman/wowbagger#v0.5.0
|
|
430
|
+
npm install -g wowbagger@latest # public npm registry
|
|
431
|
+
npm install -g github:lstutzman/wowbagger#v0.5.0 # immutable Git release
|
|
426
432
|
git pull && npm ci # or: a direct checkout
|
|
427
433
|
```
|
|
428
434
|
|
|
@@ -445,7 +451,7 @@ distribution versions equal.
|
|
|
445
451
|
|
|
446
452
|
The shipped adapter selects only adapter contract version 2 and requires core
|
|
447
453
|
contract version 5. The adapter contract and the core contract are separate
|
|
448
|
-
version domains: the adapter stays at 2 while the core
|
|
454
|
+
version domains: the adapter stays at 2 while the core is at 5. A v1-only
|
|
449
455
|
consumer receives `unsupported-adapter-contract-version`; it does not receive v2
|
|
450
456
|
behavior. The schema-2 transport is available. Ledger migration remains a
|
|
451
457
|
separate quiesced maintenance operation. The
|
|
@@ -920,62 +926,108 @@ relative `--out` overrides resolve from the caller's working directory.
|
|
|
920
926
|
"complexity": "/complexity",
|
|
921
927
|
"rank": "/priority_rank",
|
|
922
928
|
"class": "/class",
|
|
923
|
-
"due": "/due"
|
|
929
|
+
"due": "/due",
|
|
930
|
+
"tags": "/tags"
|
|
924
931
|
},
|
|
925
932
|
"swarm": { "eligible_complexities": ["small", "medium"] }
|
|
926
933
|
}
|
|
927
934
|
```
|
|
928
|
-
|
|
929
935
|
`repository.logo`, `fields`, and `swarm` are optional. Field values resolve
|
|
930
936
|
from parsed frontmatter with RFC 6901 JSON Pointers. A swarm requires mapped
|
|
931
937
|
`area` and `complexity` fields. The report fetches nothing at view time.
|
|
932
938
|
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
939
|
+
`tags` is the one multi-value mapped field. It accepts a nonempty string or an
|
|
940
|
+
array holding only nonempty strings: a scalar reads as a one-tag set, exact
|
|
941
|
+
duplicates collapse, and values sort deterministically. The mapping never
|
|
942
|
+
splits commas, lowercases values, coerces objects, or partially accepts a
|
|
943
|
+
mixed-type array. An empty array counts as missing; any other rejected value
|
|
944
|
+
is omitted from the item and counted as invalid metadata. `area` stays scalar.
|
|
945
|
+
The model carries `fieldCoverage`, one entry per configured field plus `area`
|
|
946
|
+
and `tags` when unmapped, ordered by field name with `present`, `missing`, and
|
|
947
|
+
`invalid` counts over the retained report population. An unmapped field counts
|
|
948
|
+
every retained item as missing, and a visible missing-mapping notice tells an
|
|
949
|
+
unconfigured mapping apart from missing item values. Missing metadata never
|
|
950
|
+
matches a filter value: there is no `Unclassified` bucket, so a filter for a
|
|
951
|
+
literal `Unclassified` tag matches only items really carrying that tag.
|
|
952
|
+
|
|
953
|
+
The report is a **decision-focused workspace**, not a state snapshot. It has
|
|
954
|
+
three sections behind accessible view navigation: **Items** (the default),
|
|
955
|
+
**Flow**, and **Dependencies**. Only the selected section is visible when
|
|
956
|
+
scripting runs; without scripting, every section stays readable through its
|
|
957
|
+
anchor and native `details` elements, and the artifact states its fixed scope.
|
|
958
|
+
|
|
959
|
+
Items opens with the state counts, then a sticky control strip: search, five
|
|
960
|
+
quick views (**Work next**, **In progress**, **Blocked**, **Needs triage**, and
|
|
961
|
+
**All open**), and the display controls (grouping, sorting, Basic/Standard/
|
|
962
|
+
Detailed, Show history, Expand all, Collapse all). Below 1100px the display
|
|
963
|
+
controls fold behind a **Display** toggle so search and quick views stay in
|
|
964
|
+
reach. Search and the facet groups form the **scope**; the scope narrows the
|
|
965
|
+
summaries, Flow, and Dependencies alike. Quick views and Show history change
|
|
966
|
+
only the list. Work next keeps its recommended order and prints the reasons
|
|
967
|
+
beside each row; any other sort presents itself as that sort.
|
|
968
|
+
|
|
969
|
+
There is one list and one canonical detail per retained item. Desktop widths
|
|
970
|
+
use a list/detail split; narrower widths show the selected detail inline.
|
|
971
|
+
Opening a detail never clears the search, the facets, or the list position, and
|
|
972
|
+
a detail opened from Flow or Dependencies returns to Items with the scope
|
|
973
|
+
intact. Expand all acts on visible rows only.
|
|
974
|
+
|
|
975
|
+
The **filters** are facet groups: Readiness, Status, Kind, Priority, and one
|
|
976
|
+
group for every configured mapped field, each a fieldset of checkbox chips
|
|
977
|
+
behind a collapsed **Filters** control. Values inside a group are alternatives
|
|
978
|
+
and groups narrow each other; the search box is one more condition on the same
|
|
979
|
+
answer. Every chip carries the count it would leave, measured against the
|
|
980
|
+
search and the other groups but never against its own. Missing metadata is its
|
|
981
|
+
own **Missing** chip, distinct from a literal `Unclassified` value. The result
|
|
982
|
+
count states how much of the retained set is showing, and **Clear filters**
|
|
983
|
+
gives every selection back.
|
|
984
|
+
|
|
985
|
+
Above the list sit scoped summaries that open exact contributing items through
|
|
986
|
+
a labelled drilldown pill: attention actions (in progress, blocked, needs
|
|
987
|
+
triage, oldest, and started work past this ledger's own 85th-percentile cycle
|
|
988
|
+
time), an **area/status matrix** with count and blocked count per cell, and
|
|
989
|
+
**Scoped members of existing batches**, which intersects the area-diverse
|
|
990
|
+
batches with the scoped ready set and omits empty batches. Each item detail
|
|
991
|
+
states its **downstream reach** (transitive dependents in the report) and,
|
|
992
|
+
separately, the items that become **ready if done**; neither alters core
|
|
993
|
+
readiness or the recommended order.
|
|
994
|
+
|
|
995
|
+
### Flow
|
|
996
|
+
|
|
997
|
+
Flow recomputes from the scoped open and terminal population in the browser:
|
|
998
|
+
cumulative flow, weekly arrivals against closures with done counted
|
|
999
|
+
separately, throughput with a four-week mean, current aging by status,
|
|
1000
|
+
acceptance-to-completion samples, and the closure forecast. Inclusive **From**
|
|
1001
|
+
and **To** controls default to the twelve-week window; a start after the end,
|
|
1002
|
+
or an end after the report date, is refused with a visible error while the last
|
|
1003
|
+
valid charts stay. Weekly buckets, aging cells, completion samples, and
|
|
1004
|
+
cumulative date/band selections each drill into the exact contributing items,
|
|
1005
|
+
and the accessible tables offer the same actions. The forecast is computed only
|
|
1006
|
+
when Flow first opens and cached by cohort and range. Missing acceptance history
|
|
1007
|
+
is stated as reconstruction uncertainty; an item killed straight from triage is
|
|
1008
|
+
complete history, not a gap. The fixed server-rendered charts remain for
|
|
1009
|
+
readers without scripting, each with `role="img"` and an aria-label that states
|
|
1010
|
+
its finding in words.
|
|
960
1011
|
|
|
961
1012
|
### The ledger graph
|
|
962
1013
|
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
nodes, every link that touched one of them, and their labels
|
|
975
|
-
reheats the layout in place
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
1014
|
+
Dependencies draws the scoped items as a force-directed 3D graph. Every item is
|
|
1015
|
+
a node, labelled `#N`, coloured by readiness for open items and by terminal
|
|
1016
|
+
status for closed ones, and sized by the same transitive unblocking leverage the
|
|
1017
|
+
recommended order uses. Edges run from a prerequisite or a parent to the item
|
|
1018
|
+
it releases: a `depends_on` edge is straight and arrowed, a `parent` edge is
|
|
1019
|
+
curved and unarrowed. Hovering a node opens a card with its number, title,
|
|
1020
|
+
status, age, leverage, and reasons; clicking it, or a roster row, opens the
|
|
1021
|
+
canonical detail in Items. Downstream and ready-if-done actions on the roster
|
|
1022
|
+
drill into the same sets the detail names.
|
|
1023
|
+
|
|
1024
|
+
The graph has no filter of its own: it follows the shared scope, so a scope
|
|
1025
|
+
change drops nodes, every link that touched one of them, and their labels
|
|
1026
|
+
together, then reheats the layout in place. A hidden blocker never turns a
|
|
1027
|
+
retained item ready, because readiness is projected over the complete ledger
|
|
1028
|
+
before any view narrows it. The graph starts only when Dependencies first
|
|
1029
|
+
opens, pauses while another section is shown, and an empty scope draws an
|
|
1030
|
+
empty graph that says so.
|
|
979
1031
|
|
|
980
1032
|
The renderer is [`3d-force-graph`](https://github.com/vasturiano/3d-force-graph)
|
|
981
1033
|
over Three.js, vendored into `vendor/3d-force-graph/` at a pinned version
|
|
@@ -1018,9 +1070,10 @@ weight and is shown as written.
|
|
|
1018
1070
|
### Named custom report views
|
|
1019
1071
|
|
|
1020
1072
|
A named custom view is a second self-contained report generated from the same
|
|
1021
|
-
complete ledger. Every section of it — statistics, **Work next
|
|
1022
|
-
|
|
1023
|
-
the
|
|
1073
|
+
complete ledger. Every section of it — statistics, **Work next** and the other
|
|
1074
|
+
quick views, the **Attention** summaries and area/status matrix, dependency
|
|
1075
|
+
impact, Flow, the graph, the drill-down pill, terminal history, and the
|
|
1076
|
+
swarm batches — describes one configured subset, so the file is honest to
|
|
1024
1077
|
share as a scoped report. Excluded items are absent from the bytes rather than
|
|
1025
1078
|
hidden by a stylesheet. The base report stays available and unchanged.
|
|
1026
1079
|
|
|
@@ -1085,9 +1138,10 @@ A `fields` key must also be a configured report field. Each field filter is a
|
|
|
1085
1138
|
non-empty array of unique JSON strings, finite numbers, or booleans, and matching
|
|
1086
1139
|
preserves JSON scalar type and value: stringification is not equality, so a
|
|
1087
1140
|
mapped `2` does not answer a filter for `"2"`. An item carrying no mapped value
|
|
1088
|
-
for a field matches no value selected for that field.
|
|
1089
|
-
|
|
1090
|
-
|
|
1141
|
+
for a field matches no value selected for that field. A `tags` filter uses
|
|
1142
|
+
any-member matching, so one item carrying two tags answers either tag. No
|
|
1143
|
+
title-text inference, regular expression, arbitrary JSON pointer, or body
|
|
1144
|
+
search belongs in a view filter.
|
|
1091
1145
|
|
|
1092
1146
|
Wowbagger validates the complete ledger and computes readiness against the
|
|
1093
1147
|
complete ledger before it filters, so excluding a blocker never makes blocked
|
|
@@ -1151,6 +1205,16 @@ current UTC date:
|
|
|
1151
1205
|
npm run report -- --as-of YYYY-MM-DD
|
|
1152
1206
|
```
|
|
1153
1207
|
|
|
1208
|
+
If you verify the report in a browser from a checkout, generate a deterministic
|
|
1209
|
+
synthetic report through the real pipeline:
|
|
1210
|
+
|
|
1211
|
+
```sh
|
|
1212
|
+
node scripts/report-design-demo.js --out /private/tmp/wowbagger-report-demo.html --items 40
|
|
1213
|
+
```
|
|
1214
|
+
|
|
1215
|
+
That output is synthetic and checkout-only: it describes fixed demo data,
|
|
1216
|
+
never this repository's ledger.
|
|
1217
|
+
|
|
1154
1218
|
## Where the contracts live
|
|
1155
1219
|
|
|
1156
1220
|
The README is the map. These are the territory, and they are normative where
|
|
@@ -1330,7 +1394,7 @@ It is the durable work ledger beneath those systems.
|
|
|
1330
1394
|
**Shipped: the policy-input contract and the report's mapped fields keep
|
|
1331
1395
|
consumer vocabulary out of the schema.**
|
|
1332
1396
|
- Stabilize the machine-readable command contract and compatibility evidence.
|
|
1333
|
-
**
|
|
1397
|
+
**Shipped: core contract version 5 is the stable contract.**
|
|
1334
1398
|
- Ship Claude Code and Codex adapters. **Claude Code, Codex, and OpenCode
|
|
1335
1399
|
packages share the version 2 engine; the Claude Code manifest declares Darwin
|
|
1336
1400
|
`supported` after passing all 212 native assertions. Other adapter targets and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wowbagger",
|
|
3
|
-
"version": "0.5.0
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Git-native work ledger for coding agents: deterministic ready queues, guarded CAS mutations, claims and fencing, and self-contained HTML reports.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,6 +45,10 @@
|
|
|
45
45
|
"type": "string",
|
|
46
46
|
"pattern": "^(/([^/~]|~[01])*)*$"
|
|
47
47
|
},
|
|
48
|
+
"tags": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^(/([^/~]|~[01])*)*$"
|
|
51
|
+
},
|
|
48
52
|
"class": {
|
|
49
53
|
"type": "string",
|
|
50
54
|
"pattern": "^(/([^/~]|~[01])*)*$"
|
|
@@ -189,6 +193,7 @@
|
|
|
189
193
|
"propertyNames": {
|
|
190
194
|
"enum": [
|
|
191
195
|
"area",
|
|
196
|
+
"tags",
|
|
192
197
|
"class",
|
|
193
198
|
"due",
|
|
194
199
|
"rank",
|
|
@@ -14,7 +14,7 @@ publish something.
|
|
|
14
14
|
Install the core separately before using this skill:
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
|
-
npm install -g wowbagger@0.5.0
|
|
17
|
+
npm install -g wowbagger@0.5.0
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
The core requires Node.js 24 or later. This plugin ships only agent
|
|
@@ -38,9 +38,9 @@ wowbagger capabilities --json
|
|
|
38
38
|
|
|
39
39
|
Read the plain distribution version from the first command and the top-level
|
|
40
40
|
`contract_version` from the second. **This skill requires distribution version
|
|
41
|
-
`0.5.0
|
|
41
|
+
`0.5.0` and core `contract_version: 5`.**
|
|
42
42
|
|
|
43
|
-
The distribution pin names the published `0.5.0
|
|
43
|
+
The distribution pin names the published `0.5.0` release; the cut that
|
|
44
44
|
publishes core `contract_version: 5` moves it. Earlier cores report
|
|
45
45
|
`contract_version: 3` or lower and lack behavior this skill requires, including
|
|
46
46
|
the bounded item source, so the version check refuses them. Do not soften
|
|
@@ -146,8 +146,10 @@ the absolute `result.output`. On failure, require `ok: false` and inspect
|
|
|
146
146
|
publication preserves the prior report. Do not parse the generated HTML and do
|
|
147
147
|
not parse human output: the JSON result is the only machine surface.
|
|
148
148
|
|
|
149
|
-
The report
|
|
150
|
-
|
|
149
|
+
The report is one shared Items, Flow, and Dependencies workspace. The
|
|
150
|
+
Dependencies section holds the 3D dependency graph of the items the artifact
|
|
151
|
+
covers, under the same scope as Items and Flow. Its renderer is a pinned,
|
|
152
|
+
checksummed `3d-force-graph` build
|
|
151
153
|
vendored at `vendor/3d-force-graph/` and inlined at generation time, so the
|
|
152
154
|
report is still one self-contained file that fetches nothing — it is roughly
|
|
153
155
|
1.3 MB larger for it. A browser without WebGL shows the graph section's plain
|