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.
## 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)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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_minutesby AnalysisRunService.cached). The reported half-wiring ofcache_ttl_minuteswas not real: it already drives the run cache. It only lacked a test; added (settingsRowCacheMinutesChangeCaching).DataAnalysisTablesGuardrailTest.STARTS_EMPTY).What changed
DataAnalysisHelp(STAND-IN core=#1198).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 verifygreen (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