# Воспроизведение QA П12 Код приложения не меняется. Сценарии существующего FakeTime выбирались в одноразовом процессе контейнера, подключённом к БД стенда. Сборка stt-251: t-12345-p12-time@2765d80636. ## Ручной факт ошибочно устарел Предусловия стенда уже подготовлены через API: согласованное назначение Анны в проекте 2 у РП проекта 2; ручной факт 7 ч за октябрь 2026. Ручной факт проекта 1 — 99 ч; в ноябре — 77 ч. В Time сценарий project-one покрывает только проект 1. Выполнить через MCP stand_exec (name=stt-251, service=web) команду argv [node, --input-type=module, -e, SCRIPT, project-one], затем ту же команду с последним аргументом unavailable. SCRIPT: ```js import {Database} from './dist-test/adapters/db/database.js'; import {TimeSync} from './dist-test/server/modules/sync/time.js'; import {FakeTime} from './dist-test/adapters/time/fake.js'; import {randomUUID} from 'node:crypto';const db=await Database.open(process.env.DATABASE_URL);const source=new FakeTime();source.scenario=process.argv[1];if(source.scenario==='unknown-project'){const read=source.read.bind(source);source.read=async(...args)=>{const p=await read(...args);return {...p,items:p.items.map(x=>({...x,sphereTaskId:x.sphereTaskId+'-qa-unknown-project'}))};};}const clock={now:()=>new Date().toISOString(),today:()=>new Date().toISOString().slice(0,10)};try{const result=await new TimeSync(db,source,source,clock,{next:randomUUID}).import({principalId:'00000000-0000-4000-8000-000000000006',displayName:'Администратор',grant:null,admin:true},{month:'2026-10'});console.log(JSON.stringify(result));console.log(JSON.stringify((await db.query('SELECT external_id,quarantine FROM time_raw_entry WHERE snapshot_id=$1',[result.snapshotId])).rows));}finally{await db.close();} ``` Открыть /reports/utilization?month=2026-10 на https://stt-251.stand.yakutov.com, выбрать «РП проекта 2», нажать «Войти». Факт 7 ч, источник «Ручной ввод», но отображается «Факт устарел» с пояснением про Time. API возвращает source=manual, snapshotId=null, lastSuccessAt=null, stale=true. Это воспроизведено и под РМ с фильтром projectId=20000000-0000-4000-8000-000000000002&search=Анна. Ожидается, что сбой Time для другой покрытой области не меняет актуальность ручного источника. Предложение теста: L2, existing setup из tests/module/actuals.test.ts: ручные 99/7 ч, source.scenario=project-one, успешный import; source.scenario=unavailable, import; actuals(scope только project2) -> actual=7, source=manual, stale=false, даты Time нет. L5 — тот же сценарий под РП проекта 2. ## Нет факта в ресурсном плане После успешного импорта baseline/corrected открыть /plan?month=2026-10 под РМ, раскрыть Анну, переключить FTE/ч/%. Видны только плановые 35,2 ч и по 17,6 ч на проекты (UI округляет 35/18). Факт из Time (1/2 ч проекта 1) и дата последнего успеха нигде не отображаются; API /api/v1/plan не содержит actual и метаданных факта. Ожидание — REQ-013 docs/spec.md: рабочий план показывает данные источника с датой актуальности. Сравнить с /reports/utilization?month=2026-10&projectId=20000000-0000-4000-8000-000000000001&search=Анна, где факт и дата есть. Предложение теста: L4/L5 — импорт 1 ч, открыть ресурсный план, проверить факт/источник/дату отдельно от плановых часов; corrected -> 2 ч, unavailable сохраняет 2 ч и дату с пометкой, recovery снимает пометку. Проверить 1366×900 и 390×844.