Skip to content

Constructs together: the nine design questions from the combinations check - #67

Merged
jimhoyd merged 4 commits into
mainfrom
claude/project-thread-68irj3
Oct 8, 2026
Merged

jimhoyd merged 4 commits into
mainfrom
claude/project-thread-68irj3

Conversation

@jimhoyd

@jimhoyd jimhoyd commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

What this changes

Before: the combinations check in #66 left nine places where constructs disagreed when used together. A purchase counted twice in the ledger. Things in sub-folders dropped out of views. A sidecar's expires: never reached the calendar. @name worked only on its own in find. A resolved issue's to-dos kept coming due. Edits reformatted lists. Write results carried ciphertext. Organization membership and links disagreed. There were also a few display nits.

After:

  1. Ledger: a thing's price is left out when its purchase event, the one with an amount that links to it, is logged. The purchase is the linking event dated on the thing's purchaseDate, or, when there's no purchaseDate, the one whose amount equals the price in the same currency. A service event that links with its own amount leaves the price counted.
  2. Sub-folders: a collection includes the folders under it in every view, in the CLI and the browser.
  3. Sidecars: a file's sidecar feeds upcoming, reminders, the calendar and .ics. Its links count in related and places.
  4. Saved searches: @name expands anywhere a query is accepted (CLI, MCP, every browser search box) and combines with other terms. An unknown name is a NOT_FOUND error.
  5. Resolved issues: their open to-dos, reminders and repeats leave todos, upcoming, reminders, the calendar and .ics (todos --all still lists them). The browser shows an Open or Resolved issue badge instead of the raw field.
  6. Flow lists: edits keep each file's own style, so [bike] stays [bike] and [ bike ] stays padded.
  7. Write results: they mask sealed values the way reads do (CLI --json and MCP).
  8. Organizations:
    • org: "[Acme](…);Unit" counts as a link everywhere.
    • Membership by name fills orgPath when exactly one organization has that name.
    • Organizations list the things they supplied (things whose vendor: links to them).
  9. Smaller ones:
    • CSV export says when it writes sealed fields. It keeps the ciphertext, so a re-import still works.
    • Links in fields and to-dos display as their text, and the browser links them.
    • An event logged today without a time no longer shows as upcoming.
    • The vCard export opens sealed properties with a key and lists them when there is none.
    • edit --text keeps the # Title unless the new text brings its own.

Why

Jimmy asked to fix the design questions raised by the combinations check (#66).

How it was tested

  • make check passes (typecheck, tests, build, @gitroll/core build, audit): 414 pass, 0 fail, 1 skipped (the CI-only browser presence check), 0 vulnerabilities.
  • Tests added or updated for every behavior change:
    • There are regression tests in test/ledger.test.ts, fields.test.ts, issues.test.ts and entities.test.ts.
    • test/combinations.test.ts is extended. It now moves the e-bike into inventory/bikes/ and the garage into places/home/, then checks every view.
    • Its browser checks cover issue badges, saved searches in a filter box, and links shown as text.

Anything a reviewer should look at closely

  • Format of files in a Roll: SPEC.md now has rules for sub-folder collections, the purchase rule, sidecars on the calendar, and resolved issues on the calendar. No file format changes, and template_version is unchanged.
  • Agent guide: it is now version 10.
  • Mixed list styles: a file that mixes [a] and [ b ] takes the style of its first flow list.
  • orgPath by name only looks in notes/organizations/.
  • A resolved issue's due, warranty or expires fields stay on the calendar. Only to-dos, reminders and repeats are dropped.
  • App.tsx: the diff is mostly re-indentation from a new saved-searches provider. git diff -w shows the real change.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XCVQuXXVJBEB4WExAcfQfD


Generated by Claude Code

claude added 4 commits October 8, 2026 00:43
…n the calendar, @name anywhere, resolved issues stop coming back

- Ledger: a record's price is left out when an event with an amount links
  to it (text or front matter); that event is the purchase. Inventory still
  values the thing by its price.
- Collections include their sub-folders (recordsIn/inCollection), so
  inventory, records, contacts, organizations and places agree, in the CLI
  and the browser; `records` counts sub-folders with each collection.
- Sidecars feed upcoming, reminders, calendar and .ics, count as backlinks
  in related, and put their file at a place (places[].files).
- `@name` expands anywhere a query is taken (every view, MCP, browser
  search boxes), beside other terms; an unknown name is NOT_FOUND.
- A resolved issue's open to-dos, reminders and rrule repeats leave todos,
  upcoming, reminders, calendar and .ics (todos --all still lists them);
  the browser timeline and entry page show its status, not `issue: open`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCVQuXXVJBEB4WExAcfQfD
A record's price is left out only when a linking event with an amount is
its purchase: dated on the record's purchaseDate, or, without one, for
exactly its price in the same currency. A service or repair that links to
the thing with an amount of its own no longer hides its price.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCVQuXXVJBEB4WExAcfQfD
- An edit keeps each file's own flow-list spacing ([bike] or [ bike ]);
  new files are written as before.
- Write results (set, pin, edit, todo, done, close, move, restore, attach,
  remind, resolve, set on a sidecar) mask sealed fields as reads do;
  files --json masks a sidecar's sealed fields.
- org's link part (`[Acme](...);Unit`) is a front matter link everywhere:
  related, backlinks, check, move (and move's relinked count).
- A contact whose org names exactly one organization gets its orgPath.
- Organizations list `supplied`: notes whose vendor links to them, in the
  CLI, JSON and the Organizations page.
- records --csv says when it writes sealed fields as ciphertext.
- Links in fields and to-dos show as their text in the CLI and the
  browser app (linked there); JSON keeps the value.
- An event logged today (no time, or a time past) is not on the calendar,
  upcoming or the .ics: SPEC lists events dated ahead of today.
- contacts --vcf writes sealed properties opened with a key, and says
  which it left out without one.
- edit --text keeps the # Title heading unless the new text has one.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCVQuXXVJBEB4WExAcfQfD
The two sets of fixes met in the integration test: the e-bike had moved
into inventory/bikes/, and a resolved issue's to-dos now only show with
todos --all and stay off Upcoming.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCVQuXXVJBEB4WExAcfQfD
@jimhoyd
jimhoyd merged commit db53473 into main Oct 8, 2026
13 checks passed
@jimhoyd
jimhoyd deleted the claude/project-thread-68irj3 branch October 8, 2026 01:05
@jimhoyd jimhoyd mentioned this pull request Oct 8, 2026
3 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants