- Python 82.2%
- JavaScript 11%
- CSS 4.3%
- HTML 2.3%
- Shell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
Build Holland Drawing Labeler Image / build-image (push) Successful in 36s
Reviewed-on: #61 |
||
| .forgejo/workflows | ||
| app | ||
| data | ||
| deploy | ||
| scripts | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| CODE_SERVER_FORGEJO_SETUP.md | ||
| compose.server.yaml | ||
| compose.yaml | ||
| Dockerfile | ||
| README.md | ||
| RELEASE_NOTES.md | ||
| requirements.txt | ||
| SERVER_DEPLOYMENT.md | ||
| VALIDATION_v1.6.11.md | ||
| VALIDATION_v1.6.12.md | ||
| VALIDATION_v1.6.13.md | ||
| VERSION | ||
AI Project Review
Current release candidate: v1.6.13
Source code baseline: v1.6.12. Confirmed deployed baseline before this build: v1.6.12.
AI Project Review is the self-hosted construction-document review application used to label drawing sheets and perform evidence-backed concrete estimating review across drawings, specifications, geotechnical reports, addenda, and revisions.
Project Review architecture
The review pipeline is now:
Prepare → Extract Text / OCR → Persistent SQLite Index → Human-Template Search → Best-Evidence Ranking → Concise Evidence Status → Estimator Significance → Review Learning → Build Results
Human-maintained Search Templates remain the sole authority for what is searched in project documents. The Concrete Knowledge Base never adds search terms to project-document retrieval. The primary status pass uses project evidence only, chooses one best evidence location (two only for a genuine conflict), and favors a concise existence/requirement answer over exhaustive value transcription. The estimator-significance pass continues to use selected Knowledge Cards as non-authoritative reference.
v1.6.13 highlights — Project Review cleanup, cache reset, and stable Sheet Labeling context
- Removes the persistent extraction-worker badge from the Project Review title while retaining the live Extraction Workers panel during Extract Text.
- Removes the five Review Results summary cards (Exists, Needs Review, Not Present, Search Items, Estimator Attention) so the substantive review sections move up.
- Removes the non-actionable
Project Filepill from the primary project-document row; Open and Remove remain unchanged. - Reduces the desktop
Apply to Selectedbulk-category button to a compact 145 px width; mobile continues to use full width. - Adds Clear Document Cache to the top-right of Review Performance. It removes only the current project's
review_text_index.sqlite3(including SQLite sidecars) anddrawing_scope_cache.json, preserving source PDFs, project metadata and completed review results. The action is blocked while Project Review/Sheet Labeling is active and on finalized source-removed projects. - Makes the verified Sheet Labeling context workaround permanent: normal and reduced-input fallback contexts default to 6144 tokens. Legacy 4096/3072 values are promoted at runtime to 6144 so the Qwen3-VL runner does not repeatedly switch context sizes.
- Project Review remains at its separate 8192-token context, and the accepted v1.6.10 evidence-first review behavior, Search Templates, Knowledge Base authority model, OCR/index schema 2 and live extraction-worker telemetry are unchanged.
v1.6.12 highlights — extraction worker visibility (confirmed deployed baseline)
- Project Review header shows the configured extraction worker count read from the running backend health endpoint.
- During Extract Text the existing progress card displays live actually executing extraction processes, page coverage, worker errors, cache/serial state and fallback recovery.
- Active worker counts are reported by a spawn-safe shared counter rather than inferred from how many workers were configured or how many futures were queued.
- Extracted text, OCR evidence, Search Templates, AI model, Knowledge Base, SQLite index schema and review results remain unchanged.
v1.6.11 highlights — extraction performance (built candidate, not deployed)
- Native drawing text and the existing Tesseract OCR path are processed by four independent worker processes by default. Set
DRAWING_LABELER_EXTRACT_WORKERS=1to use the original serial extraction path for an immediate diagnostic comparison; 2–16 are supported for benchmarking. - Each worker opens and closes its own PyMuPDF document handle. Only one page per worker is dispatched at a time and pages are merged in deterministic sheet order.
- Each extraction child uses
OMP_NUM_THREADS=1/OMP_THREAD_LIMIT=1to prevent a four-process OCR workload multiplying the original worker's four-thread budget. - Review cancellation stops further submissions and joins active workers after their current page; completed pages are not stored in SQLite until the document finishes successfully.
- Unexpected worker/pool failure triggers serial recovery of the missing pages; completed valid results are retained. The review coordinator alone writes the unchanged schema-2 persistent SQLite index.
- Native/OCR words, coordinates, sheet metadata, selected Review Pages, Search Templates, AI prompts/models, evidence/status rules, Knowledge Base gates, API, users and reports are unchanged.
- Runtime performance now records configured worker count, parallel page count, fallback/errors, fresh/cached/attempted OCR counts, extraction seconds and pages/minute under review
performance.text_index.extraction. - Source inspection confirmed that the existing extraction path calls PyMuPDF's in-memory native/OCR interfaces and does not explicitly write rendered/OCR files to a disk-backed
/tmplocation. Persistent document/index files are already under/data(NVMe-backed in the reported TrueNAS configuration). No temporary file relocation was made. Filesystem and Tesseract-runtime I/O should still be measured on HollandNAS before asserting there is no storage bottleneck. - Use
scripts/benchmark-extraction-v1.6.11.pyagainst the same real drawing PDF with matching OCR settings to measure serial versus parallel speed and validate exact page/text/coordinate equivalence. Synthetic local tests do not substitute for a TrueNAS real-project benchmark.
v1.6.10 highlights
- Evidence-first results: one strong project evidence location is enough for Found; the estimator gets a concise summary plus the source screenshot/page instead of an exhaustive AI mini-report.
- Best-evidence ranking: candidate scoring favors specific direct notes/schedules/details over repeated generic word collisions, with stronger geotechnical-source preference for Geotech topics.
- Reduced AI burden: the status model selects primary evidence and a short summary; exhaustive extracted-value arrays and model-authored verbatim support quotes are no longer required.
- Useful negatives: explicit prohibitions /
not requiredstatements may resolve a Search Item as Found when they directly answer the configured question. - Fewer blank Needs Review results: if Qwen omits an evidence ID but relevant evidence was retrieved, the strongest ranked candidate is preserved rather than returning an empty evidence card.
- Topic-specific post-analysis overrides no longer rewrite the primary evidence/status decision.
- API Activity Administrator-only: sudo users retain API credential/preview access without activity history access.
- One-time token lifecycle fixed: plaintext token is cleared when leaving the API page.
- Revoke = delete: revoked credentials disappear immediately; legacy disabled/revoked rows are cleaned on startup while activity history remains.
- v1.6.7 extraction preserved: native text, OCR supplementation, persistent index schema
2, and current Ollama settings are unchanged.
v1.6.9 highlights
- Simplified review decision layer: deterministic review-decision functions are restored to the actual v1.6.5 source behavior, removing the additional v1.6.6/v1.6.7 topic-specific restrictions while the newer generic evidence-integrity verification remains.
- v1.6.7 evidence path preserved: native-text reading order, OCR supplementation, persistent text indexing, controlled phrase-window/inflection retrieval, Search Template authority, and text-index schema
2are unchanged. - Admin API workspace: sudo/Administrators can create dedicated scoped API credentials, configure per-token request limits, inspect API activity, and preview/download project review JSON.
- Yeknrut pull endpoint:
GET /api/v1/projects/{project_number}/review-checksmatches only the exact stored##-####project number and returns normalized review/search-item state without evidence/snips. - Shared API serializer: live API responses and admin Preview/Download use the same serializer.
- Persistent API security: credential secrets are shown only once, only token hashes are stored, revocation is irreversible, and full backups preserve
/data/system/api_access.db. - Template switching cleanup: changing the Review Template applies immediately without a browser confirmation dialog; uploaded documents remain in place.
- Current Learning Patterns spacing: pattern cards are more compact and inset inside the panel.
- Search Configuration copy:
Search Areasis renamed toTemplate Search Areas Sort Order.
v1.6.7 highlights
- Rotated drawing extraction fixed: native PDF text/word extraction preserves source content order instead of forcing coordinate sorting that can scramble dense rotated structural-note sheets.
- Native-first OCR supplementation: native vector text remains primary; OCR-only lines are retained when genuinely novel while near-duplicate OCR noise is suppressed.
- Controlled phrase-window and inflection retrieval: configured Search Template phrases can survive small intervening words (for example
water was not encountered) and narrow singular/plural differences without enabling uncontrolled semantic search. - Block/line-aware evidence reconstruction: localized drawing evidence follows PyMuPDF block/line/word indexes before falling back to geometry, improving rotated-sheet context.
- MFHS deterministic corrections: explicit groundwater dry observations, air-entrainment prohibition, ground-supported slabs, surface-prep/repair notes, fly-ash class/percentage relationships, curing duration, admixtures, concrete element-strength assignments, drilled-pier depth/embedment separation, and generic PT special-inspection rejection are now validated.
- Rock-depth aggregation: boring-log material/core-run parsing distinguishes top of rock from later penetration runs and reports the shallowest observed top with boring ID when available.
- Construction-value regex repair: uncommaed values such as
3000 PSIare again treated as quantitative and normalize with3,000 PSI. - Automatic index invalidation: text-index schema is bumped to
2, so existing project review indexes are rebuilt with corrected extraction;/data, projects, templates, KB, accounts, and Ollama do not need to be reset. - Permanent MFHS benchmark:
scripts/benchmark-mfhs-v1.6.7.pyverifies the source-grounded failure cases against the supplied MFHS drawings/geotech when those PDFs are provided. - Authority unchanged: Search Templates remain the sole project-document retrieval authority and the Knowledge Base remains non-authoritative reference.
v1.6.6 highlights
- Canonical measurement traceability: extracted values and summary measurements now share one construction-aware normalization path, including comma grouping, percentage notation, feet/inches symbols, unit spelling, and rebar sizes. Bare digits from boring/sheet identifiers no longer become leak events.
- OCR-aware quote repair: a failed support quote can be replaced only with an exact project-evidence span when the attempted quote strongly overlaps the cited E-block. Fabricated/paraphrased support still fails.
- Safer numeric-summary handling: if an unsupported numeric value appears only in generated summary prose while an independent verified project quote already proves the finding, the unsafe prose is replaced with an evidence-backed summary. Unsupported explicit quantitative extractions remain blocking.
- Non-quantitative extracted-value cleanup: material names/labels accidentally returned in
extracted_valuesare audited and ignored rather than being treated as failed numeric evidence. - Stricter status-card admission: the status relevance brief normally requires score 300+ and uses at most two primary cards, with an exception for exact template-title matches. Full-card significance retrieval remains unchanged.
- Anchor-hole cleaning guard: drilled/adhesive-anchor hole cleaning no longer satisfies
Cleaning / surface preparationwithout actual concrete/floor surface-preparation context. - Lightweight masonry guard: lightweight CMU/masonry units no longer establish
Lightweight Concreteready-mix scope. - Grade-beam OCR fallback: explicit grade/tie-beam drawing callouts can establish the system when OCR is too fragmented for reliable schedule-row parsing, without inventing dimensions or reinforcement.
- Concrete-strength OCR refinement: concrete PSI extraction accepts a wider OCR-flattened local context while continuing to exclude grout/mortar and low-strength non-concrete values.
- v1.6.5 architecture retained: Search Templates remain the sole retrieval authority; restricted KB status context stays non-citable; final Found results still require traceable project evidence; full Knowledge Cards remain significance-only.
- Model settings unchanged: Project Review remains
num_ctx=8192,temperature=0.1,think=false.
v1.6.5 highlights
- Restricted Knowledge Base relevance brief in the status pass: after Search Templates retrieve candidate evidence, Qwen may receive only card definition, common-confusion, and Do Not Assume guidance. Typical values/ranges, cost/risk indicators, estimator impacts, scope checklists, and other quantitative reference content remain excluded from the status pass.
- Evidence-term definition lookup: distinctive Knowledge Card titles/aliases already present inside retrieved evidence can receive definition/common-confusion context, capped and deduplicated. This never creates project search terms or secondary retrieval.
- Verified project-evidence quotes: every final Found requires a traceable E-ID and verbatim supporting quote. The server verifies the quote against the cited project-document text with case, whitespace, line-break, and PDF hyphenation normalization.
- Knowledge-leak protection: invalid citations, card-only quotes, reference-only distinctive terms, and untraceable numeric values downgrade the result to Needs Review and are recorded in audit metadata.
- Deterministic safeguards preserved: existing literal validators remain authoritative and may still promote a result when project text proves the guarded condition; such promotions receive server-generated verified evidence support.
- Conservative AI-failure behavior: deterministic keyword hits alone no longer become Found when status AI is unavailable; they remain Needs Review unless an existing deterministic safeguard proves the finding.
- Authoritative summary separation: the full-card significance pass can explain estimator significance but can no longer rewrite the evidence-derived project-fact summary.
- Auditability: finding detail and exported review data record status-pass card IDs/versions, definition-lookup terms, verified support counts, and quote/leak events. PDF report metadata records the KB reference library/mode and verified-evidence review method.
- Search authority unchanged: Search Templates remain the sole project-document retrieval authority and
DRAWING_LABELER_KB_MAX_SECONDARY_TERMSremains forced to zero. - Model settings unchanged: Project Review remains
num_ctx=8192,temperature=0.1,think=false.
v1.6.4 highlights
- Current-year Project Number entry: Project Number remains optional and externally assigned. The editor supplies the current two-digit year prefix automatically, so in 2026 the user enters only the four-digit suffix, such as
0276, which is stored/displayed as26-0276. Existing saved year prefixes remain unchanged. - Duplicate Project Number protection: the same Project Number cannot be assigned to another retained project, including Finalized projects.
- Clickable project names: project names on the Projects page open directly to Project Review without changing the name's visual styling.
- Select All / Deselect All fix: Review Pages bulk selection buttons are wired to the existing bulk page-selection endpoint and update the active drawing set.
- Main navigation scrolls normally: the global Projects / Project Review / Search Configuration / Review Learning / Sheet Labeling / Knowledge Base / Admin tab bar is no longer sticky on any page.
- All Other Findings: the Not Found section is renamed and informative Not Found summaries are sorted above plain
Not Found after native-text and OCR search.results. - Simplified transparent favicon: browser favicon assets use the approved simplified building/circuit icon with transparent background.
- Model behavior retained: Project Review keeps the v1.6.2-v1.6.3 Qwen settings (
num_ctx=8192,temperature=0.1,think=false) and the existing Knowledge Base guardrails.
v1.6.3 highlights
- Optional project numbers: projects may store a manually entered project number using
##-####(for example26-0276). The value is optional, never auto-generated, and is displayed with a leading#beside the project name. - Project identity editor: the existing project Rename action opens a Project editor for both Project Name and optional Project Number; legacy clients that update only the name preserve an existing project number.
- Project status filter: Projects adds an All Statuses / Active / Finalized filter beside Search Projects; text search and status filtering work together.
- Project Review identity: the active project name and optional project number appear beside the Project Review title in a smaller hierarchy.
- Project Review panel hierarchy: the Project Review hero is now a standalone top-level header card, while tabs/results/documents live in their own separate body panel, matching the general page layout used by Search Configuration.
- Header action normalization: Project Review and Admin header action buttons use the same height, padding, radius, and type scale as Knowledge Base header actions.
- Search Configuration copy:
+ Add Search Itemis shortened toAdd Item.
v1.6.2 highlights
- Project Review context increased to 8192: text evidence and estimator-significance calls now run with an 8192-token review context by default.
- Legacy 4096 deployments migrate automatically: if an existing persistent
.envstill supplies the formerDRAWING_LABELER_REVIEW_CONTEXT_TOKENS=4096, the application promotes that legacy/default value to 8192 at runtime. No shell, Ollama Modelfile, or model rebuild is required. Explicit custom values above 4096 remain honored. - Validated Qwen review parameters: Project Review text reasoning uses
temperature=0.1; Ollama thinking remains explicitly disabled with booleanthink=false, matching the successful targeted Open WebUI validation. - Knowledge-reference applicability guardrail: Qwen is explicitly prohibited from surfacing a Knowledge Card's generic risk/cost/check as an unresolved project issue unless the authoritative project evidence makes that condition applicable. If project evidence already resolves a generic warning, it must not be presented as unresolved.
- 8192 used as headroom, not broader search: Search Templates remain authoritative, deterministic retrieval remains targeted, and Knowledge Cards remain non-authoritative estimator context only. The larger window is intended to fit complete relevant evidence and complete selected cards rather than add unrelated project content.
- v1.6.1 Knowledge Base enrichment retained: all configured bullets from every included card are still sent, Test Card remains removed, and whole-card prompt budgeting remains in force.
v1.6.1 highlights
- All Knowledge Card bullets reach Qwen: the previous six-item cap is removed from both backend context generation and Admin Model Context Preview.
- Real-world reference context: selected cards now send terminology/alternate names, material-system description, common values/ranges, industry reference notes, estimator relevance, project evidence indicators, estimating impacts, attention triggers, scope boundaries, confusions, do-not-assume rules, estimator checks, regional notes, and reference basis.
- All 387 packaged cards upgraded: schema/card version
1.1.0, with the new reference fields available across the full library. - Source-backed starter enrichment: 30 value-heavy cards receive curated numerical/context references from NRMCA, FHWA, ADA, CRSI, ACI/ASTM-referenced guidance, while cards without meaningful universal values are not given invented numbers.
- Managed-card compatibility: existing edits remain authoritative while newly introduced packaged reference fields can populate older managed overlays when absent.
- Test Card removed: the Knowledge Base test button, test form/results, and test API are removed; Model Context Preview remains.
- Scope boundary preserved: Knowledge Cards still never add project-document search terms or determine Found / Not Found status.
v1.5.8 highlights
- Dedicated Knowledge Base workspace: Concrete Knowledge Base moves out of Administration into its own top-level tab.
- Role-aware Knowledge Base navigation: the tab is visible only to
sudoand Administrator users; the/knowledge-basepage route and management APIs are also server-protected. - Projects-based visual system: Search Configuration, Review Learning, Knowledge Base, and Administration use Projects as the baseline for page titles, section titles, card titles, body copy, metadata, badges, buttons, and spacing.
- Specialized workspaces preserved: Project Review and Sheet Labeling keep their existing purpose-built layouts.
- Admin version badge corrected: the badge is approximately one-third of the
+ Add Userbutton's overall visual footprint and is vertically centered with the Admin action buttons. - No review-engine change: human-maintained Search Templates remain authoritative, the Knowledge Base remains estimator-significance reference only, and model context capacity is unchanged.
v1.5.7 highlights
- Administrator-only User Activity Audit Log: all Estimator,
sudo, and Administrator activity can generate audit records, while only Administrators can view, filter, or export the log. - Change attribution: configuration-changing events retain the user identity at the time of the event plus object/project context and before/after details where applicable.
- Requested audit coverage: authentication, project access/management, Sheet Labeling starts, Project Review start/failure, ignored findings, Review Learning resets/explanation edits, Search Configuration changes, template changes, Knowledge Base view/edit/state changes, AI model assignments, and failed actions/API/review errors.
- No IP tracking: audit records contain no IP field or client address, and the packaged Uvicorn server runs with access logging disabled so the application container does not create client-IP request logs.
- Restore Points: Administrators can create named local rollback points for Review Templates, Knowledge Base, Review Learning/evidence, finding-display settings, Search Areas, and AI model configuration. Restoring creates an automatic pre-restore safety point first.
- Portable Backup & Restore: Administrators can export/import a checksummed
.aprbakarchive containing users/password hashes, projects, templates, Knowledge Base, Review Learning/evidence, settings/system configuration, and audit history. Active sessions and server secrets are excluded. - Optional project sources: full backups include project source documents by default. A history-only export can omit source PDFs while retaining project history, evidence, and generated exports.
- Fresh-server recovery: portable imports replace the persistent dataset after validation, require at least one enabled Administrator in the backup, clear imported login sessions, and refresh persistent application stores after restore.
- Large-backup-safe import: the Admin UI uploads portable backups in chunks, validates and inspects the completed archive server-side, then shows a backup summary for Administrator confirmation before any persistent dataset is replaced.
- Role-label cleanup: the configuration role is displayed as
sudothroughout the current UI. - Requested UI polish: first-name-only Projects greeting, lifecycle text removed above project names, Last active text +1 px, slightly larger main navigation, a truly smaller version badge, and explicit spacing between New Knowledge Card and Refresh.
v1.5.6 highlights
- Drilled Piers evidence merge: straight-shaft pier schedules, geotechnical founding depths, structural estimate-basis depths, and conditional casing language are combined deterministically when the template has already retrieved those pages.
- Concrete-strength filtering: bearing/base-plate grout and other grout/mortar PSI are excluded without losing adjacent structural-concrete schedule values.
- Construction quote parsing: unescaped inch marks in otherwise-valid structured JSON no longer truncate summaries such as
16" O.C.or1'-4" O.C.. - Main-navigation order: Projects → Project Review → Search Configuration → Review Learning → Sheet Labeling → Admin.
- UI consistency: smaller Knowledge Card controls, smaller project-card actions, smaller version badge, cleaner Knowledge Base header spacing, and consistent Review Learning typography.
- Safer Search Item deletion: separate explanatory destructive actions with exact-name confirmation and disabled delete buttons until the name matches.
- Admin cleanup: removes the source-retention informational banner.
v1.5.5 highlights
- Typical Items: one canonical Search Item can be shared across every Search Template; edits propagate automatically, new templates inherit Typical Items, and per-template exclusions are preserved.
- Protected Typical deletion: Administrator-only
Delete from This TemplateandDelete from ALL Templatesactions require exact Search Topic confirmation. - Copy To…: copy a Search Item to one or more templates, with Skip/Replace/Cancel conflict handling or optional conversion to a Typical Item.
- Multiple drawing sets: projects may retain more than one original PDF categorized as Drawings.
- Run Review readiness: entering Project Review refreshes AI availability automatically instead of requiring an Admin-page visit first.
- Projects search: immediate filtering on the Projects page.
- Finding popup display controls: Admin can globally show/hide each finding-detail section; Why It Matters, Estimator Significance, and Estimator Notes default hidden.
- Browser history/routing: Back/Forward and route-aware URLs restore project/workspace navigation.
- Depth-to-rock correction: top-of-rock depth is separated from rock penetration thickness and explicit Rock Excavation requirements are prioritized.
- Concrete-strength evidence ranking: direct project schedules/general notes outrank special-inspection exemption thresholds while grout/mortar PSI remain excluded.
- Knowledge Base cleanup: removes the visible estimator-reference status panel while retaining card authoring/testing/history.
v1.5.4 highlights
- Front-end Knowledge Card authoring: sudo/Administrator users can create and edit Concrete Knowledge Base cards directly from the existing card modal. Saving validates the card, automatically creates the next patch version, and activates it immediately in benchmark/reference mode.
- Knowledge Card tools inside the modal: Edit, Duplicate, Disable/Enable, Archive/Restore, Version History, and Test Card are available from the card view.
- Model Context Preview: the editor shows the exact rich estimator-reference block supplied to Qwen for significance interpretation.
- Persistent managed Knowledge Base overlay: user-authored cards/versions are stored under
/data/knowledge_base/managed; packaged Release 11 remains immutable. Production mode remains manifest-gated and cannot be bypassed by a managed card. - Knowledge Card test harness: paste sample project evidence and run the normal estimator-significance analysis against a selected card without searching or modifying a project.
- Groundwater interpretation fix: boring completion depth can no longer be reported as groundwater depth; only explicit groundwater/seepage labels establish water-depth values.
- Depth-to-rock improvement: built-in Depth to Rock searches add granite terminology, and explicit rock/granite evidence is promoted for estimator attention even where exact continuity/depth remains uncertain.
- Void-form refinement: explicit structural calls such as
VOID FORM ABOVEstill establish existence, while coordination/preconstruction mentions alone no longer create void-form scope. - Lightweight-concrete refinement: material/testing clauses may remain visible, but without a project-specific placement they are treated as expected/conditional rather than Potential Cost Impact.
- Concrete-strength filtering: non-shrink grout, masonry grout, and mortar PSI values are excluded from concrete-strength summaries.
- Review-cache version bookkeeping: diagnostics preserve the app version that initiated the review; the exporter also records the current export app version separately.
- Review Learning Keep cleanup: Keep clears the active Suggested Ignore state immediately while preserving the learning/audit counterexample.
- v1.5.3 navigation and worker isolation retained: users may continue working in other projects while the single Project Review worker runs.
v1.5.3 highlights
- Critical Project Review UI fix: removes the stale
count()sidebar dependency that causedcount is not defined, blocked completed-review rendering, and polluted the Admin Knowledge Base status after the v1.5.2 sidebar cleanup. - Navigate while a review runs: users can return to Projects, open another project, inspect prior results, use Sheet Labeling, Review Learning, Search Config, or Admin while the isolated review worker continues in the background. Only one Project Review may still use the local AI at a time.
- Persistent active-review indicator: the top bar shows the running project and live percent from a lightweight global status endpoint; clicking it returns directly to that project.
- Projects-card live progress: the project owning the review shows a
Review Runningbadge, current stage/topic, percentage, and compact progress bar. - Duplicate-start protection: Run Review disables immediately on the first click, ignores repeat clicks, and treats an HTTP 409 for the same already-running project as a status refresh rather than a failed start.
- Knowledge Base modal cards: the Admin card list is compact; selecting a card opens the full estimator-reference content in a modal, including Definition, estimator relevance, cost/risk indicators, guardrails, and Technical Details.
- v1.5.2 review/KB logic retained: no changes to template authority, KB significance-only role, worker isolation, sudo permissions, Void Form guard, Payment guard, or model context.
v1.5.2 highlights
- Potential Cost Impact Items: the estimator-facing priority section is simplified and renamed. Promoted items are no longer duplicated in the lower Search Results table.
- Cleaner Search Results: the
Exists?andSignificancecolumns are removed from the lower table. Evidence status is still preserved internally and in exports/cache. - Cleaner promoted cards: the redundant green Yes badge is removed; the estimator-significance badge is moved to the bottom-right and aligned with View Evidence / Ignore.
- Review Performance moved: workflow timing/AI diagnostics move to Project Documents directly below Categorize Project Documents.
- Project Review sidebar cleanup: document-count rows and the redundant Concrete Scope Review sidebar title are removed. Delete Project is removed from this workspace and Stop Review moves to that bottom sidebar position. The sidebar Export Review PDF control remains.
- Project Review header cleanup: the duplicate top-right Export Review PDF and Stop Review controls are removed.
- Tab cleanup: selected main tabs and nested tabs use filled active styling without the extra bright-blue underline.
- Review Learning spacing: Current Learning Patterns cards use compact, content-driven spacing.
- sudo permission profile: sudo inherits Estimator capabilities plus Search Config and Admin configuration/diagnostics, but cannot access User Management. Administrator remains the only role allowed to list/create/edit/reset users.
- Expanded Concrete Knowledge Base Admin view: reference cards expose estimator-facing fields such as Definition, Estimator Relevance, Project Evidence Indicators, Estimating Impacts, High Cost/High Risk Indicators, Scope Boundaries, Common Confusions, Do Not Assume, Estimator Checks, and Compact Context. Technical/audit metadata is secondary/collapsible.
- Knowledge Base panel cleanup: the visible title is
Concrete Knowledge Base; Mode, Loaded Cards, Invalid/Skipped, and Release summary cards are removed. - Void-form evidence guard: explicit structural drawing calls such as
VOID FORM ABOVEcan deterministically establish existence even when the model initially misses the condition. - Payment false-positive guard: bare Autodesk references without payment/billing/pay-application/cost-management context do not establish Payment.
- Qualifier preservation: significance prompts explicitly preserve conditional project language such as
may,if required,where indicated,when encountered, andas necessaryinstead of strengthening it into a definite requirement. - Richer KB interpretation context: significance analysis also receives the card Definition and Project Evidence Indicators in addition to the estimator-focused fields already used in v1.5.1.
- v1.5.1 worker isolation retained unchanged: heavy Project Review work stays in the dedicated subprocess that was confirmed responsive in multi-user use.
Knowledge Base operating rule
The authority boundary remains explicit:
- Human-maintained Search Templates define what the application looks for.
- Project documents determine whether the configured item exists and what the project requires.
- The Concrete Knowledge Base helps Qwen understand the estimating importance of an already-established result.
- General model knowledge may assist interpretation but may never manufacture a project fact.
Benchmark mode continues to load the approved/hash-matched Release 11 cards. Production mode remains fail-closed until its production manifest is explicitly opened. DRAWING_LABELER_KB_MAX_SECONDARY_TERMS remains a backward-compatibility setting only and is forced to zero.
Authentication and roles
Accounts are stored at /data/system/users.db with Argon2id password hashing and server-side sessions.
- Administrator: full estimating workflow, Search Config, Admin configuration/diagnostics, and User Management.
- sudo: full Estimator workflow plus Search Config and Admin configuration/diagnostics, but no User Management.
- User / Estimator: project creation, uploads, sheet labeling/selection, Project Review, Review Learning decisions, exports, and normal estimator workflow.
On upgrade from the v1.5.1 authentication schema, the users database is migrated automatically to permit the new sudo role while preserving existing users and active sessions. No manual database reset is required.
Review engine retained
- Existing PDF page labels matching
Sheet Number - Sheet Nameare reused. - Addenda participate as contract-document overlays.
- Per-sheet Project Review selection limits drawing OCR/review to included sheets.
- Persistent SQLite text/OCR extraction and inverted-index retrieval are reused across reruns.
- Search Templates remain the only project-search authority.
- Review Learning retains Ignore examples plus Keep/Restore counterexamples and stronger protection around costly/risky findings.
- Export Review PDF and Export Review Cache remain available.
- Project Review continues to run in a subprocess so the web UI remains responsive to concurrent users.
Factory Search Templates
- Concrete Scope Review — Typical — 39 items.
- Concrete Scope Review — Tilt-Wall — 58 items.
- Concrete Scope Review — Elevated — 60 items.
v1.6.10 does not reset existing projects, Review Learning, Search Templates, managed Knowledge Cards, or user data. Search Templates and managed Knowledge Cards remain persistent under /data.
Upgrade behavior to v1.6.10
Keep the existing /data mount. Do not reset or delete /data.
Existing projects, model configuration, accounts, Review Learning history, reports, templates, Knowledge Base data, and project data remain compatible. The existing authentication schema and sudo role are preserved. The dedicated Administrator Audit Log database remains at /data/audit/activity.db; no destructive persistent-data migration is required for v1.6.10. Legacy revoked API credential rows are removed automatically while API activity history is preserved. Existing projects and project numbers remain compatible.
The review text-index schema is bumped to 2, so existing review text indexes are invalidated and rebuilt automatically with the corrected extraction behavior when a review needs them. No project recreation, account recreation, template reset, Knowledge Base reset, or manual OCR/index deletion is required.
Ollama
Production Project Review now sends these per-request settings:
DRAWING_LABELER_REVIEW_CONTEXT_TOKENS=8192
DRAWING_LABELER_REVIEW_TEMPERATURE=0.1
think=false
think=false is enforced by the application request payload. The review context is also sent per request, so no ollama create, Modelfile rebuild, or Ollama shell change is required. Existing deployments carrying the former 4096 review-context value are automatically promoted to 8192 at runtime.
Sheet Labeling keeps its separate context settings.
Persistent data
Persist the entire /data directory. v1.6.10 preserves projects, custom templates, prior evidence, reports, Review Learning history, Auto-Ignore settings, users, sessions, audit history, and scoped API credentials/activity. The text-index schema remains at the v1.6.7 value (2), so v1.6.10 does not force an OCR/index rebuild. Administrator restore points are stored under /data/restore_points; the dedicated activity log is stored at /data/audit/activity.db.
Project Review model configuration:
/data/system/review_models.json
Search Areas:
/data/system/search_areas.json
API credentials and API activity:
/data/system/api_access.db
Development
cd /home/coder/Holland_Drawing_Labeler
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8090 --reload --no-access-log
Verify a release with:
./scripts/verify-package.sh
git diff --check