☰ Contents
AISA v2.0 / Technical documentation / Development module — typical cases

Development module — typical cases

F verified factP decided planC open challenge

What this page is. The recurring shapes of customer-specific development on Bulstrad's line as the two repositories show them, not as the design assumed them. It complements Development Module § 5, whose eight walks (C1–C8) were chosen to stress the architecture; here the only questions are how often does this happen, where in the tree does it land, how does it reach PROD, and what does the module do with it. Nineteen cases, ordered by frequency × pain; each names its commits, its tickets where any exist, its placement seam, its delivery shape and its walk through the stages of Development Module § 1. Shape labels are heuristic — subject plus touched paths, spot-checked by hand — so neighbouring shapes may trade ± 10 %.

0. What the census says F

  1. The customer line is 300 backend and 134 UI non-merge commits since 01.06.2025 — about 19 and 8 a month, a 71-commit peak in 07.2025 and troughs of 4–5 — written directly on the environment branch: none of the 15 staging merges is a merge-request merge (all are push/pull syncs of the same branch), and the whole estate holds two SD-named branches (fix/SD-1709-broker-name-search, both repos, 05.2026; an older UI field-generator-fix-SD-405]-).
  2. Ticket traceability is 2.7 % (backend) and 8.2 % (UI) by commit message, 5.3 % and 12.7 % after hand-linking through the ticket analyses. The rest arrives as HDesk requests, as verbal asks („Client complains about this warning, so it is commented out", 17.07.2025) or as Ablera-internal streams.
  3. Customer-specific by path: 43 % of backend commits (90 plugin-, customer-service- or riskmodel-only, 39 mixed with shared code); a further 150 commits touch PAS services that exist as code only on the customer linesrc/BusinessInsurance/* on master holds 319 files and no .cs, against 2 259 .cs on staging — so „core file" and „customer file" are not separable on the flat layout. The true customer share lies between 43 % and 93 %.
  4. The largest single stream is the reinsurance module: 84 commits (28 %), one author, 06.2025 → 08.2026, no ticket — a customer-funded module, which the module's charter („never new modules") excludes.
  5. Nothing reaches master by commit id (0 of 300, 0 of 134); 171 (57 %) backend and 91 (68 %) UI subjects reappear there by hand re-application, eleven master commits naming their staging source. Ports run in five directions — staging → master, staging → prod, master → staging (9), prod → staging (10 on 15.07.2025), and prod-only work — not the one the module draws. bulstrad-prod carries 52 re-applied and prod-only commits since the 21.01.2026 merge base.
  6. PROD gets a UI fix the same day as staging in 9 of 9 measured tickets, a backend fix the same day in 4 of 6 (36 days for SD-1863; never, as of 07.09.2026, for the SD-1709 backend half, the flat-rate change and the FRAME series). „Deploy and verify on staging, then cherry-pick" is nominal; H5 will be the first real gate.
  7. Ticket → staging commit is 0–1 day in 11 of 13 measured pairs (17 d for SD-1863; 385 d for SD-524). The eight tickets in status Next Release (SD-547 since 14.07.2025, SD-1161, SD-1618, SD-1702, SD-1873, SD-2007, SD-2138, SD-2143) have no matching commit — a queue the module never reads.
  8. A case is a series, not a commit. Seventeen exact-duplicate subjects (Add a call to DB function ANNEX_PPLAN.PP_generate() × 5 in one week), 43 subjects with series markers (part #2, Reupload, Reapply, Post port fixes, trigger rebuild × 5), 18 revert-type commits.
  9. Two estate facts the module page had wrong or missing. .claude/rules/code-changes.md is present on all four origin refs of both repositories (last touched 14.04.2026; the staging blob differs from master's) — the fix rule exists and is not practised; and bulstrad-test is the staging branch's former name (renamed 22.10.2025 in both repos; the backend one is an ancestor of staging, the UI one diverges on 29.10.2025 with two orphan commits). UI bulstrad-staging was force-rewritten on 04.09.2026 (backup/bulstrad-staging-pre-rewrite-20260904 kept, one commit dropped).
  10. Deployment is a manual job outside the repo. CI builds and pushes the image on push (branch = tag); .deploy_job runs the serdica-infrastructure Ansible playbook when: manual, and the staging configs/deploy-jobs.yml names only demo2 and marketing-demo — the Bulstrad targets live in serdica-infrastructure (consistent with D130). Only 3 of 300 commits carry a .sql file; the SR_MESSAGES, CFG_PRINT_DOCS and POLQRY rows the code expects are applied by hand.
serdica-backend shape n share ticketed (message / any) customer-only / mixed on master (subject) on prod
REINS-STREAM — reinsurance module 84 28 % 0 / 1 16 / 22 59 66
CUST-FEATURE — small extension, no ticket 51 17 % 0 / 3 9 / 3 36 38
DEFECT — fix, no ticket 37 12 % 0 / 1 8 / 1 22 26
PRINT — BstPrintDocuments, template selectors 20 7 % 7 / 7 13 / 1 16 15
PRICING-FILTER — riskmodel Python 15 5 % 0 / 1 15 / 0 11 14
PRODUCT-PROCESS — BPMN + user tasks 14 5 % 0 / 0 8 / 5 6 8
CI-PIPELINE 12 4 % 0 / 0 1 / 0 2 6
EURO-CURRENCY 11 4 % 0 / 0 6 / 0 7 11
BRANCH-RECONCILE (prod → staging) · PORT-FROM-MASTER · REVERT 10 · 9 · 8 9 % 0 0 · 0 · 1 10 · 7 · 5
INTEGRATION (INSIS, LDAP, Bul SI, IdentityServer) 8 3 % 0 / 1 6 / 1 3 7
CONFIG-APPSETTINGS only · PERF · DEPENDENCY · TOOLING · GRAPHQL-SCHEMA · DEFECT-SD 6 · 4 · 4 · 3 · 3 · 1 7 % 0 / 2
Total 300 8 / 16 90 / 39 (+7 by subject) 171 (57 %) 222 (74 %)
serdica-ui shape n share ticketed on master on prod
UI-DEFECT — fix, no ticket 41 31 % 0 / 1 34 40
UI-FEATURE — extension, no ticket 37 28 % 0 / 3 27 34
UI-LOCALE-NUMBER — bg number and decimal series 14 10 % 0 9 14
DEFECT-SD — ticket in the message 11 8 % 11 / 11 5 10
EURO-CURRENCY · TOOLING · I18N-LABEL 7 · 5 · 4 12 % 5 · 0 · 4 7 · 2 · 4
PORT · CI · INTEGRATION · REINS · PRINT · PERF · PRODUCT-PROCESS · RECONCILE 15 11 % 0 / 1 7 14
Total 134 11 / 17 91 (68 %) 125 (93 %)

Seam touches on the backend (a commit may touch several): PAS services 150 · Bulstrad plugins 88 · shared NuGet libraries 39 · platform services 36 · appsettings 34 · Bst* customer services 28 · CI 19 · riskmodel 18 · tests 16 · .sql 3. Product codes in subjects: 4710, 2200, 2222 (× 3 each), 3606, 4704 (× 2), 3408, 3635, 3443, 3607, 4711, 3400.

1. The eight walks, re-read against the census F

Case Verdict Evidence
C1 claims-search on bulstrad-qa architecture test — not a customer-line case Claims has no files on staging or prod; the QA line is master's health lineage. The mixed-seam shape it stresses is real (39 mixed backend commits) but arrives as DV-04 and DV-11, not as a QA feature
C2 SD-1863 POLQRY stub typical (seam 3) 12 of the 39 code-defect tickets name a SRD_INTEGR package (SD-1550 INS_DM, SD-1574 / 1587 INS_BOF.Deductible, SD-1659, SD-1836 TR_LIB_PROP, SD-1838 cDuplicateMTPL, SD-1927 TR_AFTER_TRANSFER, SD-1964 / 2180 TR_ANNEX_MC, SD-1997, SD-2063 TR_LIB_ACC, SD-2151 ABC_LIB_MOTOR); the C# print half recurs as DV-02
C3 formly DEPENDENT_ON_FACTOR not a development case — the page says so itself field-generator.ts was touched seven times on staging; the recurring UI work is validators, dialogs and locale (DV-09, DV-10)
C4 port across layouts typical, not as written 0 of 434 commits reach master by id, 262 by hand; the example (38 files) is a plugin consolidation, the median port is 1–7 files, and ports also run master → staging (9), prod → staging (10), staging → prod (52 since 21.01.2026)
C5 per-branch appsettings.json typical as a side-effect 34 of 300 commits bundle it, 6 are appsettings-only; nobody asks for it
C6 Camunda process for a product typical 14 product-process commits, 168 .bpmn files on the branch; products 3606, 3635, 3408, 3443 / 3607, 3400, 2200 / 2222; four of them have no master counterpart; HDesk 00085986 „нов продукт" → SD-1699 open since 19.05.2026
C7 KI-044 six-owner fix set architecture test the incident is real and „incident → clamp" recurs (DV-16, 6 commits); the six-owner matrix happened once
C8 clamp as a standard change typical delivery, rare content staging first, re-applied to master by the same author eleven days later without a GitLab-issue proposition, UI twin on a fix/ branch; PERF is 4 of 300

Four of the eight are typical, one typical in delivery only, two architecture tests, one configuration. The eight miss the seven most frequent real shapes (DV-01 … DV-07).

2. The cases

Format: ask · evidence · placement · delivery · verification · walk · variants · coverage today. Seams as in Stage Planning § PL-1: 1 customer plugin · 2 customer service · 3 DB-resident PL/SQL · 4 core on the customer line; „flat-layout core edit" means the code sits in a PAS service that on master would be a plugin or PolicyAdministrationSystem/*.

DV-01 — Product process (BPMN + user tasks) for a new or changed product. Ask: the Bulstrad product team via HDesk or Jira (00085986 „нов продукт" → SD-1699; SD-2007 „нов застрахован обект по 3618", Next Release). Evidence: 14 backend commits — c37e140c76 06.07.2026 (3606), 06cf05bf4e 02.09.2026 (3635 + 3606), 71e6418af4 04.09.2026 „Reupload Product 3408", 7a71135a66 05.03.2026 „Product Codes 3443 And 3607 Fix", 2faacd860b 15.09.2025 (2200 / 2222 steps), c0cd227fad 16.07.2025 (a 457-line fork for 3400), 7f0830ed93 renewal post-steps. Placement: seam 1, src/Core/Plugins/Core.Plugin.Bulstrad/Processes (+ SharedProcessServices); on master src/Serdica/Core/__Plugins. Delivery: direct commit → the Core restart uploads the BPMN → prod cherry-pick (8 of 14 on prod); no master port for four of them — „no master counterpart" is the norm here. Verification: start the product's issue process on staging; the Camunda deployment version bumps; a test policy reaches APPROVED. Walk: Hd from Configuration → S1 seam 1, no proposition → S3 Camunda developer → S4 process test → S6 image set + BPMN version → H5 → S9 = re-upload of the previous BPMN version. Variants: new product, step change, „Reupload" (the same file re-deployed), a product-code typo, an environment-specific override. Coverage: C6 (one instance), G24–G27.

DV-02 — Print-document rules and BI Publisher parameters. Ask: the customer via Jira — the best-ticketed shape (19 PRINT tickets in the desk census; SD-593 / 434 / 433, SD-526 / 641, SD-1863, SD-1823). Evidence: 20 backend commits — 2336a6239c 04.06.2025 (CNT_COPY / CNT_DUPLICATE), c25dfc7cb4 29.07.2025, 337dd5ca20 + 2e9b508a0a 01 / 04.08.2025, edc22daf79 ChkCover 22.10.2025, 0561840d4f + 52de8b3721 SD-1863 19 / 21.07.2026; the template-selector series 4412bdf9ef6bff307d6507207c3e947e56082620 (24.10–07.11.2025), a33dec52df / 2f3d2337ac EUR documents; UI aaa4c33d8, dcf0944f2. Placement: seam 2 Integrations/BstPrintDocuments (13 of 20 customer-only) + the shared Operations.PremiumCalculation library (selectors, NuGet) + CFG_PRINT_DOCS rows + POLQRY (seam 3) + BI templates outside git. Delivery: same-day prod (SD-593) or 36 days with a prod-side rewrite (SD-1863); on master 16 of 20, sometimes master-first. Verification: /print-policy on a staging test policy; the per-document printDocs[] log entry (KI-039); the gate fails open (KI-050). Walk: S1 pre-question „configuration row or code?" (CFG_PRINT_DOCS vs selector) → mixed → sub-cases (G28) → S8 = the print on the target. Variants: a new parameter, per-object expansion, a gate, the EUR suffix, bill suppression. Coverage: C2 (the PL/SQL half), C4 (the path fact), C5 (the bundled appsettings); the C# and template half is uncovered.

DV-03 — The reinsurance stream — a customer-funded capability. Ask: the Bulstrad reinsurance department through Ablera's project management; no ticket in 84 commits. Evidence: 84 backend commits, one author, 06.2025 → 08.2026: facultative premium and claims, treaty, natcat, MDP and facultative reports, e-mailed reports, PasReinsurance.Processing.Plugin.CdPrems.Bulstrad touched 35 times, twenty-plus calculation plugins; UI reinsurance area 7 + 2; a prod-only e44c82a407 „Reins calc improvements" 01.09.2026. Placement: the PAS services PasReinsuranceProcessing / PasReinsurers / PasReinsurersIntegrations / PasReinsuranceReporting + Plugins/*.Bulstrad; on master relocated under src/Reinsurance/ (831 .cs); 59 of 84 subjects on master, 66 on prod. Delivery: direct iterative commits („fac premium updates" × 2, „treaty claims updates" × 2, „trigger rebuild" × 4), four appsettings edits, PDF generation touched ten times. Verification: the facultative / MDP Excel report and its e-mail on staging. Walk: does not fit S1's „defect or small extension" — it needs a capability stream case type or an explicit exclusion. Coverage: none; contradicts „never new modules".

DV-04 — A premium or cover computation rule for a product family (2200 / 2222, 2215, 47xx, 36xx). Ask: the customer via Jira or HDesk, often verbal. Evidence: cff3e90e7b „Update the new 4704 requirements" 07.08.2025, af6dc9dd98 2200 / 2222 lrLimit, 8bf32b976c PML layer maximum 21.07.2025, b05b26f32f + f590bf87d7 „Fix IV calc" × 2, fad094dd51 AdjustIVAndDiscountFor2215, 0ba74477c4 preset depreciation factor, 68898c31e8 getRates rounding, 9c81503e62 non-selected cover auto-insertion, 537b754c97 + its revert, 91585166ff policy-level discounts (master port d4e42f1d4b), ae1a15ff58 FORMULA datatype, 9afe740ddf PremTypeTax, bf4a7c31bd „Client complains …"; tickets SD-1442, SD-1703, SD-1964, SD-2063, SD-1550 and the nine PRICING-FIX tickets of the desk census. Placement: mixedOperations.PremiumCalculation.Bulstrad.Lob{Property,Person,Motor} (seam 1, NuGet) and PasPremium / PasPolicyCrud (a flat-layout core edit). Delivery: direct → prod the same day; master 60 % by subject. Verification: quote a test policy per product; compare with ABACUS and INSIS. Walk: S1 decides per lineage (G19) and records „customer logic in a shared service" as debt; S6 = a NuGet release plus every consumer image (G32). Variants: limit or deductible rule, rounding, factor default, cover auto-insert, discount recording. Coverage: none (C8 is the generic sibling).

DV-05 — Partner registration API hardening (Bul SI, RegisterPolicy). Ask: Ablera's partner programme (/bulsi). Evidence: PasPolicyRegistration touched 21 times; 2dc2c946d6 27.03.2026 „Harden Bulstrad PasPolicy registration flow" (80 files, +6 578 lines, with 20260325_bulstrad_name_change_cust_details.sql), 22d367b8e9 23.07.2026 supplied policy number (master the same day, fea1848b2b), e5c12ffd2a / 7e8e395c35 endpoint rounding, 37a7e083bf 28.08.2025 Bul SI client (IdentityServer Config.cs), 39c4f21b32 flat rate + plugin consolidation (C4), UI 2e26768d5 flat-rate view. Placement: seam 1 PasPolicy/__Plugins/PasPolicy.Plugin.Bulstrad + PasPolicyRegistration + the IdentityServer client — the one area with unit tests (test/PasPolicy.Plugin.Registration.Bulstrad.Tests). Delivery: staging → master the same day, the author porting and naming the source id; prod when the partner goes live (the flat rate is not on prod). Verification: the Postman collection against the staging REST API; register → transfer → print. Coverage: C4 (layout), C1 (mixed seam) in part.

DV-06 — Customer and party data rules (custPid, contacts, names, addresses, LDAP accounts). Ask: the customer via Jira (PARTY 15, ACCESS-USER 26, CUSTOMER-DATA 4 tickets in the desk census) and operations. Evidence: c987780d56 + 5e2ef953d5 custPid 12–13.08.2025 (UI 06448c898 the same day), c80be54c90 + 5d41f24cd8 18.03.2026, 9938af5047 Preferable = Y, 67210f5cf0 SeekCustomerOperation 03.04.2026 (UI 0845c96f0 the same day), 9d9b6ae5f0 + 140a6fc56f LDAP 29.07.2025, 0c0875b60a IdentityServer user accounts; UI 52bbf4059 address optional, 41ab7d18d SD-1943. Placement: PasCustomerCrud / PasPolicyCrud (flat-layout core) + IdentityServer.Plugin.Bulstrad (absent on master) + UI customers. Delivery: UI + backend pairs the same day; master 50 %. Verification: register or edit a test client; INSIS P_PEOPLE after transfer. Coverage: none.

DV-07 — Agent, office and commission code paths (посредник). Ask: the customer (ACCESS-AGENT 9, COMMISSION 6 tickets; SD-1709 fixed in a day; SD-1511 Next Release) and /add-agent operations. Evidence: UI 08fdcf733 „Commissions rework" 30.07.2025 (9 files, −763 lines) + backend efe8ddcfff / ae78919a51 „New Endpoint and Bulstrad plugin for it" (PayablesAndCommissions plugin, 21 files), f0379031fd UR_EXCLUSIVE_AGENTS 20.01.2026, 8e485dcbaf „Fix adding agent office" 20.02.2026, befe3dc639 21.10.2025; UI 943e286b9, 4c9bdd467, d5963e608 / 465d5a5877 SD-1709. Placement: PayablesAndCommissions/Plugins (seam 1 inside a module), PasPolicyCrud, UI participants / agents-comm-defaults. Delivery: the one fix-branch example (SD-1709: staging, prod and master UI the same day; the backend half never on prod). Verification: participant search and the commission default on a test quote. Coverage: none.

DV-08 — A regulatory cross-cutting change: the BGN → EUR changeover. Ask: regulation (euro adoption 01.01.2026), coordinated by Ablera. Evidence: 11 backend + 7 UI commits 07.2025 → 07.2026: 94e9720ff9 „Everywhere BGN -> EUR (or USD)" 07.11.2025 (23 files, DB models), 2f3d2337ac, a33dec52df, 5fa018f789, bd54f9f9b4, 966d7ae74f „bring back ConvertInsuredValuesToBGN" 11.12.2025, riskmodel e580c0d661 VX-46 _EUR template suffix + 835dd31c37 EUR filter (353 lines), 1bfda06407 SD-1962 country-aware rate; UI c899f4ad5 SD-1855, 371d1de5a, GetPremiumAndCurrency × 3 UI + backend 29–31.07.2025. Placement: every seam at once — plugins, shared DB models, riskmodel, print, UI pipes. Delivery: a five-month series with reverts; prod 11 of 11. Verification: quote, print and transfer in EUR and on legacy BGN policies. Coverage: none — a programme, not a case; the multi-placement matrix (G28) at programme scale.

DV-09 — UI number, locale and field-validation behaviour for Bulgarian operators. Ask: the customer via Jira (SD-1950, SD-1971, SD-2138 / 2143 Next Release, KI-037) and UAT. Evidence: 14 locale commits (02.07–11.08.2025: the injection token, toNumberParser, decimal dot and comma, „bringing back previous behaviour"), validators 5fd5aceb2 + 4c837532d ЕГН, 1b71c75d2 bulstat warning, 35e48523e RCertif, 0f3c19120 no-dash, 9ca00e3d9 VIN upper-case; SD-2138 / 2143 (characters vs bytes) still open. Placement: libs/serdica-shared pipes, directives and validators + formly/field-generator.ts — a different path on master (serdica-utils, C3). Delivery: same day on staging, prod and master. Verification: DOM text through handles (G14) on the affected form. Coverage: C3 in part (the path-drift fact).

DV-10 — Product object screens: dialogs, labels, tooltips, descriptions (the 2200 / 2222 wave). Ask: the customer via Jira — seven tickets in six weeks (SD-1839, SD-1855, SD-1857, SD-1869, SD-1953, SD-1968, SD-2138 / 2143). Evidence: 819319152, cb6145ed3, 929df1589, c0dc7192a, c899f4ad5 (all 07.2026, same day as the ticket); the description feature 8b96c4289 15.10.2025 → 63744bf9f + 1e8584276 07.04.2026 → SD-1839 25.06.2026 because it never reached prod. Placement: apps/serdica-ui/src/app/views/business/{quotes,policies,shared} (43 / 39 / 34 touches). Delivery: same day everywhere; the un-promoted feature became a ticket. Verification: open the object dialog on a staging policy. Coverage: none.

DV-11 — Cargo and framework (11xx) contracts: FRAME types, group policies, master-policy objects. Ask: the customer (33 CARGO tickets in the desk census; SD-2005 fixed in three days; SD-1485 / 1502 Next Release). Evidence: 64e5c8fc84 + 51a1da8885 04.09.2026 (32 files: Core.Plugin.Bulstrad 16, WorkflowEngine 4, Ablera.Serdica.Annexes 4) → master 797fdf3bfe the same day; UI 7bf87190698c1616d4; 6a76d8df1 SD-2005; 472059643 / 62cff5a579 pcDescr / ObjDescr 23–26.09.2025. Placement: mixed — plugin + Core WorkflowEngine + the shared Annexes library. Delivery: a two-part series, UI + backend the same day, prod pending. Verification: create a 1102 / 1103 under a 1101 framework; the /sync-framework checklist. Coverage: none.

DV-12 — Motor (47xx) flow rules. Ask: the customer via Jira or HDesk (SD-1862 camper, SD-1919 getPriceByVin timeout KI-012, SD-1987 gadgets, SD-1498 / SD-547 Next Release). Evidence: e7b83d4fb5 + 003b87b1e2 TEMPPLATE 15–16.09.2025, d2a64a2b63 lessee 13.07.2026, 65d353d189 ГФ timeout 18.09.2025 (KI-031), 4a4f950c5a MTPL subtypes (riskmodel), UI 6f339d4de no documents on 4710 / 4711, 6d0f6ff92f. Placement: Core.Plugin.Bulstrad, BstPasPolicyService, PasPolicy.Plugin, riskmodel. Coverage: none; SD-547 has waited since 14.07.2025.

DV-13 — ABACUS pricing pre- and post-filters (Python riskmodel). Ask: Ablera's pricing team and customer tariff asks. Evidence: 15 commits, 33 .py files: 96b300b6d0 4710 post-filter 02.03.2026 (→ SD-1526 rounding 07.04.2026), 1c0cdeaea1 4710 / 4711 12.11.2025; eight by one author (1244cc5785 corrections overrider 21.05.2026, reverted on prod only by 22f9cd9ffe 18.06.2026; region map; EUR filter; default template). Placement: src/Analytics/riskmodel/App — customer-specific by construction, image anl-risk-model; master has 118 .py against 90. Delivery: direct; prod cherry-pick; a prod-only revert. Verification: ABACUS get_rates on staging against the expected premium. Coverage: only as a consult target in C1.

DV-14 — INSIS transfer and revert-to-application handling (C# caller + PL/SQL). Ask: the customer (29 TRANSFER-STUCK tickets). Evidence: 3ec124f482 / 4306d23b1a / a0f3102ea4 INSIS LOCK handling 24.06–02.07.2025, fe37f497be + 00e7828ae5 BstRevert pre-checks moved into the DB procedure 18.07.2025, a68b36b934 bst_integration_sync_to_external_pas 30.01.2026, 65d353d189; the PL/SQL-side tickets of C2's row. Placement: seam 2 BstIntegration / BstPasPolicyService + seam 3 SRD_INTEGR (not in git). Delivery: C# via the branch, PL/SQL by hand on the database — two half-cases. Verification: transfer a test policy; /check-transfer. Coverage: C2 covers the PL/SQL promotion; the C# ↔ PL/SQL split is not covered.

DV-15 — Configurable operator checks and messages with DB rows. Ask: the customer via HDesk (00104150 anti-backdating 4704, 00103979 3636 start date, 00099893 — all 07–08.2026, after the generic commit). Evidence: c6e39ad5d6 17.07.2026 (+ 20260717_policy_date_operations_messages.sql), b26c4f3657 UPR (two .sql), 003b87b1e2, 1d2fb215ed, a5eaf1d903 + b1507c3b34 human-readable error arguments, 8f57105189, 4d0c87d902, d4dfadb1a5. Placement: the shared Ablera.Serdica.Operations.* NuGet + SR_MESSAGES and configuration rows; only 3 of 300 commits carry .sql — the rest of the DB side is applied outside git. Delivery: library release + consumer rebuild (G32); prod the same day. Verification: trigger the check on a staging quote; the message text in Bulgarian. Coverage: C8 / G32 in part.

DV-16 — Incident-driven robustness fix (clamp, index, error leak). Ask: operations (a KI). Evidence: d7f8c72210 KI-044 → master a44b7e21c8 eleven days later, UI d2ec130b4 + fix/configuration-paging-collector; 0135c051c1 05.11.2025 and e8203dd01b 03.08.2026 numeric casts and index seek, 500dd218e0, 507568d56b chunks, a8838a2c1d; 054e4c1347 / 6d0f6ff92f operation-runner error leaks. Placement: shared libraries (CrudBaseServices, Operations.Runner) → NuGet + all consumers. Coverage: C7 / C8 — adequate.

DV-17 — Branch reconciliation and merge-from-master ports (flat-layout upkeep). Ask: nobody — the lineage forces it. Evidence: the 15.07.2025 series of ten prod → staging commits (fe124957784b993d3d43); master → staging 9e003a3056 / 05dd255502 / 05eb772fbf 13.06.2025, 6bff307d65 04.11.2025, d06220cbb7 „Equalize with master", 5ca7faf71c 18.02.2026, UI 229bfca3f; UI be8c611d7 „backport from production"; prod-only e80cb39847; the UI history rewrite of 04.09.2026. 27 of 300 backend commits (9 %) are branch plumbing. Coverage: C4 / G17 / G18 describe one direction; reconciliation from prod and merges from master are absent.

DV-18 — Pipeline, registry, dependency and tooling maintenance on the customer branch. Evidence: CI 12 (three on 29.07.2025; the GitLab server move 08–09.02.2026; 35bcd3d14c the staging environment 22.10.2025; 21c2545cc0 BOM; trigger rebuild × 5), DEPENDENCY 4 (33d4a6ed49 .NET 10, d4daeceb75 AutoMapper 15.1.1, ddaed4889e CVE-2026-48109, a5d6af3298 Maven / JRE), TOOLING 3 + 5 (.claude/ rewrite 13–14.04.2026), UI package-lock 7, GraphQL schema regeneration 3. Placement: .gitlab-ci, Dockerfiles, csproj / package.json. Coverage: G23 / D130 only.

DV-19 — appsettings.json as code. Evidence: 34 commits bundle it, 6 are appsettings-only (8e89216d9b, 8ce2e2c2d5, 5a4c676b97, 4a2700a551, 2070e6e60d a RabbitMQ route, c557103374 „appsettings.json reset"). Coverage: C5 — adequate as written; add the „reset" pattern (a developer reverting local values).

Census challenges

What the real changes ask of the module page and its stage pages. Each is a challenge to a written rule, with the rule the changes suggest; the design disposition is recorded below.

Sizing facts the estate should keep F. Backend 18.8 and UI 8.4 commits a month; ticket-traceable 3–8 %; customer-specific by path 43 % of backend commits; on prod 74 % / 93 %; on master 57 % / 68 % by subject and 0 by id; ticket → staging commit 0–1 day in 11 of 13 pairs.

Architecture disposition — 07.09.2026

P The case journeys and wire/protocol specification answer the census questions without expanding the module charter. The interactive walkthrough traces every case on this page through requests, records, prompts, messages, gates, execution, reversal and next-request learning. These are design decisions and offline acceptance criteria, not proof of deployed behaviour.

Census question Design disposition
Direct commits versus reviewed MR practice The module enforces the intended reviewed-MR path; historical direct commits are evidence of the gap, not inherited permission.
Series, reverts and paired components One case keeps the whole commit series and an explicit compatibility-ordered release graph, including database rows, packages, consumers and external templates.
Un-ticketed requests and Next Release Record verbal/internal asks through authorised intake. Support owns the waiting queue and recruits Development when the stored trigger fires.
Ports and rewritten refs Pin both heads, preserve target-only work and prove semantic equivalence in the requested direction. Ref rewrites invalidate affected evidence.
Deployment outside the source repo The existing infrastructure job remains the target executor; job result, serving versions and customer-surface proof are separate required observations.
Flat-layout placement and concentrated authorship Placement is per lineage; shared/core impact still requires its existing decision. One person may hold roles, but same authorship does not bypass them.
Programme-scale reinsurance/currency Explicit referral and accountable owner under N-8. Bounded implementation requests can use the current module; no capability-stream feature is added.
Generated artefacts Reject the suggestion to exclude them from review. Lockfiles, generated contracts and tooling instructions may affect behaviour; review relevant semantic changes and regeneration.