Eliminate cost drift in estimate revisions

Job-level rules now stay pinned between revisions, so estimate totals remain consistent across runs.

Bug Fixes

Estimate costs for job-level items (mobilization, dumpster fees, surcharges) were intermittently changing between revisions because they routed through a non-deterministic AI matcher. The same scope inputs could return different rule sets each run, drifting totals by hundreds of dollars.

Job-level rules are now pinned to specific price code selectors at the rule layer and resolved deterministically, bypassing the AI stage entirely. This keeps costs locked in across all revisions.

Additionally, work areas without assigned scope now appear as section headers with a "No scope" caption, so you can see what's missing instead of silent empty sections.