م
MBF OS
نظام تشغيل الشركة

تقدّم البناء

ما بُني حتّى الآن، أوّلًا بأوّل. الصفحة تُحدَّث تلقائيًّا كلّ عشر دقائق — وكلّ سطرٍ فيها مأخوذٌ من المشروع نفسه لا مكتوبٌ بيد.

آخر تحديث: 2026-10-29 15:10

اختبارات تمرّ
100
تأكيدات
761
إيداعًا
60
صلاحيّة
88
مسارًا
647
جدولًا
165
هجرةً
324
حسابًا محاسبيًّا
48
الفحص الليليّ: يحتاج انتباهًا

يعمل وحده كلّ ليلة — الأمان وسلامة الدفتر وأنّ الواجهة تعمل فعلًا في متصفّحٍ حقيقيّ. العطب لا ينتظر أن ينشر أحدٌ شيئًا.

الدفتر
متوازن
ملاحظات توقف النشر
2
الواجهة في المتصفّح
فيها خطأ
آخر فحص
2026-10-29 03:36
أوّلًا بأوّل

سجلّ العمل

آخر عمل: منذ 51 دقيقة
اليوم 29/10/2026 · 20 إيداعًا
14:24 docs(tasks): the project page's conditions P-01..P-15 for the owner's 12:40 and 12:55 orders, by the Tasks manager (THE ONE PLAN 2c, first routed job); ORDERS (A)2: 2a ✓ 6874ba91, 2b ✓ f5204523 3c4fb6e7
14:22 feat(sentinel): the Sentinel works without a model — mbf:sentinel-sweep --cycle every five minutes, its run on the map when it changes (THE ONE PLAN 2d; Mac 29 Oct 10:20 point 3) c43e13ec
14:12 feat(agents): the scope lock — a section's agent writes only inside its section, refused by a hook, not promised (THE ONE PLAN 2b; owner 29 Oct 10:45) f5204523
14:08 feat(agents): every agent has one job — Role, Trigger, Reads, Returns (ending in RESULT), Done-check, Manager, Limits, each definition ≤47 lines (THE ONE PLAN 2a; Mac 29 Oct 10:20, 10:50) 6874ba91
12:51 docs(orders): (C)29 closed — both HR notifications resent and delivered (12:37, f0be1292 · 9fbb5aca · c9b04d9d); (C)30 keeps point A; the owner's 11:20 placement into step 4 1edfca34
12:50 feat(money): the owner's named exception — the super-admin sees an agreement's amount, nothing else (owner 29 Oct 11:25; rule 22 text) a7a10269
12:36 fix(queue): the models a payload carries resolve from their old names too — each section declares its 53 moved models (L-421) c9b04d9d
12:10 fix(queue): an old payload's values land too, and each section declares its own moved names — the Platform keeps only the mechanism (L-420) 9fbb5aca
11:54 fix(queue): a payload queued before a decision-029 move opens after it — the 23 moved queueable classes resolve from their old names, lazily (L-419; owner 11:20, ex-(C)29) f0be1292
10:50 docs(orders): (A)2 is THE ONE PLAN (Mac 10:50) in its five steps; (C)29 closed by the landing (1ac31822); (C)29–30 the two new owner questions 4bfca82a
10:48 refactor(modules): decision 029 — the Accounting move (a) and the Tickets, It, Partners, Workspace and Agents modules landed live in the owner's window (ex-(C)29; down 10:17:45 → up 10:17:58, every check equal) 1ac31822
10:14 fix(money): a client's money is for the money readers alone — the super-admin role no longer passes ClientMoney (rule 22; found by the Workspace manager) f8a3ae96
09:58 docs(lessons): L-417 — the live pulse belongs in the pulled fragment; a5b8a5b6 cited it before its edit landed 5a16fde0
09:58 feat(agents): every section's live pulse — its last run, the result, and what is open — in the strip the agents page pulls every 20 seconds (owner 28 Oct 19:00 §2; Mac 29 Oct 08:55) a5b8a5b6
09:57 feat(agents): one manager per section — the departments are decision 029's fourteen sections, their pages and faults placed by the census (owner 28 Oct 19:00 §2; Mac 29 Oct 08:55) abe004a5
09:51 docs(orders): (A)2 — the five modules built and joined with Accounting in one proven landing patch; (C)29 asks one short window for it f385c664
09:23 docs(orders): (A)2 in the owner's 09:15 order — foundation ready, then the agents, then HR and Accounting (Mac 08:55 stop note) 05eccd4c
08:56 fix(agents): a run with no stop is not shown working forever — past six hours it reads blocked, "no stop recorded" (Mac 29 Oct 08:55) c4102cba
08:56 fix(agents): the lead's card names the newest hand-off, never a twenty-hour-old note (Mac 29 Oct 08:55) 35d44d49
08:50 fix(agents): a stop carries its result again — a run that ends with a SubagentHandback call is read from that call's message in its transcript (Mac 29 Oct 08:55) ec3c95f2
أمس 28/10/2026 · 40 إيداعًا
23:34 docs(orders): (C)29 — the Accounting move (a) is built and statically proven in a worktree; landing it needs artisan down, refused to me without a new owner window; the five sections done (e3603f2c) 919d123e
23:25 feat(map): the five sections the owner approved are modules — Agents, Workspace, Partners, Tickets, It (owner 28 Oct 19:40, ex-(C)28; decision 029 amended) e3603f2c
23:21 fix(orders): the register back under 8,000 characters (7,975) — 9a3bf2b7 went in at 8,010 without its size test (red, then green; L-412) fbe4e702
23:21 docs(orders): (A)2 the HR move done — four sub-steps live, full22 green (4,372), pushed; the five owner-approved sections next 9a3bf2b7
22:24 fix(tests): the row-leak guard no longer reads Request::create() as a database write — it builds an HTTP request; TheModuleLayoutStandsOnItsSourcesTest writes no row (full21 red, then green) 754fbb43
22:24 fix(tests): the deleted-record guard reads every queued notification, a module's own included — it read app/Notifications only, so the HR move took five out of its sight (full21 red, then green with them checked) 58d35bed
22:24 fix(team): the agents' Sources blocks name the HR classes where they now live — 46 names after the HR move (full21 red EveryAgentNamesItsSourcesTest, then green) ec395d27
21:24 refactor(hr): decision 029, the HR move (c) — HR's 90 routes into app/Domain/Hr/routes/{web,public,api}.php, each required from routes/*.php where its routes stood; landed live under the owner's 20:00 approval (down 21:19:16 → up 21:19:24) b2eb3259
21:18 refactor(hr): decision 029, the HR move (d) — 149 HR tests under tests/Feature/Hr and tests/Unit/Hr (their sub-folders kept), and one module guide app/Domain/Hr/CLAUDE.md (≤60 lines) in place of the two section guides f91ea7ae
21:18 fix(attachments): the stored type is read by the model — Attachment::attachableClass() resolves it through the morph map, and the controller calls it in place, back to its 425 lines (81f1cb9c grew it by 3 with the ratchet red; L-411) 15b86328
21:16 fix(attachments): a moved model's paper opens again — the controller reads the stored type through the morph map; since the HR move (a) an employee got 403 on her own leave paper (live 20:07 → now; L-410) 81f1cb9c
20:42 refactor(hr): decision 029, the HR move (b) — the 41 HR views into resources/views/hr/…; only view contexts rewritten, never a route name; landed live under the owner's 20:00 approval (down 20:19:56 → up 20:21:09) 24e096fe
20:19 docs(orders): (C)29 closed — the owner's 20:00 window; the HR move (a) landed (dc174ca4), (b)–(d) next b0d97826
20:19 refactor(hr): decision 029, the HR move (a) — 144 HR classes into app/Domain/Hr/{Attendance,Leave,Payroll,Employees}; landed live in the owner's 20:00 window (down 20:03:50 → up 20:07:57) with every check equal dc174ca4
19:54 fix(orders): the register back under 8,000 characters (7,996) — 33f2d764 went in at 8,009 with its size test red, then green; L-407 833d246c
19:54 docs(orders): (C)29 — the HR move's sub-step (a) is built and statically proven in a worktree; landing it needs artisan down on live, which is refused to me — the owner allows the window or runs the steps (PROGRESS, top) 33f2d764
19:42 docs(decisions): 029 — how a class moves without changing a stored row: the morph map keyed by the old name, databaseType() for notifications, #[UseFactory], policy discovery, Rector + the script's own namespace line, Support/ for services, the four sub-steps; each read in the framework source v13.34.0 and measured on live with mbf:stored-classes (before the first move, owner 17:30) e98b6152
19:40 build(dev): rector/rector 2.6.4 as a dev tool — RenameClassRector renames every reference of a moved class (use, names, types, new, instanceof) for decision 029's mechanical moves; never shipped (bin/deploy installs --no-dev) 150a501e
19:39 docs(orders): (C)28 closed — the owner's 19:40 yes: Agents, Workspace, Partners, Tickets and IT are sections, each its module; the 029 amendment comes right after the HR move 424eb8fa
19:37 feat(platform): mbf:stored-classes — read only, every App\ class name the database holds, by table, column and value: the list a move's morph map must cover and the proof after it (decision 029, the HR move) 952c637d
19:33 feat(map): no file is placed by a word in its name — the 510 keyword placements read one by one: 51 corrected in ModuleRules (IncomeTax was Marketing by "incoMETAx"; vendor/ mail and pagination; the person's own account; the client portal's invoice and billing; the IT desk's sites and hosting; the studio, the partners' portal, the tickets' clock), the 459 confirmed written in reviewed-placements.php (owner 28 Oct 19:00 checklist §1) 18756206
19:29 feat(map): a closure route is placed by its written URI — the six closures (home, go, up, the gateway refusal, payroll's and the notes' old addresses) each have their section; an unwritten one stays unplaced (owner 28 Oct 19:00 checklist §1) 49a6de82
19:26 docs(orders): (A)2 the module map done (c5d5c715, 94547a20); (C)28 asks the owner for the five sections decision 029 does not list (148 files wait on the Modules tab) 4c7227bf
19:24 feat(map): every file has a written reason — ModuleRules places the 301 files no rule held, each read from its own purpose; the sections decision 029 does not list wait for the owner with their proposed module, never counted placed (owner 28 Oct 19:00 checklist §1) 94547a20
19:14 feat(map): the file-to-module map — every PHP file, Blade view and route of one commit placed in decision 029's modules, the unplaced listed by name, the crossings A→B counted; the Modules tab on /system/map and its JSON census (owner 28 Oct 16:00 step 1, 17:30, 19:00 checklist §1) c5d5c715
18:45 docs(orders): (A)2 decision 029 done (e2536bb0); the file-to-module map is next (owner 28 Oct 17:30: one step at a time) 50546ca0
18:45 docs(decisions): 029 the module layout — one folder per section, joined only through Queries, Events and Platform contracts; each rule cited (Laravel 13 docs, PSR-4/Composer, Grzybek, Shopify, Fowler, Spatie) and the routing/config rules read in the framework source v13.34.0: module routes are required from routes/web.php in place (providers boot before web routes load; the first match answers) (owner 28 Oct 16:00, 16:10, 17:25, 17:30) e2536bb0
17:41 fix(agents): /agents carries the one name the sidebar gives it — "Company agents" — and the section-names guard reads lang keys and each action's own view (full19 red on 4b2e3e89 SectionNamesAreOneNameTest, EnglishCoversWhatItPromisesTest; then green; baseline shrinks; L-406) e01b6a33
17:38 fix(map): the system agents screen's first act reads at a glance — under 40 characters, in both languages (full19 red on 4b2e3e89 EveryScreenSaysWhatItAnswersTest, then green) ddfbb156
17:37 fix(ops): the errors door's nginx comment no longer reads as a committed secret — the secret scan matched "secret: no" (full19 red on 4b2e3e89, then green) 79f78885
17:37 fix(errors): the errors door's token route is held to 10 writes a minute, its own bucket — a public write may not inherit a read's limit (full19 red on 4b2e3e89 NoPublicDoorStandsWithoutALimitTest, then green) 528252dc
17:36 test(security): the isolation fuzz names the three new doors it cannot fuzz — an agent card key and the errors door's token are not models (full19 red on 4b2e3e89, then green) a2fece61
16:37 docs(orders): the foundation project enters (A)2 after the map merge — decision 029 with cited sources first (owner 28 Oct 16:00 APPROVED, 16:10); done lines moved word for word to docs/archive/ORDERS-done-2026-10-28.md; (C)1 asks the loan's counter-account 7e00a20d
16:36 feat(map): the system agents' pages, kept apart from the company agents — teams, profile, work, runs, live; the errors door through PHP-FPM; the watches exit on their health (owner 28 Oct 14:05, 14:10; L-405) 4b2e3e89
15:23 docs(method): the full run stays serial — parallel errors here even on recreated databases (Mac 28 Oct 15:25; L-370, L-404) 5b6bb4ca
14:41 fix(map): the two reds of the full run on 41de2fc3 — the map's one-line @php block, and the Agents tab's free text registered; full runs go --parallel (Mac 28 Oct 14:36) 5add7ba8
13:41 feat(team): the agent team and its live map — the department managers, the Sentinel and the errors agent, TEAM.md, the frozen foundation, the hook log and the Agents tab with notes; proved by a real agent run on the tab (owner 28 Oct 10:00–13:05; L-403) 41de2fc3
13:12 feat(security): money is read by the money readers alone — the owner, the Accounting department's manager and its active members, derived at request time; never a role, a super-admin included (owner 28 Oct 11:50, refined 13:00; L-402) 8645c5ec
12:44 feat(platform): the UTC run's proof and runbook — mbf:time-census counts every timestamp column per local hour before and after, and ops/utc/run-utc.sh runs it on a test copy, then on live (owner 28 Oct, ex-(C)16) 58fe973d
12:40 fix(test): the map's privacy check matches a leaked figure as a token — "615" inside a commit hash is not a leak (L-401) 5017eeb9
الخطّة

ستّ مراحل

0
البنية
خادم · قاعدة · بيئات منفصلة · نظام تصميم
قائمة
1
العمود الفقريّ
الصلاحيّات · التدقيق · ترابط البيانات
3 وحدات
2
الأقسام
اللوحة · الليدز · الأداء · بوّابة العميل
5 وحدات
3
المال والموارد البشريّة
الدفتر · الذمم · الرواتب · قانون العمل
7 وحدات
4
التدقيق الرقميّ
الفحص · الاستراتيجيّة · تقارير العملاء
3 وحدات
5
التصلّب
الأمان · الأداء · اللحظيّة · التوثيق
3 وحدات
ما يعمل الآن

الوحدات الحيّة

لكلّ وحدةٍ قاعدةٌ واحدة تلخّص ما تمنعه — مفروضةٌ في الكود لا موصوفةٌ في وثيقة.

محرّك الصلاحيّات
/employees

لا يُمنح ما لا يُملك. المسمّى الوظيفيّ لا يمنح شيئًا، والمنح المؤقّت يُسحب تلقائيًّا.

سجلّ التدقيق
/audit

append-only على مستوى القاعدة: كلّ تغييرٍ بقيمته قبل وبعد، ولا مسار حذفٍ أصلًا.

تكامل GoHighLevel
webhook

توقيعٌ مُتحقَّقٌ منه، ومعالجةٌ لا تتكرّر مهما أعاد المصدر الإرسال.

نبض الشركة
/dashboard

اللوحة تتبع صلاحيّة رائيها: ما لا يملكه لا يُبنى له أصلًا.

مركز قيادة الليدز
/leads

الرقم الغائب يُعرض غائبًا: بلا ردٍّ أوّل لا زمن استجابة، ولا نسبة من عيّنةٍ صغيرة.

العملاء والمشاريع
/clients · /projects

الأختام الزمنيّة تتبع الحالة ولا تُعاد كتابتها، ولا يُسنَد عملٌ لموظّفٍ معطَّل.

مركز الأداء
/performance

كلّ رقمٍ يتفرّع إلى من صنعه، ويُفسَّر ما خرج من مقامه ولماذا.

بوّابة العميل
/portal

قيدان في كلّ استعلام: لا يرى عميلٌ عميلًا آخر، ولا يرى عملًا داخليًّا.

محرّك قانون العمل
قواعد

نصوصٌ مستوثَقةٌ من مصدرها بالمادّة والرابط، وما لم يُثبت لا يُطبَّق ولا يُخفى.

الإجازات وملفّ التوظيف
/leaves

لا أحد يعتمد إجازة نفسه، والرصيد يُفحص عند الاعتماد لا عند الطلب.

الدفتر العامّ
/accounting

لا قيد بلا توازن، والمُرحَّل لا يُمسّ — التصحيح بقيدٍ عكسيّ.

الفواتير والشيكات
/invoices · /cheques

الشيك وعدٌ لا نقد، وفرق الصرف يُقيَّد في حسابه لا يُبتلع في التحصيل.

الرواتب والقسائم
/payroll

ثلاثة تواقيع لا اثنان: من أعدّ لا يراجع، ومن راجع لا يعتمد، ومن اعتمد لا يقفل.

تقارير الفروقات
/accounting/variance

كلّ فرقٍ يحمل القيود التي صنعته، ولا نسبة من صفر — الأساس الصفريّ «جديد» لا 100%.

تقييم الأداء
/evaluations

نموذجٌ لكلّ طبيعة عمل، ولا يقيّم أحدٌ نفسه، والموظّف يرى تقييمه ويعلّق عليه.

محرّك التدقيق الرقميّ
/audits

لا ملاحظة بلا دليلٍ مقيس، وما لم يُفحص يُعلَن — غيابه ليس شهادة سلامة.

مولّد خطّة 90 يومًا
/strategies

كلّ بندٍ مردودٌ إلى ملاحظةٍ لها دليل — ولا خطّة تُولَّد من لا شيء.

تقرير العميل
/reports

رابطٌ موقّعٌ ينتهي ويُسحب، بلا أسماء موظّفين ولا مهامّ داخليّة.

تدرّج الصلاحيّة
نطاق · حجب · تصدير

الصلاحيّة تقول ماذا، والنطاق بمن، والحجب أي حقول، والتصدير هل يخرج من النظام.

التصلّب الأمنيّ
bin/gate

بوّابةٌ توقف النشر عند أوّل عطبٍ حرج، ومصادقةٌ ثنائيّة على الخطر وحده.

اللحظيّة
/live

عدّادٌ يُرفع عند كلّ تغيير — وإن لم يتغيّر لا تُمسّ القاعدة إطلاقًا.