Commit Graph

2630 Commits

Author SHA1 Message Date
Дмитрий cafc161b17 test(imitation): scenarios E1/E2/F freezes + limit 2026-06-04 04:25:00 +03:00
Дмитрий 0a0efe05bf test(imitation): scenario D delivery days 2026-06-04 04:19:30 +03:00
Дмитрий 631e3cc4f4 test(imitation): scenarios B/C region cascade 2026-06-04 04:14:57 +03:00
Дмитрий 4ee84f8fb8 test(m1): foundation cross-invariants (journal tamper / unsigned receipt / runtime deny) 2026-06-04 04:05:10 +03:00
Дмитрий c22ed0b767 feat(m1): runtime-write-deny — block any path-bearing tool (P10-a all channels) 2026-06-04 04:04:25 +03:00
Дмитрий df23a7a6f8 feat(m1): pathNormalize NFC normalization (P10-b unicode evasion) 2026-06-04 04:01:17 +03:00
Дмитрий 3cb8404343 feat(m1): signed askuser approval records (P10-c HMAC receipts) 2026-06-04 03:59:38 +03:00
Дмитрий 8d724055eb fix(imitation): correct seedPhoneRange columns + import_id FK (F1)
ImitationTestCase::seedPhoneRange used non-existent columns (range_from/range_to/region_name) and omitted the required import_id FK, so every Россвязь-branch test that called it failed. Now seeds a phone_ranges_imports anchor row and inserts phone_ranges with the real columns (def_code/from_num/to_num/operator/region/subject_code/imported_at/import_id), mirroring the verified RossvyazPrefixLookup parsing. Found during Task 5.
2026-06-04 03:54:22 +03:00
Дмитрий 8df2bdaa35 test(imitation): scenario A weighted lottery + distribution stats 2026-06-03 20:21:22 +03:00
Дмитрий ad458bc535 test(imitation): region resolution cascade coverage 2026-06-03 20:08:49 +03:00
Дмитрий b7a2f66cb9 fix(migrations): clean migrate:fresh resilience (partition parent guard + delta idempotency)
Restores a working migrate:fresh without the reverted blanket catch-all. (1) MonthlyPartitionManager::ensureMonth skips a partitioned table whose parent does not exist yet (targeted pg_class relkind='p' guard) instead of crashing — the initial schema-load runs partitions:create-months before later delta-migrations create their own partitioned tables. (2) migration 0001 runs with $withinTransaction=false so the schema.sql DDL is committed before partitions:create-months opens its second pgsql_supplier connection. (3) re-applies the clean idempotency guards on add_balance_freeze (DROP POLICY IF EXISTS) and add_paused_at (column/index existence checks) since schema.sql already contains those objects. migrate:fresh now rebuilds liderra_testing cleanly; MonthlyPartitionManagerTest 15/15 incl. new resilience guard test.
2026-06-03 20:01:55 +03:00
Дмитрий 7af294e411 plan: детальный TDD-чертёж Машины 2 (Замок плана + Верховный хук)
Стоит на фундаменте Машины 1. 9 задач: freeze/seal плана (HMAC), детерминированный
матч действие-шаг (op+object, без LLM), персист, семена D12/D13, default-deny decide,
runGate+fail-CLOSED, авто-аудит дверей P15-b, сверка план-след P25-d, инварианты.
Проектные решения A-G помечены явно для ревью владельцем.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 19:43:56 +03:00
Дмитрий a21554152d feat(imitation): test clients + single-project matrix seeder 2026-06-03 19:37:49 +03:00
Дмитрий 2cdbb9d4f2 feat(m1): action-journal — append-only hash chain + HMAC head anchor + JSONL persist 2026-06-03 19:18:08 +03:00
Дмитрий 74ab81a91d feat(m1): receipt-sign — canonicalJson + HMAC signPayload/verifyReceipt (fail-closed) 2026-06-03 19:16:28 +03:00
Дмитрий 6920678e4e feat(m1): receipt-key-config — HMAC key resolution (keychain -> env -> null) 2026-06-03 19:15:25 +03:00
Дмитрий ba37291170 plan: детальный TDD-чертёж Машины 1 (Фундамент) — журнал S1, подпись расписок, защита-пол
10 задач TDD: receipt-key-config (keychain) + receipt-sign (HMAC) + action-journal
(хеш-цепочка + подпись головы) + усиление runtime-write-deny/path-norm/read-path-deny
+ подписанные askuser-расписки + сквозной self-verify. Заземлён в реальный код.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 19:10:16 +03:00
Дмитрий ceb7637876 feat(imitation): snapshot forge + condition levers 2026-06-03 19:09:12 +03:00
Дмитрий 78c2e1bde3 revert(imitation): drop out-of-scope migration edits from 6f81d136 + dead webhook_log test
Reverts 6f81d136 production-migration edits (load_initial_schema withinTransaction=false + try/catch, idempotency guards) and coupled migrate:fresh guard tests to baseline; imitation suite uses DatabaseTransactions on a pre-migrated DB so the reverted migrate:fresh resilience is not needed for Phase 1. Also drops the orphaned ensureMonth webhook_log test (webhook_log removed from PARTITIONED_TABLES in 2026_05_24_140000_drop_legacy_webhook_artefacts).
2026-06-03 18:58:13 +03:00
Дмитрий 45e5454d0e fix(hooks): parse Pest JSON reporter in verify-record + escape dot in tdd-real-test regex
enforce-verify-record extractTestMetrics now recognises the project Pest JSON reporter ({"result":"passed/failed",...}); previously every Pest run was recorded as a failed sentinel, blocking all Pest-verified commits (mirrors enforce-tdd-gate fix 5dbd6dfe). enforce-tdd-real-test-verifier TEST_FILE_RE second dot escaped so .env.testing is no longer false-matched as a test file.
2026-06-03 18:51:02 +03:00
Дмитрий ee2ef32389 plan: проход правок мастер-карты (счёт несущих, покрытие D/OQ, зависимости, теневой режим) 2026-06-03 18:39:05 +03:00
Дмитрий 80f968b260 plan: мастер-карта стройки роутер-наставник (7 машин, порядок, покрытие)
Master coordination roadmap из готового дизайна (судья A-I + роутер-наставник +
пред-спека хуков). 7 машин с порядком сборки, инвариантами, точками стыковки и
коверидж-таблицей (26 пунктов хуков + 12 to-build + 7 несущих усилителей).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:43:28 +03:00
Дмитрий 332ec6a523 docs(router-mentor): 3.4/3.5 закрыты — обучение роутера только по одобрению владельца 2026-06-03 17:10:20 +03:00
Дмитрий 25df82af09 docs(router-mentor): аудит хуков, 26-пунктная карта, два прохода усилений, чистовой список 2026-06-03 17:02:39 +03:00
Дмитрий 6ec60891f7 docs(imitation): session handoff for phase 1 resume (worktree, state, 2 open decisions, subagent rules) 2026-06-03 16:57:18 +03:00
Дмитрий 6f81d13612 chore(imitation): Task 0.5 — test env, reference-seed base, migrate:fresh resilience 2026-06-03 16:49:23 +03:00
Дмитрий 29ec68d3cc docs(imitation): plan — execution status + corrections (namespace, subject codes, Task 0.5 env provision) 2026-06-03 16:25:52 +03:00
Дмитрий 0cd6063af6 feat(imitation): deterministic fake DaData phone client 2026-06-03 15:35:46 +03:00
Дмитрий 39d9b0b51b docs(imitation): Task 0 — pin verified signatures + plan corrections 2026-06-03 14:57:48 +03:00
Дмитрий 08924e3920 docs(imitation): phase 1 client-imitation spec + implementation plan 2026-06-03 14:52:08 +03:00
CoralMinister 045f781d5c Merge pull request #43 from CoralMinister/feat/deals-city-region
Feat/deals city region
2026-06-02 13:48:18 +03:00
CoralMinister 627f415ef0 Merge pull request #42 from CoralMinister/feat/gate-allow-worktree-cd
Feat/gate allow worktree cd
2026-06-02 13:47:47 +03:00
Дмитрий 1a746087f0 feat(deals): backfill command for «Город» on existing deals
deals:backfill-region-city fills deals.city from the lead resolved_subject_code (deals -> supplier_lead_deliveries -> supplier_leads) for deals where city is still empty, idempotently and across all tenants (BYPASSRLS). --dry-run reports the count without writing. Whitelisted in artisan-run.yml (dry-run read-only; real run requires confirm_apply). TDD: +4 tests GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 13:38:10 +03:00
Дмитрий 5dbd6dfe08 fix(tdd-gate): recognize pest JSON reporter failures as RED
composer test / php artisan test emit machine JSON ({"result":"failed",...}); command-not-found and error REDs lack the English Failed keyword the gate looked for, so legit RED runs went unseen and prod-code edits were wrongly blocked. hasFailingTestRun now also matches the structured failure markers. TDD: +1 test; full tools suite 2004 GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 13:35:05 +03:00
Дмитрий e62edb5b69 feat(deals): fill «Город» (deals.city) with resolved region name
The UI «Город» column binds to deals.city but nothing ever populated it — the region was only stored as a numeric code on supplier_leads + the resolution log. RouteSupplierLeadJob now writes the resolved subject name (RussianRegions::CODE_TO_NAME) into deals.city on deal creation (the lead's real region, even if subject_code is substituted on routing step 3), and updates it in the CSV-merge branch when the webhook resolution outranks the tag. New deals now display the region. TDD: +2 tests in RouteSupplierLeadJobTest; 24 job tests GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 13:16:31 +03:00
Дмитрий 9f6bd2bd46 feat(router-gate): support git -C path for worktree dev
Shell resets cwd each call so a worktree cd does not persist; pointing git at the worktree dir is the cwd-independent way to commit there. classifyGitCommand now strips the leading working-dir flag before all checks, so the real subcommand is classified and all hard-patterns (hook-bypass, force-push, force-add, config-injection) plus the push-main-guard still apply. TDD: plus 6 tests; full tools suite 2003 GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 13:14:35 +03:00
Дмитрий 22e7ac278b feat(router-gate): allow cd into project worktree dirs for worktree dev
PR #41 re-scope enabled 'git worktree' creation but not working inside worktrees: only 'cd app' was whitelisted, so pest/git could not run in a worktree. Add a SAFE_EXACT rule allowing cd into a path with a worktree-/v4-stream- segment, excluding .. and protected segments (.claude/.ssh/.env/runtime/.git) so the cwd-shift read-bypass stays contained. TDD: +6 tests; full tools suite 1997 GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 13:04:15 +03:00
Дмитрий 69a66604f4 docs(router-mentor): судья пройден полностью A-I + полный граф узлов + риск-фильтр роутера
Дизайн «роутер-наставник» (brainstorm-стадия, не канон):
- Полный граф+каталог узлов 100% роутеру и судье (отменено код-сужение; кэш, обновление на добавление узла в 4 местах)
- Риск-фильтр у роутера (бывш. W1+W2): тройка где-сломается/больно/откатимо, чинит сам, без блока
- Судья B (вход) / C (граница по обратимости) / D (Sonnet на воротах + код-сверка на исполнении)
- Качество плана и скилов = мерило + совет; дисциплина судьи; H (реакция владельца)
- Дыры I-1..I-4 + 3 призрака разобраны (I-2 закрыт, остальное аут/остаток)

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
2026-06-02 12:56:11 +03:00
CoralMinister 2cb427b589 Merge pull request #41 from CoralMinister/feat/gate-dev-prod-rescope
Feat/gate dev prod rescope
2026-06-02 09:41:03 +03:00
Дмитрий e5df19b0e6 feat(gate): re-scope router-gate — allow local dev, keep prod+discipline blocks
composer/npm moved from hard-blacklist to whitelist; git dev-allow (commit/add/branch/switch/checkout/stash/worktree) + push main-guard in shared shell-content-rules; read-only GitHub (get_*/actions_get/actions_list) in mcp-classifier. Prod-safety (deploy/prod-DB/secrets/workflow-triggers/MCP-write), discipline hooks, and main push/merge stay blocked. Spec+plan in docs/superpowers. tools regression 1991 GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:32:39 +03:00
CoralMinister 4470c6c224 Add files via upload 2026-06-02 08:11:37 +03:00
Дмитрий f054a126dc docs(router-discipline): critical review - 7 holes + pre-spec discipline question
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
2026-06-01 19:20:11 +03:00
CoralMinister 115f310dcf Add files via upload 2026-06-01 19:07:51 +03:00
CoralMinister 658afb4f1e Add files via upload 2026-06-01 18:48:18 +03:00
CoralMinister 3859b361f0 Add files via upload 2026-06-01 18:11:59 +03:00
CoralMinister 1930932f33 Add files via upload 2026-06-01 18:10:26 +03:00
CoralMinister b60ce844ff Add files via upload 2026-06-01 18:05:01 +03:00
CoralMinister 5736afb11d Add files via upload 2026-06-01 18:01:02 +03:00
Дмитрий 6cb627f905 docs(router-discipline): D29-D36 + router equipment catalog (6 groups)
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
2026-06-01 16:28:09 +03:00
CoralMinister 7d44960302 Add files via upload 2026-06-01 16:26:02 +03:00