Skip to content

Add rich-text, attachment, multi-select fields and input masks - #64

Merged
Ziinc merged 18 commits into
mainfrom
claude/project-thread-au1y46
Oct 12, 2026
Merged

Ziinc merged 18 commits into
mainfrom
claude/project-thread-au1y46

Conversation

@Ziinc

@Ziinc Ziinc commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

Requested by Zn · project thread

  • PRD Phase 6 field kinds: per-column field settings (table designer) drive rich text, multi-select, attachments and Access-style input masks in forms, lists, datasheet and reports
  • Attachment files live in the record store's hidden _ixtable_attachments table (20 MB cap), read via DuckDB with checksums; no new logical types
  • Decision record docs/decisions/field-formats.md; Rust, unit and integration tests pass locally

🤖 Generated with Claude Code

https://claude.ai/code/session_01QWgr5aR41RSBVb1dYrZR12


Generated by Claude Code

…ator

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbiHdEqFVn5g9qhRXNvbiX
…uilds

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbiHdEqFVn5g9qhRXNvbiX
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbiHdEqFVn5g9qhRXNvbiX
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbiHdEqFVn5g9qhRXNvbiX
- PRD §4.5 billing model (per app, org pays, annual = 2 months free, no
  trial, USD from a Singapore sole proprietorship) and §20.3 per-app access.
- Migration: app_collaborators, app_capabilities(_for), capability-based RLS,
  plans.annual_price_cents (check = 10x monthly), subscriptions.billing_interval,
  org_billing_customers.
- Edge Functions: app-access-update; billing-checkout takes interval and
  bills the org's single customer; webhook resolves plan and interval from
  the price; admin checks share app_capabilities_for.
- Website: Access tab, capability-gated read-only tabs, Monthly/Annual toggle
  on Billing and Pricing.
- service-qa contract and UI specs, Deno tests, decision records.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FnMtGVhp92898pMda24XBU
Running sums accumulate a field or calculated value over the rows or group
instances printed so far, over the enclosing group or the whole report.
Text components take conditional formatting rules (bold, text gray, fill)
evaluated with the component's value. A chart component draws bar, line,
area, pie, donut and scatter charts with the dashboard chart data and
geometry, as one chart item of paths and text that preview and PDF draw
alike.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCUeHtApaLW2nLJEdDErJd
src/reports/ matches the reports/ ignore rule, so new files there need
git add -f.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCUeHtApaLW2nLJEdDErJd
Field settings on each entity layer formats on text and JSON columns:
sanitized rich text, attachment files stored in the record store's hidden
_ixtable_attachments table and read through DuckDB, multi-select JSON
arrays, and Access-style input masks checked on entry. Forms, lists, the
datasheet, and table-sourced reports use them; the table designer edits
them. Decision record in docs/decisions/field-formats.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWgr5aR41RSBVb1dYrZR12
@Ziinc Ziinc self-assigned this Oct 10, 2026
Ziinc pushed a commit that referenced this pull request Oct 10, 2026
Requested by the attachment, rich text and input masks work (#64).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCUeHtApaLW2nLJEdDErJd
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWgr5aR41RSBVb1dYrZR12
@Ziinc
Ziinc marked this pull request as ready for review October 10, 2026 21:38
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWgr5aR41RSBVb1dYrZR12
Also label chart components 'bar chart: amount' on the canvas and call
the unchanged condition style 'As is' so it fits its select.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCUeHtApaLW2nLJEdDErJd
… not overlap

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FnMtGVhp92898pMda24XBU

Ziinc commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

Test (windows-latest) failed on 9bf3fca in tests/unit/release-keys.test.ts: "lists every Ed25519 key committed to the repository as a dev key" hit the 5 s timeout while spawning git on the Windows runner (5.6 s). This PR doesn't touch the release-key gate. The commit only relabels the mask input, and the same test passed on all three OSes at the previous head (2e09a95). No fix for the slow git spawn exists yet; a per-test timeout in release-keys.test.ts would be the patch. Re-running the failed job once.


Generated by Claude Code

Ziinc added a commit that referenced this pull request Oct 11, 2026
* Add Phase 6 (Access-feel parity) and Phase 7 (logic parity) to the PRD

Phase 7 moves nested subforms and subreports out of the non-goals and adds
form events (§17.4) and before-change and record-deleted triggers.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF

* Export tables and queries to CSV, XLSX and JSON

Rust streams every matching row from DuckDB to a temp file beside the
destination and renames it into place. Export menus in Data mode, Query
mode and runtime list forms send the current sort and filters. Record:
docs/decisions/data-export.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF

* Record Phase 6 export and Phase 7 subform and trigger decisions in the PRD

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF

* Flush export files through a writable handle so Windows can sync them

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF

* Describe attachment fields in PRD §18 and note multi-select in Phase 6

Requested by the attachment, rich text and input masks work (#64).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF

* Add export screenshots to app QA and fix the Runtime Export button layout

The Export button stacked its icon over its label in Runtime list pagers.
Screenshot captures now place open Radix menus under their trigger, which
jsdom cannot lay out.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MN1PhiYJA6BgX5wynRKDrF

---------

Co-authored-by: Claude <noreply@anthropic.com>
@Ziinc
Ziinc merged commit 6987319 into main Oct 12, 2026
9 checks passed
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