Commit Graph

2630 Commits

Author SHA1 Message Date
Дмитрий c78300d843 test(api): WebhookSettings — tenant-isolation + failure-path coverage (review M2/M3/M4)
Code-quality review of Task 4: adds a cross-tenant isolation test
(verifies the where(tenant_id) guard, matching ApiKeyControllerTest)
and a test()-endpoint failure-path test (HTTP 500 -> ok=false). Drops
the @return docblock from OutboundWebhookSubscriptionFactory for
consistency with ApiKeyFactory, eliminating a baseline entry at source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:21:52 +03:00
Дмитрий 746a4f5f18 feat(api): outbound webhook settings endpoints (closes J5 part 2)
Audit J5/D4/D5: the outbound_webhook_subscriptions table existed in
schema but had zero code. Adds the OutboundWebhookSubscription model +
factory and WebhookSettingsController with GET/PUT
/api/tenants/me/webhook-settings (one subscription per tenant; secret
generated + returned once on creation, bcrypt-hashed) and POST
/api/webhooks/test (unsigned connectivity check — HMAC-signed event
delivery is a separate post-MVP epic). Tenant-scoped via auth:sanctum +
tenant middleware.

phpstan-baseline.neon: additive-only entries for new test file
(Pest\PendingCalls\TestCall false-positives — documented project pattern)
and OutboundWebhookSubscriptionFactory method.childReturnType (same
pattern as ProjectFactory/TenantFactory/UserFactory already in baseline).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:13:32 +03:00
Дмитрий 3dc5891d70 refactor(api): ApiKeyController index() excludes expired keys (review M1)
Code-quality review of Task 3: index() filtered by is_active only —
an expired-but-active key would be listed as valid. Adds an
expires_at > now() filter plus a test. Cannot occur today (regenerate
is the only write path, always +1 year) but is the correct semantic
contract for an «active key» listing.

phpstan-baseline.neon: count bumps only for ApiKeyControllerTest.php
($tenant 5→7, $user 3→5, getJson 3→4).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:06:14 +03:00
Дмитрий 787b50bc36 feat(api): api_keys model + GET/regenerate endpoints (closes J5 part 1)
Audit J5/D3: the api_keys table existed in schema but had zero code.
Adds the ApiKey model + factory, and ApiKeyController with GET
/api/api-keys (list active keys, key_hash hidden) and POST
/api/api-keys/regenerate (deactivate prior + create new, full key
returned once, bcrypt-hashed in DB). Tenant-scoped via auth:sanctum +
tenant middleware (RLS on api_keys). phpstan-baseline.neon updated for
Pest PendingCalls false-positives in the new test file; also removes
8 pre-existing stale ignore.unmatched entries (properties now resolved
by existing @mixin IdeHelper* docblocks — confirmed pre-existing via
git stash test before Task 3 changes).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 21:53:35 +03:00
Дмитрий 3563217e9e refactor(settings): ProfileTab — document auth-guard assumption + tighten spec (review M1/M2)
Code-quality review of Task 2: documents why ProfileTab needs no
watch-resync of auth.user (router beforeEach awaits fetchMe before
requiresAuth navigation); tightens the save-error test to assert the
exact fallback message instead of mere truthiness.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 21:44:17 +03:00
Дмитрий 9df01eb301 feat(settings): ProfileTab wired to PATCH /api/auth/me (closes D1)
Audit D1: ProfileTab fields were hardcoded refs and the Save button had
no handler. Rewired to the auth store + a new api/auth updateProfile()
calling PATCH /api/auth/me. Single «Полное имя» field split into Имя +
Фамилия (matches users.first_name/last_name); decorative «Роль» field
removed (no such column). AuthUser type gains phone + timezone.

SettingsView.spec.ts updated: «Полное имя» assertion changed to check
for «Имя» and «Фамилия» (collateral fix for the intentional field split).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 21:37:40 +03:00
Дмитрий 67115be5bc test(auth): UpdateProfileTest — 422 coverage for empty last_name (review M1)
Code-quality review of Task 1: first_name had a 422 test but last_name
(identical required rule) did not. Adds the symmetric test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 21:30:13 +03:00
Дмитрий d7ae828504 fix(test): pin SyncSupplierProjectsJobTest clock before 20:55 MSK cutoff
SyncSupplierProjectsJob:77 has a time-budget guard that breaks the
sync loop after 20:55 Europe/Moscow. Five of the eight tests in
SyncSupplierProjectsJobTest omitted Carbon::setTestNow(), so they
inherited real wall-clock time and silently failed (job no-ops)
every evening after 20:55 MSK -- a latent test bug since dedaae5
(Plan 3), mis-attributed to a Redis race (quirk 72) in earlier audits.
Pins beforeEach to a fixed pre-cutoff clock; the job code is correct
and unchanged. Verified: 8/8 in isolation, full suite back to green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 21:21:36 +03:00
Дмитрий 8e06ada8fe feat(auth): PATCH /api/auth/me profile update endpoint (closes J6)
Audit J6: ProfileTab needs a full-profile update endpoint. Adds
AuthController::updateProfile (first_name/last_name/phone/timezone),
routed in the existing /api/auth auth:sanctum group; mirrors the
sibling updateNotificationPreferences. userResource() now also returns
phone + timezone so the GET /me round-trip carries them.

phpstan-baseline.neon updated for Pest PendingCalls false positives
in the new test file (same pattern as all other Feature test files).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 20:58:00 +03:00
Дмитрий a659390dd7 docs(plan): Sprint 2 Plan B — Settings (D1-D5 + J5 + J6)
Plan B of the Sprint 2 split — the Settings subsystem, 5 atomic TDD
tasks: PATCH /api/auth/me profile endpoint (J6); ProfileTab rewired to
real API (D1); ApiKey model + api-keys endpoints (J5/D3); outbound
webhook settings endpoints (J5/D4/D5); ApiTab full wiring (D2-D5).
Schema delta = 0 — api_keys + outbound_webhook_subscriptions tables
already exist in schema.sql.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 20:51:46 +03:00
Дмитрий 55a17d1817 fix(auth): LegalDocView v-alert role=note + trim back-link whitespace (review M-1/M-2)
Code-quality review of the legal stub pages: the always-present
informational v-alert defaulted to role=alert (assertive live-region) —
changed to role=note for a static advisory (WCAG 2.1 AA). Trimmed
cosmetic whitespace inside the back-link element.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 19:46:09 +03:00
Дмитрий be32d9121f feat(auth): /legal/offer + /legal/privacy stub pages (closes A7)
Audit A7: the «Оферта» / «Политика» links in the AuthLayout footer were
raw <a href> pointing at unrouted paths -> 404 via the SPA catch-all.
Adds a single DRY LegalDocView served by /legal/:doc(offer|privacy),
rendering an honest «document being finalized» stub (real legal text
needs юр. редактура — реестр K3 / blocker Б-1). Footer links upgraded
to <RouterLink> for SPA navigation. Also refreshes two stale auth-layout
doc-comments left by the /recovery removal (review M1).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 19:37:20 +03:00
Дмитрий 2b1af1c621 refactor(auth): remove orphaned /recovery RecoveryCodesView page (closes A2, A3)
Audit A2/A3: RecoveryCodesView (route /recovery) had a TODO no-op
continue handler and 8 hardcoded mock codes. Recon found the page is
orphaned — nothing in the UI navigates to /recovery. The real 2FA
recovery-codes flow lives entirely in Settings -> Безопасность
(TwoFactorCard setup wizard + RecoveryCodesCard regeneration), both
already wired to the real API. Per user decision (2026-05-15) the
orphan is deleted rather than polished.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 19:26:26 +03:00
Дмитрий 50dbee8a97 docs(plan): Sprint 2 Plan A — Auth (A2/A3 orphan delete + A7 legal pages)
Sprint 2 (P1 wave 1) split into 3 sub-plans per writing-plans
scope-check (Auth / Settings / Billing — independent subsystems).
Plan A covers the Auth subsystem:
- A2/A3: delete orphaned /recovery RecoveryCodesView (real flow lives
  in Settings -> Безопасность; user-approved deletion 2026-05-15).
- A7: /legal/offer + /legal/privacy stub pages via one DRY LegalDocView.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 19:21:30 +03:00
Дмитрий b5092f091c fix(security): harden impersonation/webhook/tenant — audit A2/A3/B3/C2
- A2: impersonation _dev_plain_code в ответе init только в local/testing
- A3: X-Tenant-Id принимается только в local/testing (anti-spoof тенанта)
- B3: WebhookReceiveController isHmacRequired() default false→true (fail-secure)
- C2: SupplierWebhookController per-IP rate-limit 600/min (DoS-guard)
- WebhookReceiveTest обновлён под B3 (отсутствие настройки → 401)

Tests: 70/70 passed (323 assertions) — Webhook/Impersonation/Tenant suites.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 19:16:13 +03:00
Дмитрий eaff693317 docs(tooling): sync v2.1 header version + history row (review) 2026-05-15 17:59:50 +03:00
Дмитрий 2e989081d7 docs(sync): PSR_v1 v3.1 + Tooling v2.1 — §14 queen-trigger cross-ref 2026-05-15 17:53:44 +03:00
Дмитрий 6045ac2568 fix(claude_md): §1 two explicit hard-rules + §0 v1.15 cell relabel (review) 2026-05-15 17:50:21 +03:00
Дмитрий b3c3697889 docs(claude_md): §14 queen-trigger refs — §1/§3.5/§0 (v2.1) 2026-05-15 17:44:12 +03:00
Дмитрий e95160be59 fix(pravila): §0 — clarify §12/§14 non-conflict (review) 2026-05-15 17:39:40 +03:00
Дмитрий dd20b4bace docs(spec): automation-graph iter5 — ruflo factual recollage design
Design spec for reworking the ruflo cluster on docs/automation-graph.html
to reflect factual runtime state (live MCP + filesystem inspection)
instead of the normative declaration: 7 fictional swarm roles removed;
real footprint added as summary nodes (100-agent catalog, 88 slash
commands, recall hook, "0 plugins / 0 skills" node); broken daemon
(spawn claude ENOENT) and idle hive (0 tasks) made explicit; fictional
delegation edges dropped. Map 85->83 nodes / 96->90 edges / 11 conflicts.

cspell-words.txt: +10 terms (Russian inflections + ENOENT).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:35:59 +03:00
Дмитрий e88e3fe04d docs(pravila): +§14 Ruflo Queen routing hard-rule (v1.15) 2026-05-15 17:34:00 +03:00
Дмитрий e418ee60a3 feat(ruflo): register queen-trigger hook in .claude/settings.json 2026-05-15 17:28:21 +03:00
Дмитрий c8b257f970 fix(ruflo): queen-hook isDiscussion — word-boundary guard (review) 2026-05-15 17:25:09 +03:00
Дмитрий 7d9510b56d feat(ruflo): queen-trigger UserPromptSubmit hook (TDD) 2026-05-15 17:17:27 +03:00
Дмитрий 2f87cf756d docs(plan): ruflo queen-trigger + delegation implementation plan 2026-05-15 17:12:12 +03:00
Дмитрий f2bc508313 docs(spec): ruflo queen-trigger + delegation hard-rule design
Brainstorming output: trigger words queen/королева -> unconditional ruflo
Queen routing (Pravila §14, new explicit hard-rule), enforced via
tools/ruflo-queen-hook.mjs UserPromptSubmit hook. Broader: proactive
ruflo-spawn proposal for non-trivial tasks. Cost-gate: preview + confirm
before paid hive-mind spawn --claude.

cspell-words.txt: +9 Russian IT-slang inflections for the spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:00:05 +03:00
Дмитрий f3c2165c20 fix(docs): Tooling_v8_3 — битую ссылку на удалённый форк → backtick-спан
Удаление docs/automation-graph-ruflo.html (automation-graph iter4, 1f60a23)
оставило битую markdown-ссылку в §«Связано». Конвертирована в backtick-спан
(как упоминания того же форка в CLAUDE.md) + нота «влит и удалён» —
исторический факт сохранён, pre-push lychee проходит.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:37:44 +03:00
Дмитрий 1f60a23538 chore(graph): remove automation-graph-ruflo.html fork — merged into main map (iter4)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:06:16 +03:00
Дмитрий 7e3fd275c8 docs(graph): refresh rule nodes + §12/sub-policy to v2.0 normative (iter4)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:56:36 +03:00
Дмитрий 3476f7dd50 docs(plan): ruflo H7 implementation addendum — onnxruntime dedupe
Records the key divergence found during subagent-driven execution: the
H7 fix needed onnxruntime-node dedupe in addition to the getBridge patch
(two incompatible onnxruntime-node versions => DLL collision). Documents
3 residual ruflo-alpha quirks and the post-ruflo-update re-apply step.

cspell-words.txt +dlopen (ERR_DLOPEN_FAILED token).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:50:11 +03:00
Дмитрий 0aca34590f fix(graph): ruflo delegation nodes — legacy refs to manages slot (iter4 Task 1 review)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:48:22 +03:00
Дмитрий fa0f292295 feat(ruflo): register UserPromptSubmit advisory recall hook
Wire tools/ruflo-recall-hook.mjs into .claude/settings.json so ruflo
memory recall is injected per prompt. Project-scoped, fail-open.
Absolute path (forward slashes) — robust vs Windows shell var expansion.
Verified: hook recalls stored entries, ~1.55s latency (under 3500ms cap).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:45:54 +03:00
Дмитрий 65923670a7 feat(graph): ruflo orchestrator overlay — +12 nodes / +22 edges / 3 conflicts (iter4)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:34:39 +03:00
Дмитрий a644c876b0 feat(ruflo): UserPromptSubmit advisory recall hook
Hook script that runs ruflo memory search per prompt and injects top
matches as additionalContext. Fail-open (error/timeout -> empty inject,
exit 0, never blocks). Pure-function core unit-tested via node --test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:34:33 +03:00
Дмитрий e5f8741b66 feat(ruflo): ruflo-h7-patch.mjs also dedupes onnxruntime-node
The H7 fix needs two operations on the global ruflo install: the
getBridge() patch AND disabling the duplicate nested onnxruntime-node
(@xenova/transformers' 1.14.0 vs the hoisted 1.24.3 — DLL name collision
=> ERR_DLOPEN_FAILED). The re-apply script now does both so the whole
fix survives a ruflo update.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:28:18 +03:00
Дмитрий 672a730514 docs(plan): automation-graph iter4 — ruflo big-bang merge implementation plan
5 задач: ruflo-наслой (12 узлов / 22 ребра / 3 конфликта) → рефреш под
нормативку v2.0 (4 узла-правила + §12/sub-policy) → удаление форка →
visual smoke → синхронизация memory. 3 атомарных коммита реализации.
cspell-words.txt +2 словоформы (тулбар/скила).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:24:39 +03:00
Дмитрий 8708808999 fix(ruflo): harden ruflo-h7-patch.mjs — argv guard + unknown-flag rejection
Code-review fixes: guard pathToFileURL against undefined argv[1];
reject unrecognised flags with exit 2 before any filesystem access
(prevents a --revert typo from silently applying the patch).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 14:36:56 +03:00
Дмитрий d12d9dc081 feat(ruflo): H7 patch re-apply script (getBridge -> null)
Idempotent script that forces @claude-flow/cli getBridge() to return null
so ruflo memory ops use the persisting raw sql.js path. Pure-function core
unit-tested via node --test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 14:27:14 +03:00
Дмитрий 8e19b52d91 docs(plan): ruflo memory H7 fix + advisory hook — implementation plan
8-task plan for the approved design (spec 1d4429c):
- D1 (Tasks 1-3): install standalone claude CLI, verify spawn --claude
- D2 (Tasks 4-5): TDD ruflo-h7-patch.mjs, apply patch, verify round-trip
- D3 (Tasks 6-7): TDD ruflo-recall-hook.mjs, register UserPromptSubmit hook
- Task 8: memory update + push

cspell-words.txt +3 entries used by the plan.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 14:15:14 +03:00
Дмитрий 1d4429c52a docs(spec): ruflo memory H7 fix + advisory hook — design
Design for 3 deliverables (brainstorming output):
- D1: install standalone claude CLI to unblock hive-mind spawn --claude
- D2: fix H7 memory-persistence bug — patch getBridge() so memory ops
  use the persisting raw sql.js path instead of the non-flushing
  AgentDB-v3 bridge
- D3: UserPromptSubmit advisory hook injecting ruflo memory recall

cspell-words.txt +11 Russian IT-slang inflections used by the spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 14:00:47 +03:00
Дмитрий 21d296cdfc docs(spec): automation-graph iter4 — ruflo big-bang merge design
Дизайн слияния ruflo-наслоя в каноническую docs/automation-graph.html.
Решения brainstorming: одна карта (форк удаляется), честный гибрид
(Queen уровнем −1 + конфликт-маркер «декларация ≠ parallel subsystem»),
полный рефреш под нормативку v2.0. +12 узлов / +22 ребра / 8→11 конфликтов.
cspell-words.txt +4 словоформы (форке/наслой/нормативке/рефреш).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 13:25:37 +03:00
Дмитрий da0a43acaa feat(ruflo): activate runtime — daemon-as-service + hive-mind + real embeddings
Полная активация ruflo runtime (заказчик: «Активировать ruflo runtime» →
«Полная (daemon-as-service + hive-mind spawn)»). Закрывает paper/runtime gap
из Phase 3-4 нормативной инверсии.

Что активировано:
- ruflo установлен глобально (npm i -g ruflo — стабильное дерево вместо
  ephemeral npx-cache; решает module-resolution для embeddings)
- Daemon ACTIVE под PM2 (ruflo-daemon, 5 workers); reboot-survival через
  Windows Task Scheduler PM2-ruflo-daemon (pm2 resurrect onlogon — ruflo
  native install-supervisor только launchd/systemd, pm2-windows-service
  deprecated+broken non-interactive → Task Scheduler fallback)
- Hive-mind ACTIVE — Queen-led (hierarchical-mesh/byzantine) + 9 worker-агентов
- Memory init — sql.js .swarm/memory.db + реальные embeddings
  Xenova/all-MiniLM-L6-v2 384-dim (sharp/libvips fix: @xenova/transformers
  hard-deps sharp, prebuilt libvips timeout'ит — curl tarball в npm-cache/_libvips)

Repo-изменения:
- .gitignore +.swarm/ +ruvector.db (ruflo runtime state, не tracking)
- CLAUDE.md §3.5 + §6 «Runtime state» — paper-level → runtime active
- Tooling §4.10 «Runtime state» — аналогичный sync

Verification:
- Phase A gate: Pest 742/739/3sk/0 + Vitest 92f/774/3sk/0 + vue-tsc 0 ✓
- ruflo doctor: 10 passed / 7 warnings (alpha/optional)
- Pest --parallel post-activation: 0 регрессий от ruflo. 1 intermittent error
  классифицирован pest-parallel-debugger агентом (11 runs) как quirk 72 —
  ruflo grep-подтверждённо не трогает Redis :6379, worker-jitter лишь
  усиливает частоту pre-existing flake (suite green 739/739/0/3 5× verified)

Известные alpha-bugs (документированы):
- ruflo memory store CLI не персистит между invocations (in-memory sql.js)
- daemon worker-jitter усиливает Pest quirk 72 — пауза pm2 stop ruflo-daemon
  на baseline regression
- $-расход near-zero: ruflo doctor «No API keys found», daemon не делает
  платных LLM-вызовов; cap $10/день в .env.local + PM2 env как belt

Daemon-resurrect helper: C:\Users\Administrator\ruflo-daemon-resurrect.cmd
(machine-level, вне репо). Effective state: runtime активен.

Related: ruflo big-bang Phase 3-4 нормативная инверсия (cc732c8/a08635d/
25b80bb/93c945a/0266b77), spec/plan 2026-05-15.
2026-05-15 12:31:53 +03:00
Дмитрий 0266b7729a docs(sync): Phase 4 cross-refs sync + CHANGELOG_claude_md.md +v2.0 entry — ruflo big-bang Day 4
Ruflo big-bang Phase 4 Task 4.1 — закрывает нормативную инверсию.

Изменения:
- CHANGELOG_claude_md.md: +v2.0 entry (полное описание Phase 3-4 — 4
  normative rewrites Pravila v1.14 / PSR_v1 v3.0 / CLAUDE.md v2.0 /
  Tooling v2.0 + effective-state candor)
- CLAUDE.md §6: «Tooling v2.0 (pending)» → «(commit 93c945a)»
  («(pending)» annotation stale после всех 4 Phase 3 commits)
- PSR_v1 история версий v3.0 entry: «CLAUDE.md/Tooling v2.0 (pending)»
  → commit hashes 25b80bb/93c945a
- cspell-words.txt: +«спеке» (Russian locative inflection of «спека»)

Cross-refs audit (plan §4.1.1): проверены v1.13/v2.1/v1.17/v1.93 refs
во всех 4 normative files — все current-state cross-refs корректно
bump'нуты в Phase 3 commits; остаточные старые версии встречаются
только в frozen changelog entries + «Введено в vX» исторических
маркерах + «vX+» forward-compat нотации (не stale).

Phase 3-4 завершён: Pravila v1.14 (cc732c8), PSR_v1 v3.0 (a08635d),
CLAUDE.md v2.0 (25b80bb), Tooling v2.0 (93c945a), sync (this).

Related: ruflo v3.7.0-alpha.38 integration via spec/plan 2026-05-15
(be734b8/570364c/70b6826/dbd930b); Phase 1-2-5-6-7 prior session.
2026-05-15 11:22:14 +03:00
Дмитрий 93c945adea docs(tooling): §0 35 → 55 + new §4.10 Orchestration layer (ruflo) — v2.0 (ruflo big-bang Day 3)
Ruflo big-bang Phase 3 Task 3.4 (финальный). Major bump v1.17 → v2.0:
ruflo формализован как четвёртая off-phase подкатегория «orchestration».

Изменения:
- Header v1.17 → v2.0, date 15.05.2026
- §0 summary table: +row «ruflo orchestration layer» (+20 plugins);
  count «35 формализованных позиций» + 20 ruflo plugins = 55 total
- §0 «Назначение» line — sync stale «33» (pre-v1.17 oversight) → 35+20=55
- §4.9 +note «Категории off-phase tools (v2.0)» — 4 подкатегории
  (UI-пул / infrastructure / debug-runtime / orchestration)
- §4.10 (new) «Orchestration layer (ruflo) — entry-point иерархии»:
  npm package + repo + namespace, 20 plugins / ~210 MCP tools / 60+
  agents, архитектурная роль (entry-point level −1), категория,
  установка (commit 61cd01a), cost-budget, runtime state candor
  (daemon/swarm/memory НЕ активны — opt-in MCP, paper-level), IPFS
  gateway risk, Связано-links
- §11/§12 — sync stale «33» → «35» (pre-existing v1.17 oversight)
- История версий: +v2.0 table row + footer note

Effective-state candor: §4.10 явно фиксирует — scaffold installed,
MCP server в .mcp.json, но daemon/swarm/memory не initialized; ruflo
доступен как opt-in MCP (7-й из 7), не enforcing Queen-led overlord.

Phase 3 завершён (4/4 normative rewrites): Pravila v1.14 (cc732c8),
PSR_v1 v3.0 (a08635d), CLAUDE.md v2.0 (25b80bb), Tooling v2.0 (this).
Pending Phase 4: cross-refs sync + CHANGELOG_claude_md.md +v2.0 entry.

Related: ruflo v3.7.0-alpha.38 integration via spec/plan 2026-05-15
(be734b8/570364c/70b6826/dbd930b).
2026-05-15 11:18:09 +03:00
Дмитрий 25b80bb67d docs(claude_md): §1 +уровень −1 ruflo + §3.5 orchestration + §5 п.10 sub-policy note + §6 ruflo phase — v2.0 (ruflo big-bang Day 3)
Ruflo big-bang Phase 3 Task 3.3. Major bump v1.93 → v2.0: 8-level → 9-level
priority chain, ruflo Queen-led routing на уровне −1 (entry-point).

Изменения:
- Header v1.93 → v2.0 (architectural inversion description + полный
  legacy tail v1.93→v1.86 preserved)
- §0 cross-refs: Pravila v1.13 → v1.14 (commit cc732c8), PSR_v1 v2.1 →
  v3.0 (commit a08635d), Tooling v1.17 → v2.0 (§4.10 Orchestration layer)
- §1 priority chain: +уровень −1 «ruflo Queen-led routing (entry-point)»
  над уровнем 0; уровни 0-6 byte-identical (становятся execution layer);
  +trailing explanation
- §3 title «35 инструментов» → «35 + ruflo orchestration layer»;
  +§3.5 (new) «Off-phase orchestration: ruflo»; §3.5 «Заметки к
  settings.json» renumber → §3.6
- §5 п.10: +inline sub-policy note (claude-md-management остаётся
  preferred channel через ruflo routing; ruflo agents могут править
  напрямую при явном routing-decision)
- §6: +2026-05-15 ruflo big-bang integration paragraph над «Post-MVP»
- §9: +v2.0 entry

Effective-state candor: §3.5/§6/header/§9 явно фиксируют paper-level
architectural commitment — ruflo daemon/swarm/memory НЕ initialized
2026-05-15; ruflo доступен как opt-in MCP tool, не enforcing Queen-led
overlord. Технические компенсаторы (gitleaks/RLS/dev DB) сохраняются.

Прямой Edit per plan §1.4 — user-authorized exception к §5 п.10
(claude-md-management обязательный канал не применён по решению
заказчика для нормативной инверсии).

Pending Phase 3 sibling: Tooling v2.0. Phase 4: cross-refs sync +
CHANGELOG_claude_md.md +v2.0 entry + «(pending)» annotations cleanup.

Related: ruflo v3.7.0-alpha.38 integration via spec/plan 2026-05-15
(be734b8/570364c/70b6826/dbd930b); Phase 3 commits cc732c8/a08635d.
2026-05-15 11:07:51 +03:00
Дмитрий a08635d32f docs(psr_v1): R0 stack-gate → sub-policy paired-stack delegation pattern — v3.0 (ruflo big-bang Day 3)
Ruflo big-bang Phase 3 Task 3.2. Major bump: R0 «единый stack и обязательный
gate» → «Sub-policy: paired-stack delegation pattern (под ruflo Queen-led
routing)».

Изменения:
- R0 title rewrite (sub-policy framing)
- R0.1 «Уровень и головенство» — добавлен top row «−1. ruflo Queen-led
  routing (entry-point, v3.0+)»; PSR_v1 row «— это и есть stack» → «sub-policy
  ruflo routing»
- R0.2 «Обязательный gate» — первый параграф переписан: ruflo первой,
  stack-gate как sub-policy через routing-decision. Subsequent R0.2 sub-points
  + ASCII gate diagram сохранены (semantic tension — diagram pre-v3.0
  visualization, кандидат на follow-up polish)
- R0.6 «Hard-стоп даже в Auto mode» — добавлен пункт 11 (sequential
  continuation после v2.0 R15 removal; spec литерально писал «п.12», но
  фактический list содержит 1-10, sequential = 11): «ruflo Queen routes
  task как autonomous swarm, но human absent для review — pause до review»
- Принцип-аксиома (line 10) переформулирован под ruflo: stack — головной
  при решении задач, маршрутизированных в paired-stack sub-policy через
  ruflo (entry-point −1)
- Header version v2.1 → **v3.0**, date 13.05.2026 day +1 → 15.05.2026
  afternoon, summary paragraph + narrative tail
- История версий: v3.0 entry на верху (sequential continuation note)
- Cross-refs: CLAUDE.md v1.88+ → v2.0+, Pravila v1.11+ → v1.14+ (commit
  cc732c8), Tooling v1.16+ → v2.0+ (§4.10 Orchestration layer)

R0.3 «Структура stack'а», R0.4.A SoT cross-ref на Pravila §12.3, R0.4.B
live-команды table, R0.5, R1-R14 правила — preserved untouched.

Pending Phase 3 sibling: CLAUDE.md v2.0, Tooling v2.0. Phase 4: cross-refs
sync + CHANGELOG_claude_md.md +v2.0 entry.

Related: ruflo v3.7.0-alpha.38 integration via spec/plan 2026-05-15
(be734b8/70b6826/dbd930b/cc732c8).
2026-05-15 10:59:02 +03:00
Дмитрий cc732c8d5f docs(pravila): §12 hard rule → sub-policy + §5 ПДн execution-layer note — v1.14 (ruflo big-bang Day 3)
Ruflo big-bang Phase 3 Task 3.1 — переводит §12 Superpowers из «hard rule» в
«sub-policy под ruflo Queen-led routing» (routing preference для interactive
turns; не absolute block). §12.2 карта 14 типов задач + §12.3 exclusions SoT
+ §12.4 details сохранены содержательно — меняется только framing.

§5 ПДн получает execution-layer note: gitleaks pre-commit фильтр —
технический compensator, не зависит от regulatory hierarchy, продолжает
работать выше ruflo routing.

§0 priority chain + §0 «Особый статус §12» note синхронизированы с
sub-policy framing. PSR_v1 cross-refs в §11.5/§13.2/§13.9/§13.10 bumped
v2.0/v2.1 → v3.0+ (R0 → sub-policy). CLAUDE.md → v2.0+, Tooling → v2.0+
в changelog block.

Pending Phase 3 (sibling normative rewrites): PSR_v1 v3.0, CLAUDE.md v2.0,
Tooling v2.0. Phase 4: cross-refs sync + CHANGELOG_claude_md.md +v2.0 entry.

Related: spec docs/superpowers/specs/2026-05-15-ruflo-integration-design.md
(be734b8+570364c), plan docs/superpowers/plans/2026-05-15-ruflo-big-bang-integration.md
(70b6826+dbd930b), Phase 2 install 61cd01a, map fork 60793aa.
2026-05-15 10:50:09 +03:00
Дмитрий dbd930bd7e fix(plan): broken relative links in §4.1.2 CHANGELOG entry template
Phase 6 lychee regression выявил 2 broken-link в
docs/superpowers/plans/2026-05-15-ruflo-big-bang-integration.md:680 —
template для CHANGELOG_claude_md.md entry имел relative paths
`(specs/...)` и `(plans/...)` которые резолвились в
docs/superpowers/plans/specs/... и docs/superpowers/plans/plans/...
(double-prefix, файлы не существуют).

Fix: changed к correct relative form:
- specs/... → ../specs/... (parent dir)
- plans/... → 2026-05-15-ruflo-big-bang-integration.md (same dir, bare
  filename)

Per Pravila §4.7 п.4 + memory quirk 76: relative paths from plans/specs
require explicit `../<sibling>/` или bare filename для same-dir.

Lychee post-fix: 487 OK / 0 errors (was 485 OK / 2 errors pre-fix).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 10:29:28 +03:00
Дмитрий 60793aa8c7 feat(graph): automation-graph-ruflo.html — fork iter3 с ruflo overlay
User's primary asked deliverable: «отдельный проект карты с его внедрением»
(2026-05-15 session). Fork of docs/automation-graph.html iter3 (commit
47e16a8) with ruflo big-bang overlay (TO-BE structure).

Map additions vs source:
- GROUPS: +ruflo (orange #ff8800, top-of-hierarchy semantic)
- NODES: +10 ruflo (Queen в верхнем-левом углу за пределами radial-sector
  + 9 swarm-roles в circle ~180px вокруг Queen: Architect, Coder,
  Security, RLS-reviewer, QA, Tester, Reviewer, Memory-keeper, Daemon-worker)
- EDGES: +18
  * 9 Queen → swarm (подчиняет)
  * 4 Queen → group-centroids pravila/claude_md/psr_v1/tooling
    (перенял sub-policy)
  * 5 swarm → legacy execution-layer (делегирует TDD/RLS/HNSW/PM2)
- CONFLICTS: +3 BLACK «возник на практике»
  * Queen ↔ pravila: alpha-tool overrides hard-rule §12
  * daemon ↔ mem_state: static .md vs HNSW dual-system синхронизация
  * Queen ↔ mcp_pw: IPFS gateway flaky (Pinata + Cloudflare failed
    2026-05-15) → plugin discovery offline риск
- HTML: comment header с source/spec/plan refs; title updated
- footer cat-legend: +🌊 ruflo Queen + swarm item (filter-key
  group:ruflo)

NOT in scope этого commit'а:
- subPolicy:true overlay для 73 legacy nodes (polish item, plan §5.4)
- Visual smoke в Edge — manual task для пользователя
- Phase 3-4 normative file rewrites — DEFERRED to separate session

cspell vocab additions для Phase 3-5 normative rewrites (lowercase per
user-dict case rule): sub-policy, queen-led, hive-mind, orchestrator,
autopilot, poincaré.

Refs:
- spec docs/superpowers/specs/2026-05-15-ruflo-integration-design.md
  (commit be734b8 — base + 570364c — Phase 1 sync)
- plan docs/superpowers/plans/2026-05-15-ruflo-big-bang-integration.md
  (commit 70b6826 — base + 570364c — Phase 1 sync)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 10:27:47 +03:00