feat: Create rows for analyzable tables, Setup card and table help #12

Merged
KofTwentyTwo merged 3 commits from feature/tables-populated-defaults into develop 2026-10-14 22:47:01 +00:00
KofTwentyTwo commented 2026-10-14 22:23:32 +00:00 (Migrated from github.com)

Audit per table

  • data_analysis_table_config: read by EffectiveConfigResolver. Every column is consumed (enabled, analyzable/excluded fields by AnalysisSecurity; max rows, sampling, min group size by the backends and guards; cache_ttl_minutes by AnalysisRunService.cached). The reported half-wiring of cache_ttl_minutes was not real: it already drives the run cache. It only lacked a test; added (settingsRowCacheMinutesChangeCaching).
  • saved, saved_star, schedule, watch, run: all read and written by runtime code; user content or logs, start empty by design (listed with reasons in DataAnalysisTablesGuardrailTest.STARTS_EMPTY).

What changed

  • Analysis Settings action Create rows for analyzable tables (standard streamed ETL, insert-only): one row per analyzable table (not the qbit's own tables, honoring include/exclude) holding the effective settings, so nothing changes. Runtime, not SQL, because the right rows depend on the host's tables and code defaults. No automatic seeding: with no rows every table is on with defaults, which is a working setup; the Setup card and help say so.
  • Setup card on the home (settings, result cache, saved analyses, watches, schedules; notes when no scheduler is configured), using the runtime resolver.
  • Help bundle for the app and all 6 tables, DataAnalysisHelp (STAND-IN core=#1198).
  • README, UPGRADE.md, CHANGELOG.

Tests

TableConfigDefaultsTest (rows restate effective settings and every table resolves identically; excluded tables skipped; insert-only; edited row live; row cache minutes change caching incl. 0; Setup card), DataAnalysisTablesGuardrailTest; two existing tests updated for the new widget. ./mvnw verify green (309 tests, checkstyle, JaCoCo). Note PostgresEngineTest is a Testcontainers test and failed once with a closed-channel error, then passed on rerun.

Not done

Nothing.

🤖 Generated with Claude Code

## Audit per table - `data_analysis_table_config`: read by EffectiveConfigResolver. Every column is consumed (enabled, analyzable/excluded fields by AnalysisSecurity; max rows, sampling, min group size by the backends and guards; `cache_ttl_minutes` by AnalysisRunService.cached). **The reported half-wiring of `cache_ttl_minutes` was not real**: it already drives the run cache. It only lacked a test; added (`settingsRowCacheMinutesChangeCaching`). - saved, saved_star, schedule, watch, run: all read and written by runtime code; user content or logs, start empty by design (listed with reasons in `DataAnalysisTablesGuardrailTest.STARTS_EMPTY`). ## What changed - Analysis Settings action **Create rows for analyzable tables** (standard streamed ETL, insert-only): one row per analyzable table (not the qbit's own tables, honoring include/exclude) holding the effective settings, so nothing changes. Runtime, not SQL, because the right rows depend on the host's tables and code defaults. No automatic seeding: with no rows every table is on with defaults, which is a working setup; the Setup card and help say so. - Setup card on the home (settings, result cache, saved analyses, watches, schedules; notes when no scheduler is configured), using the runtime resolver. - Help bundle for the app and all 6 tables, `DataAnalysisHelp` (STAND-IN core=#1198). - README, UPGRADE.md, CHANGELOG. ## Tests `TableConfigDefaultsTest` (rows restate effective settings and every table resolves identically; excluded tables skipped; insert-only; edited row live; row cache minutes change caching incl. 0; Setup card), `DataAnalysisTablesGuardrailTest`; two existing tests updated for the new widget. `./mvnw verify` green (309 tests, checkstyle, JaCoCo). Note PostgresEngineTest is a Testcontainers test and failed once with a closed-channel error, then passed on rerun. ## Not done Nothing. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.