Repository navigation
chore(release): 2.9.0 - #37
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…ft model The planner, the engine and the generator now agree on a single objective. - Total cost is soft cost plus the workload term, reassignment and unserved priority. The engine reports it as the objective metric. - Insertion cost is summed unrounded, so it equals the change in the objective. - No idle wait is charged before an engineer's first job. - Priority 3 is reserved for tool-downs on the constraint family. - Cross-trained level-1 engineers can take some constraint-family PMs. - The Overstaffed preset adds a certified engineer and stays provable at full size. - Unassigned jobs report the real reason. - Ids shared by an engineer and a job are rejected.
… solver with the objective - Greedy, Hungarian and regret insert a job only when it lowers the total cost. - Regret ranks by every feasible engineer and gates only the commit. - The ALNS budget starts after the warm start. Annealing cools to near-greedy by the last iteration. - ALNS counts stability in worst removal. - PyVRP keeps the plan that is cheapest by the planner's cost, warm start included. - PyVRP cancels walking and service time exactly at the charged rate. - The exact MILP prices frozen work and stability like total_cost. - The exact MILP takes a time limit and raises instead of returning an unproven plan. - FAB_EXACT_THREADS caps HiGHS threads so many proofs can run side by side.
- Streams use a 90-second ticket instead of the access token in the URL. - Stream opens are rate-limited and capped per user. - Idempotency keys are claimed atomically with the shift write. - The shift ETag works as an If-Match precondition. - Reported jobs are validated, ended shifts are frozen and no-op writes are skipped. - Started jobs are replayed at their recorded times on re-plan. - Unreported tool-downs stay out of the shift view. - Guests may only change the live shifts they started. - Shift state is serialised once per write.
- Tokens must carry exp. The bootstrap grant needs a verified email. - Revoked fab lists are honoured. Demo sign-in is limited to local and test. - Forwarding headers are trusted only as configured. Idle rate-limit buckets are evicted. - Anonymous calls write no rate-limit rows. Expensive endpoints fail closed. - The API sends a Content-Security-Policy and HSTS. - Router 404 and 405 use the error envelope. 500s carry CORS headers. - The UI image sends security headers from every nginx location and runs nginx unprivileged. - Strategy lists and benchmark work are bounded. - Shift size limits are settings (FAB_MAX_ENGINEERS, FAB_MAX_JOBS) reported in /api/meta. - Tenant names stay out of /meta. /health is cached. - Postgres connections are reused. - Idle guest accounts are deleted in the retention prune.
…t repair predictions - The recommendation is computed on the server instead of echoed from the browser. - The optional LLM rewrite is checked against the grounded draft and falls back with a reason. - Retrieval uses IDF-weighted lexical scoring with glossary terms. - Duration questions such as "how long will J006 take" route correctly. - Feedback is validated and de-duplicated per user and question. - Repair history makes no prediction below a similarity floor. - Repair symptoms carry partial root-cause signal. - Stored Qdrant collections are versioned by history content. - The roster limits which engineers a repair estimate draws on.
…ccessibility - Verdicts use paired t intervals, Holm-adjusted, and warn below ten seeds. - Weight sliders commit on release. Identical solves share one request and retry once on 429. - Writes send If-Match and explain a 409. A 401 renews the session before sign-out. - Absent metrics show "n/a". Workload spread is shown in minutes. - Contrast, reduced motion, live regions, keyboard-operable rows and focusable tooltips meet WCAG AA. - Crash reports keep shift ids and emails out of the issue body. - The floor plan, schedule, workforce, live and benchmark views load on demand. - Size fields follow the limits in /api/meta.
pavansky
force-pushed
the
release/2.9.0
branch
from
October 11, 2026 19:57
5108656 to
f198233
Compare
pavansky
marked this pull request as ready for review
October 11, 2026 19:57
…ber in ANALYSIS - Benchmark gains a revealed-information mode, paired bootstrap intervals and a changeable-cost gap. - Full-size gap proofs and bound route enumeration run in parallel worker processes. - The ALNS iteration override reaches the worker processes. - The certified bound runs several seeds and presets. - The duration study uses realistic baselines and separate interval checks. - The predictive study counts planned repair and false-alarm time, and sweeps planned repair length. - The learned-policy study runs several search seeds with cached optima. - The scale study records caps, iterations and cost per area, and saves after every section. - feedback_to_eval.py turns user feedback into evaluation cases. - Every study has a main(argv) with size flags. Defaults reproduce the published tables.
…the merged API - Every study script runs at a tiny size and checks that no heuristic beats a proven optimum. - The exact solver is held to the hard constraints on every preset of both fabs. - The full-size optimality proof covers every preset. - A slow test runs ALNS and PyVRP at their shipped budgets. - README test counts are checked against the suites. - UI fixtures are regenerated from the API with measured runtimes. - The fixture contract compares enum-like fields. - Component and end-to-end tests follow the lazy views and the new metrics.
- A release tag must be on main. Production is promoted only after a green UAT deployment. - Every action is pinned to a commit and every job has a timeout. - Python 3.11 to 3.14 and Node 20 and 22 are tested. Slow tests run on pushes to main. - Coverage counts scripts/ with a floor one point below the measured run. - The commit check rejects co-author and session trailers. - CodeQL regex findings are fixed. - highspy is pinned in pyproject and requirements. - Dependabot watches Docker images.
….9.0 results - ANALYSIS.md tables come from the 2.9.0 runs, with confidence intervals. - Gap to the proven optimum on 80 full-size shifts: PyVRP 3.85%, ALNS 5.74%, regret 20.09%. - ALNS at 20,000 iterations is 1.36% from the optimum and optimal on 10 of 80 shifts. - README, design review, decisions, architecture and help articles carry the same numbers. - SECURITY.md and the deployment docs say exactly what the CSP, RLS, tokens and rate limits do. - Solver lineage and citations are corrected. The technician-routing literature is cited. - ai.md describes the retrieval, what leaves the server and the evaluation.
- Version 2.9.0 in the backend, frontend and fixtures. - Changelog entry for 2.9.0.
pavansky
force-pushed
the
release/2.9.0
branch
from
October 12, 2026 02:36
f198233 to
d04c647
Compare
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 2.9.0. Eleven commits, grouped by area so each can be reviewed on its own.
What changes
Results (80 full-size shifts, 14 x 45, gap to the proven optimum)
The gap table was reproduced to the decimal on a second machine.
Tests