Commit Graph
75 Commits
Author SHA1 Message Date
james.maesandClaude Fable 5.1 d81c05352b feat(core): print table lists and text through the printing qbit
printTableList sends a grid's table, columns, widths, filter and sort with
the scope (all rows, this page, or selected rows) to printingPrintTableList
and passes the server's row-limit note on; printText prints text such as a
screen capture. listScopeChoices orders a grid's print choices: all rows
first when the grid is filtered or small, this page first otherwise, the
10,000-row limit named, and the selection as a list or as record sheets.
The client document's printing entry moves to 2.1.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 06:53:28 -06:00
james.maesandClaude Fable 5.1 5cf62430aa feat(client): carry the printing 2.0.0 extension document
Appends qbit-printing's committed extension document (printing 2.0.0,
17 operations under /qbit/printing) to the client document with
merge-spec.mjs, keeping the other documents untouched, and regenerates the
schema and operation index (219 operations). The registry knows printing
with minimum 2.0.0: the realtime channel became the agent's prerequisite
there, so a 1.x server counts as not installed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 05:49:03 -06:00
james.maesandClaude Fable 5.1 536d0b37cd docs: record the enterprise sweep fixes and the -o convention for 1.0.0
CHANGELOG 1.0.0 gains the -o/--order convention with its migration note
and the extension table output under "Changed since 1.0.0-rc.1", and the
ESB trigger, login profile, health fallback and conformance fixes under a
new "Fixed since 1.0.0-rc.1". README, the cli and conformance package
READMEs, TRY-IT, the 1.0.0 release notes and the parity matrix (and its
generator) use --order for the sort and -o/--out for files.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 05:27:39 -06:00
james.maesandClaude Fable 5.1 0d62416f08 ci: turn on the macOS arm64 and Windows x64 lanes of qqq-orb 0.8.33
The CLI ships for macOS and Windows and has Keychain and DPAPI keyring
paths, but CI only ran Linux. qqq-orb 0.8.33 adds opt-in platform lanes to
the cli profile, and the setup config's 0.8 track picks the release up by
itself, so the manifest only needs platforms: [macos-arm64, windows-x64].

Rendered with the orb's generate_pipeline.py from v0.8.33 against this
manifest: a push to main yields cli-macos-arm64, cli-windows-x64 and
cli_verify_publish; the tag v1.8.0 yields the same in publish_release with
the publish job requiring both lanes and bound to the registry context.

ci-lanes.md now describes what runs (and that the lanes cover the Node
packages' build, tests and lint, not the binaries or the TUI), keeping the
0.8.32 gap list and proposal as history. The runbook marks the orb item
done, says a missing macOS or Windows resource class now holds a publish,
and no longer claims the Windows lane runs verify-binary.ps1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 04:34:29 -06:00
james.maesandClaude Fable 5.1 7fed5590bf docs: index docs/ and bring release docs to the final 1.0.0 wording
docs/ had no index, so a reader could not tell the runbook from the
historical plans. docs/README.md now describes every file under docs/.

The runbook, ci-lanes and 1.0.0 release notes still spoke as if rc.1
were pending and left the Scoop bucket undecided. They now name
QRun-IO/homebrew-tap and QRun-IO/scoop-bucket, state that the 1.0.0
version step is done on release/1.0.0, note what qqq-orb PR #165 changes
about publishing, describe the installer's stable default, and the
release notes list the Homebrew and Scoop commands. The generic rc-to-final
recipe keeps its -rc.N placeholders on purpose.

Two links in parity/next-feature-matrix.md pointed at files that exist
only in qqq-frontend-next; they now use absolute GitHub URLs. Its content
is otherwise untouched. Every relative Markdown link now resolves.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 04:21:43 -06:00
james.maesandClaude Fable 5.1 5563f2f393 build(packaging): make the tap and bucket drafts pass their CI and lint
The homebrew-tap profile's validator rejects a setup caller that runs on
tags, so the tap's .circleci/config.yml is now byte-for-byte the one in
QRun-IO/homebrew-qctl (tags: ignore). brew style flags a formula without
the frozen_string_literal magic comment, so it is added; the 64-hex zero
placeholders stay so scripts/update-packaging.mjs still fills them.

The formula and Scoop manifest placeholders now name 1.0.0 instead of
1.0.0-rc.1, and the packaging notes name QRun-IO/scoop-bucket, say that
the tap's CI executes only the Linux x64 binary (macOS downloads are
fetched and checksummed, not run), and that the bucket uses the
ScoopInstaller BucketTemplate Actions with Excavator auto-updating on new
cli-v* releases.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 04:20:07 -06:00
james.maesandClaude Fable 5.1 34bbd2a317 release: 1.0.0 (client 1.8.0, core 1.0.0, conformance 1.6.0, cli 1.0.0)
All four packages go final together, with the exact workspace pins, so
the orb publishes them as latest. The CHANGELOG's rc.1 entry becomes
"## [1.0.0] - YYYY-MM-DD" (date to fill in on release day),
docs/release-notes/1.0.0.md is the release body with the final sequence
(tags v1.8.0 and cli-v1.0.0, gh release --latest, dist-tag latest), the
README, the CLI README and TRY-IT drop the rc version and @rc, and the
runbook says this branch is fast-forwarded onto main the day rc.1
feedback is accepted. node scripts/release.mjs --check is READY for
1.0.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 21:56:39 -05:00
james.maesandClaude Opus 5.5 ebe700bcba tui: adorned grid cells, text primary keys on create; verified live on the qqq fix branch
Found on the fix-branch sample (8bf6a5a66, private server on 8091): grid
cells showed REVEAL secrets and raw RENDER_HTML; they are now drawn like the
record view (masked, text, CHIP brackets). A WIDGET-adorned field with a
plain value shows the value. Create forms ask for a text primary key (the
archive table's file name) and leave out generated numeric keys. Parity
notes record what was verified live there: weekday criteria (QRY-085
pass), case-insensitive matching, AdornmentLab adornments, the composite
association, the locker refusal, uploads and downloads, sharing, saved
report setup, help. NAV-030 and PRC-020 stay blocked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 21:49:37 -05:00
james.maesandClaude Fable 5.1 ad09a469f3 release: draft notes for the GitHub release of 1.0.0-rc.1
docs/release-notes/1.0.0-rc.1.md is the user-facing release body (install
table, the Gatekeeper and SmartScreen notes, getting started, what is in
it, known limitations), with the exact rc.1 command sequence for James
in an HTML comment that GitHub does not render. release.mjs prints
--notes-file with that file when one exists for the version, else the
CHANGELOG section.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 21:44:18 -05:00
james.maes e6f70b2a81 Merge branch 'feat/m1-kernel-cli' into feat/m3-tui
# Conflicts:
#	docs/parity/feature-matrix.md
2026-10-31 20:43:25 -05:00
james.maesandClaude Opus 5.5 f7ff7b8516 tui: soak test, theme per profile, 1.0 docs read-through; SEC-030 blocked
scripts/soak.sh drives the real TUI in tmux with random keys from the keymap
(F-keys, arrows, paging, Tab, Esc, Enter, single keys, : commands) and fails
on an exit or an error boundary, keeping the last 20 frames; nothing that
quits, saves, confirms a delete or exports is sent (QQQ_UI_NO_QUIT=1 ignores
a Quit chosen from a menu). The theme picker keeps a theme for every profile
or this one. README and TRY-IT: options, environment, per-screen keys, the
settings file, themes. SEC-030 is blocked on qqq-cli#10 and qqq#1359.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 20:41:22 -05:00
james.maesandClaude Fable 5.1 f16b61f496 merge follow-up: keep the TUI's setup-widget pairs and sharing module, finding 28 linked
The base brought its own sharing module, a manageSession password sign-in and render-model
additions. The CLI now uses records/sharing.ts for qqq share, keeps its sessionId-cookie sign-in
as signInWithPasswordCookie next to the TUI's signInWithPassword, and the render model keeps both
sides: the web's wording and empty states from this branch, the TUI's pairs for the saved report
setup widgets (saved-report show still words them as the web does), its bar-chart default,
fieldValueList indents and block markers. Finding 28 is qqq#1359; SEC-030 also cites qqq-cli#10.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 20:40:22 -05:00
james.maes 6f52f6283d Merge branch 'feat/m1-kernel-cli' into feat/m1-cli-parity
# Conflicts:
#	docs/parity/feature-matrix.md
#	packages/core/src/widgets/render-model.ts
2026-10-31 20:36:49 -05:00
james.maesandClaude Fable 5.1 7bdf116010 core+cli: dashboards, widgets as the web renders them, home and find, reports, saved reports, sharing
The navigation, widget and report rows were the last open CLI rows. The kernel render model now
follows the web's widget contracts (multiStatistics values, location, usaMap, generic, cronUI,
dynamicForm, pivot and filter setups, rowBuilder, every composite block, table extras, chrome,
empty states, the dropdown message), and a loader fetches widgets as ConnectedWidget does:
metadata first (unknown or denied widgets cost no request), parent widgets load their children,
data bag and script viewers read their records, dashboards load every widget once at once.

On top: qqq home, qqq find, apps show --widgets, widget get --record/--run; report run through
the report's process (input fields, GET /download) or the report route; qqq saved-report
(show, preview incl. through an application API, run, set filter/sort/columns, pivot, schedule)
and qqq share for any shareable record. A WIDGET-adorned filter field in a process takes the
filter grammar. Printed filters no longer mark case-sensitive matches (the TUI builds criteria
without options, and its footers must not change).

The sample has no reports, saved reports or editor widgets; stub-server CLI tests cover them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 20:31:14 -05:00
james.maesandClaude Opus 5.5 d0dab57f73 tui: AUTH_0 sign-in, help slots and authoring keys, column help, PRF-001 timings; parity re-scored
AUTH_0 signs in in the browser (authorization code + PKCE with the API
audience, code exchanged at the tenant, the token handed to manageSession)
and can end the Auth0 session on sign-out. F1 uses the kernel's help
entries (app, widget, instance, table, process, step) with readable places;
:helpkeys shows every help slot key. The grid footer shows the column's
help. scripts/perf-large-table.sh times a 10,000 x 40 table on the fake
large-instance server: first page ~100 ms, record 10,000 ~40 ms, column 40
~350 ms. Parity: TUI 330 pass, 67 n/a, 3 blocked, 1 todo (SEC-030: needs a
real Auth0 tenant).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 20:30:18 -05:00
james.maesandClaude Fable 5.1 d62b6cd9d3 client+core+cli: TABLE_BASED sign-in, AUTH_0 audience, DISABLED tables and processes
TABLE_BASED servers could not be signed in to at all. The server's TableBasedAuthenticationModule
accepts HTTP Basic credentials on any route, inserts a session and answers with a sessionId
cookie; qqq login --username now does that once (password asked, or QQQ_PASSWORD), keeps only
the session and sends it as the sessionId cookie, which the typed client could not do, so the
CLI wraps its fetch. A refused password stores nothing; logout ends the session.

AUTH_0 servers were refused by the native sign-in discovery. The client now builds the sign-in
from the tenant, the native (or SPA) client id and the audience, which Auth0 needs to issue a JWT
the server can verify. No AUTH_0 server exists to run it against (finding 28).

DISABLED tables and processes come in the metadata with their permissions false; the CLI lists
them with the reason and refuses query, writes, copy (insert needed), bulk commands and process
run before any request, as the web explains the denial.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 20:15:00 -05:00
james.maesandClaude Fable 5.1 61c3a5694e core+cli: text matches send CASE_INSENSITIVE by default; findings 26 and 27
qqq ruled that CONTAINS, STARTS_WITH and ENDS_WITH are case-sensitive by design (finding 11,
qqq#1344) and that clients opt in per criterion with CriteriaOption.CASE_INSENSITIVE. The
grammar and quick search now add the option to every text match; ~= , OPERATOR:CS and
--case-sensitive ask for a case-sensitive match, and printed filters mark those with :CS.

The option does not reach the backend over v1 yet: QFilterCriteriaDeserializer ignores
options and the spec does not declare them (finding 27), so matching stays case-sensitive
until the server reads it. Finding 26 records the bulk mapping suggester problem the kernel
works around (it was cited as finding 11 by mistake).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 20:07:56 -05:00
james.maes 1bc1e4d122 Merge branch 'feat/m1-kernel-cli' into feat/m3-tui 2026-10-31 20:03:51 -05:00
james.maesandClaude Fable 5.1 21a1fa94ca docs: record/query/process parity rows, TRY-IT commands, plan checkpoint 2
The CLI column moves to 232 pass, 2 blocked (finding 19 for variant writes, finding 24 for
weekday criteria on H2) and 1 partial (NAV-028, navigation group next). Rows the sample cannot
exercise say unit-tested or stub-server tested in their note.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:58:52 -05:00
james.maesandClaude Opus 5.5 9e71723184 tui: bulk wizard on the kernel's runBulkProcess
Bulk insert and bulk edit with a file (file navigator upload, column mapping
grid with typed defaults and field help, value mapping with the picker,
review with optional validation, result), bulk edit (switched-on fields) and
bulk delete; saved bulk load profiles (yours and shared, owner-only update
after a confirm listing the changes, delete); the upload template; table
actions list the bulk actions with their CLI commands. Verified live on the
sample: 2 person rows loaded from CSV, bulk edited, bulk deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 19:54:50 -05:00
james.maes 69006beb5f Merge branch 'feat/m1-kernel-cli' into feat/m1-cli-parity
# Conflicts:
#	docs/parity/feature-matrix.md
#	docs/server-findings.md
#	scripts/parity-matrix.py
2026-10-31 19:40:12 -05:00
james.maesandClaude Fable 5.1 c798a0e0c4 docs+tests: bulk load parity rows, TRY-IT bulk section, stub-server CLI tests
The bulk rows (PRC-016, 029-034, 046, 058-061, QRY-031/032/034) are verified live against the
sample, except saved profiles, which the sample does not offer: those are covered by a stub-server
CLI test. The matrix script gains a blocked status (a note must cite a server finding) so the
release gate can tell a server limitation from unfinished work.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:37:47 -05:00
james.maesandClaude Opus 5.5 6d649741a5 docs: finding 24 links qqq#1355; QRY-085 blocked on it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 19:37:32 -05:00
james.maes 14b1c8a351 Merge branch 'feat/m1-kernel-cli' into feat/m1-cli-parity 2026-10-31 19:35:55 -05:00
james.maes 41219523db Merge branch 'feat/m1-kernel-cli' into feat/m3-tui 2026-10-31 19:34:53 -05:00
james.maesandClaude Fable 5.1 2f6d9cdb41 tui: record value widths from the field types; parity: the partials re-scored
Record view value columns start from the field set (DATE_TIME 30, dates,
numbers, text length) as well as the first record, so an empty first
record no longer cuts later values; still fixed while stepping.

Parity TUI column: the partials resolved: passes (live or unit-tested, said
in each note), browser-only n/a with the reason (icon fonts, logos, URL
state, rich-text and code editors), and blocked on server findings 13
(cancel keeps the run) and 21 (no search provider). Remaining partial: report
runs, the 10,000 x 40 budget, ad hoc widget buttons, bulk load (parked),
OAuth authorization code + PKCE.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:34:05 -05:00
james.maes 2723792a86 Merge branch 'feat/m1-kernel-cli' into feat/m3-tui
# Conflicts:
#	docs/server-findings.md
2026-10-31 19:31:42 -05:00
james.maesandClaude Fable 5.1 3a315bfe7d release: a final CLI ships with final client, core and conformance
The orb (PR #165) publishes all four packages as rc when any of them is
a prerelease and as latest only when all are final. The readiness gate
gains a package-versions line that refuses a final CLI version while
client, core or conformance is still a prerelease; release.mjs derives
the dist-tag from all four. The runbook's version table, the rc-to-final
step and the publish step follow the rule, and its signing step now
uses sign-macos.sh and sign-windows.sh.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:31:41 -05:00
james.maes 12181ca183 Merge branch 'feat/m1-kernel-cli' into feat/m1-cli-parity
# Conflicts:
#	docs/server-findings.md
2026-10-31 19:30:54 -05:00
james.maesandClaude Fable 5.1 80deeb266f core+cli: bulk insert, bulk edit (with and without a file), bulk delete and saved bulk load profiles
Bulk load was the largest parity gap: the CLI could not load a file or change many records at
once. The kernel gains the bulk load model (table structure, v1 profile, mapping documents, the
server's suggestion cleaned per finding 11, mapping checks, diffs, upload templates) and
runBulkProcess, which drives the bulk processes through the runner with one callback per screen
(edit form, column mapping, value mapping, review), so the TUI can reuse it. Profile values go
as flat strings (fieldListJSON), cleared bulk-edit fields as "" (finding 23), and the file is
sent again after Back to the upload. BULK_LOAD_PROFILE_FORM no longer counts as an input, so the
result step is the last screen.

The CLI adds table bulk-insert, bulk-edit (--set/--clear, or --file with --key), bulk-delete,
table actions and bulk-profile list|show|save|rename|delete. Mapping comes from the server's
suggestion, a --mapping document (YAML/JSON), --column/--default, or -i prompts; the review is
shown, validation runs by default, and loading asks unless --yes (exit 2 without a terminal).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:30:35 -05:00
james.maesandClaude Fable 5.1 e4a9117942 Merge feat/m1-kernel-cli into feat/m5-cli-release
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:24:00 -05:00
james.maesandClaude Fable 5.1 36739f7787 docs: release runbook for 1.0.0, and the with-UI binary in README and CHANGELOG
docs/release-runbook.md goes from a green branch to 1.0.0 published:
James's checklist first (orb release, CircleCI plan, Developer ID and
notarization, Authenticode, the tap and bucket repositories, the publish
token, the go decision, each with what happens without it), what is
not verified, then version bumps, release.mjs, signing, tags and the
orb publish, the GitHub release, tap and bucket updates, the smoke after
publishing and recovery. The README and CHANGELOG describe the one
binary with qqq ui, the Gatekeeper prompt and the xattr workaround. The
orb proposal record gains the rc-versus-latest dist-tag change.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:23:55 -05:00
james.maesandClaude Fable 5.1 05846459dd scripts: verify-binary.sh and .ps1, the binary smoke for CI lanes and releases
Version with "binary with ui", completion for four shells, qqq ui
--check naming the build, and with a server: login, doctor, whoami, a
query and a process run, in a temporary profile (file keyring, or the OS
keyring removed again). Run here on darwin-arm64 (both keyrings), in
Debian amd64, and the .ps1 under PowerShell 7 in a Linux container, all
against the sample server; never on Windows. The proposed lane YAML now
calls them and still validates; ci-lanes.md says Windows x64 and macOS
x64 stay unverified until the lanes run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:21:50 -05:00
james.maesandClaude Fable 5.1 73bc9cf1e0 docs: parity TUI statuses for the priority batch; blocked status; finding 23
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:19:44 -05:00
james.maesandClaude Fable 5.1 654fb08c83 packaging: a ready-to-copy QRun-IO/homebrew-tap and the with-UI artifact
docs/packaging/homebrew-tap/ is the whole tap repository (formula,
README, LICENSE, qqq-orb homebrew-tap profile); the formula moves there
as the single source, installs only bin/qqq with completions, says qqq ui
is bundled, and its test fails on a binary without the UI. The binary is
chmod 0755 before install: Homebrew downloads arrive without the
execute bit and the completion step runs the binary (found by installing
the formula in the homebrew/brew container, where it then installed,
passed brew test and wrote the three completion files). The Scoop
manifest describes the with-UI binary and notes the ConPTY requirement.
The packaging README covers Gatekeeper without notarization and the
xattr workaround, SmartScreen, and what is still unverified.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:19:13 -05:00
james.maesandClaude Fable 5.1 e65c8a4495 core+tui: the 13 priority todos: joins, quick filters, weekday, bulk paste, first N, scanner, counted views, variants on records
- Exposed joins (QRY-020/021, REC-064): grid columns and filters take
  joinTable.field (labels "Join: Field"); the kernel ResultCursor sends
  the planned joins with query and count and reads the distinct count for
  many-side joins ("3 rows (2 distinct)"); record sections show fields of
  readable exposed joins through a joined query for the record.
- Quick filters (QRY-080/081): the filter dialog starts with the table's
  quick filter fields (defaultQuickFilterFieldNames, else T1) and an add
  row whose fields are remembered per table.
- Weekday criteria (QRY-085): the kernel grammar reads weekday(field) IN
  1-7 or day names into a WeekdayOf fieldFunction (DATE_TIME fields get
  WeekdayOfDateTime with the instance's arguments); the builder offers day
  of the week is any of / none of. The sample rejects it: server finding 23.
- Bulk paste (QRY-088): list values accept pasted text split on commas,
  tabs, semicolons and new lines, choice labels resolved to ids, with the
  instance's bulkAddFilterValues help; bracketed paste reaches the focused
  editor everywhere.
- First N (QRY-033): table processes run on the selection, the cursor
  record, the whole result, or its first N records.
- Scanner screens (PRC-044): no heading or step list; Enter submits.
- Counted quick views (QRY-094): doCount views show their counts.
- Variant (REC-063): records and forms opened from a variant grid read
  with tableVariant.
- The grid shows a failed query instead of keeping the previous rows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:18:44 -05:00
james.maesandClaude Fable 5.1 8ce8f96838 docs: finding 23, SSE writer drops empty arrays (qqq#1354)
The qbit-collaboration fix for #52 showed the presence qbit already sent
an empty viewers list; qqq core's SSE serializer removes it. Recorded so
the TUI's presence handling and the core fix point at the same cause.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:13:32 -05:00
james.maes 98e426b69d Merge branch 'feat/m1-kernel-cli' into feat/m3-tui 2026-10-31 19:08:45 -05:00
james.maesandClaude Fable 5.1 dcf136d5ff tui: process DATE_TIME in the local zone and variants on processes; parity TUI column re-scored
Process step forms show DATE_TIME inputs in the local zone and send UTC
instants (kernel datetime); processes launched from a variant grid carry
tableVariant through the runner.

scripts/parity-matrix.py: the TUI column re-scored against what is built
now. Priority families (NAV, PRF, PRC, QRY, REC, REL): 150 pass, 44
partial with a reason, 13 named todo, 42 n/a. All rows: 180 pass, 49
partial, 103 todo, 69 n/a.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:06:46 -05:00
james.maesandClaude Fable 5.1 496528ae6a Merge feat/m1-kernel-cli (6c56b89) into feat/m5-cli-release
The server findings now link each finding to its filed issue.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:03:53 -05:00
james.maesandClaude Fable 5.1 6c56b8955a docs: link each server finding to its filed qqq issue
James approved filing the 22 findings; one issue per finding except the
archive-table one (already open as #784), the two record-search ones
(one root cause, #1343) and the presence one (qbit-collaboration#52).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:03:15 -05:00
james.maesandClaude Fable 5.1 6c200a6030 docs: ready-to-send proposal for the two orb changes
Publishing @qrun-io/qqq-core (blocking a usable CLI package) and opt-in
macOS and Windows lanes, written as a message for James with the
cli_publish.sh diff; the Node 22.12 row is green after the prompt fix.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 19:00:32 -05:00
james.maesandClaude Fable 5.1 69e7ad669a release: --with-tui, and the TUI distribution findings
release.mjs passes --with-tui to the binary build. docs/packaging
records the three ways tried to ship qqq ui (one binary with the UI, a
second qqq-ui binary, npm with Bun), the sizes, what was smoke-tested
and what was not, and recommends one qqq binary with the UI bundled.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 18:59:58 -05:00
james.maesandClaude Fable 5.1 29d848f822 Merge feat/m1-kernel-cli (bf859a5) into feat/m5-cli-release
Developer mode and the TUI batch (Home screen, search-first F9, the
metadata index, audits, tags and developer screens).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 18:52:33 -05:00
james.maesandClaude Fable 5.1 70c4fae565 docs: CI lanes, what the orb cli profile really runs and macOS/Windows lanes
Records the orb profile as verified in Docker (Node 22.12 image, no lint,
core never published, one platform), the Node 22.12-only prompt test
failure, and a proposal for macOS arm64 and Windows x64 lanes: an orb
change with a .qqq-ci.yml opt-in, or a second CircleCI pipeline whose
YAML validates with the CircleCI CLI. .circleci/config.yml is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 18:48:21 -05:00
james.maesandClaude Fable 5.1 7893dd465e Merge feat/m1-kernel-cli (4728702) into feat/m5-cli-release
Brings in the TUI package and the hardening review (createProgram in
program.ts, qqq doctor, the golden-output suite). Resolutions: main.ts
from the base; program.ts prints versionText(), whose second line now
starts with "UI API client <version>" as the golden test expects and
adds the supported server range; the CLI package keeps the release
metadata with the base's exports and its new conformance dependency,
and conformance goes to 1.6.0-rc.2 because the CLI now ships against it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 18:40:33 -05:00
james.maesandClaude Fable 5.1 fc6984661e Merge feat/m1-kernel-cli (hardening) into feat/m1-developer-mode
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 18:39:04 -05:00
james.maesandClaude Fable 5.1 47f44a3146 docs: developer mode in TRY-IT and parity rows
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-31 18:38:35 -05:00
james.maesandClaude Opus 5.5 47287020b4 Merge feat/m1-kernel-cli (165c002) into feat/m1-hardening
Brings in the TUI stream (program.ts with createProgram and runCli, the io
object, qqq ui, session/login, local-state, filter completion, the result
cursor, the file navigator and env/doctor). Resolutions:

- main.ts is the base's thin entry; it still awaits the 0.1 credentials import.
- program.ts carries the option fixes (--version only, --server without -s)
  and registers qqq doctor.
- One set of ui helpers: the TUI's. readUiSettings/writeUiSettings are gone;
  qqq config set|get download-dir, upload-dir and download-mode use
  readFilePreferences/writeFilePreferences (ui.files), and the new
  qqq config set|get theme uses readTheme/writeTheme. readConfig keeps the
  corrupt-file refusal and unknown sections; the profiles test covers files,
  theme and an unknown section together.
- qqq doctor's terminal rows come from checkEnvironment, with formatReport
  under the table; --fix asks before each applyLiveFix and calls
  appendTmuxConf only after a y typed at a terminal.
- runCli and the prompts coexist (stdin is not a terminal in runCli, so
  prompts refuse; direct stdout writes are captured), tested in a child process.
- @qrun-io/qqq-ui-api-conformance is a dependency of the CLI package.
- The parity matrix is regenerated; docs/review-2026-10-31.md records each
  merge decision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 18:37:51 -05:00
james.maesandClaude Opus 5.5 4af42bb51f docs: review of the merged CLI and kernel; TRY-IT checked against the sample server
docs/review-2026-10-31.md lists each finding of the fresh-eyes review, its
severity and the fix (or why it was left). TRY-IT.md was run block by block
against the sample server and corrected: placeholders written as commands,
missing upload files, record ids the shared data no longer matches; it now
documents the option names shared by every noun, the footer, the exit codes
for a no, Ctrl-C and gateways, the download directory and qqq doctor. The
parity matrix notes REC-022 (BLOB upload and download) as verified and the
REVEAL masking in lists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 18:32:58 -05:00