Prioritize never-queued and least-recently-queued page/device pairs using persisted non-quota-skipped history. Scheduled key-page and full audits continue sharing the existing daily allowance with manual requests. Cover odd caps, repeated scheduling, shared allowance and recreated services.
Co-Authored-By: OpenAI GPT-6 <noreply@openai.com>
Signed-off-by: James Maes <james@kof22.com>
Host-neutral help (deployment-specific facts removed), registered with
HelpBundles, gated by HelpBundleAssertions. QQQ 4.1.0-RC.7.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The regression, budget, change event and comparison tables had list
screens but nothing wrote them; the open regression count was a
hard-coded 0 and budgets were never evaluated.
- Change events: new build ids from the DeployProbe and ChangeEventSource
events become durable, idempotent change_event rows (event_key);
lab runs record the deployment (change event) and CDN stage.
- Budgets are evaluated after lab runs and field imports; breaches open
or refresh regressions.
- Regression detection compares new results with the baseline per page,
strategy and metric as the design describes, links the likely change,
confirms before opening, and resolves on recovery. The open regression
count is real.
- Before/after comparisons are written per change event.
- Dismiss and Mark resolved are standard record actions on regressions.
- Optional alerts through core QAlerts (logging sink without the Alerts
qbit). QQQ BOM moves to the released 4.1.0-RC.6 for core alerts.
- Changeset 11 adds the progress and identity columns.
Refs #8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tier, scope, source, strategy, metric, comparator and severity were free
text, so a typo such as "key" for KEY silently dropped a page from the
daily key-page tests. Each now uses an enum possible value source with
plain labels and the stored values the code already compares against
(no data migration).
Tested Pages offered Insert while URL was not editable but required, so
a manual insert could never succeed. URL is now editable and validated
(absolute https, no credentials or fragment) by TargetCustomizer, which
also fills path, site, source MANUAL and inSitemap false.
Refs #8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the standard repository files (CircleCI qqq-orb pipeline where
missing, .editorconfig, .gitattributes, CODEOWNERS, Dependabot, community
pointer files, CHANGELOG, CLAUDE.md/AGENTS.md, docs/DESIGN.md), make the
Maven wrapper executable, and add the README Build/License sections.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Permission base webPerformance -> web_performance (read, write, test,
admin, view). Process and widget names stay webPerformance*.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner rule (2026-10-12): table names are lowercase snake_case and every
qbit prefixes its tables with its full name, no abbreviations.
- table prefix webperf_ -> web_performance_ (tables, backend names,
possible-value sources)
- Liquibase property webperf.tablePrefix -> web_performance.tablePrefix,
changelog webperf.changelog.sql -> web_performance.changelog.sql
- name prefix and permission base webperf -> webPerformance (processes,
widgets, process fields, permissions)
Java package and class names unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Local skeleton of the web performance QBit designed in QRun-IO/qqq
docs/specs/2026-10-12-web-performance-design.md (PR #1088; owner decisions
D1-D13 accepted 2026-10-12, D9 amended: alerts via the Alerts qbit).
- WebPerfQBitProducer and WebPerfQBitConfig (validation, namespace prefix,
duplicate-install guard, Google API key optional and redacted)
- nine visible webperf_ tables, lookups and the Performance app; machine
tables read-only and unaudited, people-edited tables field-audited
- host-included prefix-parameterized changelog with the seeded budgets
- SPIs: UrlSource, ContentResolver, LabRunner, DeployProbe, RumSource,
ChangeEventSource
- SitemapUrlSource (XXE-safe, sitemap index) and HttpBuildIdProbe
(Website-Frontend /api/build)
No PSI/CrUX runner yet: that waits for the Google API key.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>