| 1 | # FORGE pain inventory v1 |
| 2 | |
| 3 | | | | |
| 4 | |---|---| |
| 5 | | **Status** | Living doc | |
| 6 | | **Date** | 2026-06-12 | |
| 7 | | **Relates to** | [FORGE-ADR-0001](FORGE-ADR-0001-agent-first-not-gitlab-clone.md), [FORGE-ADR-0002](FORGE-ADR-0002-mcp-first-web-view-only.md), [FORGE-ADR-0008](FORGE-ADR-0008-process-iop-not-boards.md), [FORGE-ADR-0013](FORGE-ADR-0013-agent-driven-lifecycle-and-actor-parity.md), [FORGE-ADR-0014](FORGE-ADR-0014-microkernel-and-standard-bundle.md), [FORGE-ADR-0015](FORGE-ADR-0015-vertical-domain-plugins-and-doi-commands.md) | |
| 8 | | **North star** | Friction insight → artifact; не «ещё один GitLab», а forge для human–agent dyad | |
| 9 | |
| 10 | ## Как пользоваться |
| 11 | |
| 12 | Одна строка = одна боль. Колонки: |
| 13 | |
| 14 | | Колонка | Смысл | |
| 15 | |---------|--------| |
| 16 | | **ID** | `P-xxx` для ссылок из ADR/issue | |
| 17 | | **Боль** | Симптом своими словами | |
| 18 | | **Кто** | human / agent / ops / all | |
| 19 | | **Откуда** | pilot, ADR-0001, HN, форум, исследование | |
| 20 | | **Forge-ответ** | принцип + конкретика или «не делаем» | |
| 21 | | **Статус** | open / in-progress / resolved / wont-fix | |
| 22 | |
| 23 | **Приоритет:** боль бьёт по *insight → artifact*, повторяется в pilot, или блокирует agent-driven lifecycle → v0.x; остальное — backlog. |
| 24 | |
| 25 | **Фильтр фич** (из ADR-0001/0002): |
| 26 | |
| 27 | 1. Artifact-first — нельзя создать/найти из MCP за ≤2 шага → friction. |
| 28 | 2. View ≠ Write — web смотрит и approve; write через MCP/CIDE/git. |
| 29 | 3. One thread, one truth — IOP, не boards. |
| 30 | 4. Actors, not hierarchy — capabilities, не ranks в UI. |
| 31 | 5. Thin stack — WitDB + bare git; тяжёлое — plugin. |
| 32 | 6. Human UI = density — одна строка nav, zero duplicate meta. |
| 33 | 7. **Monetization = paid plugins** — enterprise/zoo как DLL/SKU ([0015 §8.6](FORGE-ADR-0015-vertical-domain-plugins-and-doi-commands.md)), не fat core / mandatory matrix в sidebar. |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## Сводка по категориям (интернет + канон) |
| 38 | |
| 39 | | Категория | Типичная жалоба | Лидеры боли | |
| 40 | |-----------|-----------------|-------------| |
| 41 | | **Ingress** | «Зайди в UI и нажми…» | GitLab, GitHub | |
| 42 | | **Issue theater** | Формы, epic, custom fields | Jira, GitLab | |
| 43 | | **MR / PR review** | Tabs, alphabetical diffs, LGTM | GitHub, GitLab | |
| 44 | | **Code browser** | SPA jank, gutter, popups | GitHub, GitLab | |
| 45 | | **Ops / stack** | 4–8 GB RAM, zoo сервисов | GitLab CE | |
| 46 | | **Enterprise upsell** | Плати — получишь matrix в UI | GitLab EE | |
| 47 | | **AI era** | Review queue >> generation | все forge | |
| 48 | |
| 49 | --- |
| 50 | |
| 51 | ## Pain inventory |
| 52 | |
| 53 | ### Ingress & chat-first |
| 54 | |
| 55 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 56 | |----|------|-----|--------|-------------|--------| |
| 57 | | P-001 | Чат обрывается: «создай issue» → «открой GitLab, New issue, шаблон, custom fields» | agent+human | ADR-0001 §pain-1 | **MCP-first** (0002): `create_issue`, bracket `[FRG:…]` | in-progress | |
| 58 | | P-002 | REST есть, но project id / OAuth / token — не chat-first | agent | ADR-0001 §pain-6 | Forge MCP в Cursor; `FORGE_ACTOR`, magic links (0007); server-driven `/capabilities` + dynamic ListTools | in-progress | |
| 59 | | P-003 | Login, 2FA, namespace ACL между insight и commit | agent+human | ADR-0001 §pain-7 | VPN/plugin auth (0006); sandbox repos; scp-style clone; **view OAuth callback** (GitHub → session cookie) | in-progress | |
| 60 | | P-004 | Нет first-class forge tools в профиле IDE | agent | pilot | MCP + CIDE bracket refs (0159): `forge_lens.open`, `/forge goto`, markdown `[FRG:…]` click | in-progress | |
| 61 | |
| 62 | ### Issue / IOP (не Jira²) |
| 63 | |
| 64 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 65 | |----|------|-----|--------|-------------|--------| |
| 66 | | P-010 | Issue ≠ одна строка из wake-buffer; нужны epic, milestone, weight | agent | ADR-0001 §pain-2 | Minimal issue: title, body, status; IOP thread (0008) | in-progress | |
| 67 | | P-011 | Jira: создание issue 30+ сек, формы, batch-update в конце дня | human | [Linear vs Jira 2026](https://workmanagementhub.com/jira-vs-linear-2026-dev-teams/), [Rock-n-Roll JTBD](https://rocknroll.dev/blog/how-linear-captured-jira-frustrated-users/) | Intent-first: issue из чата/MCP; без sprint ceremony в core | open | |
| 68 | | P-012 | Configuration sprawl: custom fields, schemes — админ вместо shipping | ops | [Atlassian: config bloat](https://www.atlassian.com/blog/how-we-build/optimisation-tools-for-jira) | Non-goals: boards, epics, burndown (0001); WitDB schema minimal | wont-fix (core) | |
| 69 | | P-013 | Boards как «истина процесса», а не проекция IOP | human | ADR-0008 | IOP over boards; доска — опциональная проекция, не primary | open | |
| 70 | |
| 71 | ### MR / PR / review |
| 72 | |
| 73 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 74 | |----|------|-----|--------|-------------|--------| |
| 75 | | P-020 | MR = метаданные для менеджера; diff — где-то в третьей вкладке | agent+human | ADR-0001 §pain-3 | MR API + thin diff UI; merge = actor decision (0013) | **resolved** | |
| 76 | | P-021 | Conversations / Files / Commits — дубли и context-switch между tabs | human | [Code reviews are broken (baz.co)](https://baz.co/resources/code-reviews-are-broken) | Diff + IOP sidebar на одном экране MR; CI inline | **resolved** | |
| 77 | | P-022 | Файлы в PR по алфавиту — reviewer строит контекст с нуля | human | [Logic.inc: massive PRs](https://bits.logic.inc/p/the-unbearable-weight-of-massive), [PeerJ CS-193](https://pmc.ncbi.nlm.nih.gov/articles/PMC7924728/) | Lens file/line links from diff; grouping — backlog | in-progress | |
| 78 | | P-023 | CI logs оторваны от review — ещё один tab | human | baz.co | CI webhook bridge (0005); статус inline, не console-first | **resolved** | |
| 79 | | P-024 | MR view не auto-refresh при push; reviewer смотрит stale diff | human | [Pensero GitLab analysis](https://pensero.ai/blog/gitlab-reviews) | Polling или SSE на MR view (backlog) | **resolved** | |
| 80 | | P-025 | Code review « tedious »; нет filetype filter; overkill pane | human | Pensero / GitLab reviews | Thin review UI; Lens jump to line; density (see P-040) | in-progress | |
| 81 | | P-026 | LGTM-бот / multi-approver theater вместо реального review | human | baz.co, Yuval Yeret [ToC](https://yuvalyeret.com/blog/ai-coding-made-code-review-the-bottleneck/) | Peer IOP thread; CI = hint not verdict (0013); capabilities not ranks | in-progress | |
| 82 | | P-027 | **AI era:** PR volume >> review capacity; rubber-stamp, +441% review time | all | [Developers Digest](https://www.developersdigest.tech/blog/ai-code-review-bottleneck), [SoftwareSeni](https://www.softwareseni.com/why-agent-generated-code-is-breaking-the-pull-request-review-model/), [Tian Pan mixed queue](https://tianpan.co/blog/2026-05-10-mixed-pr-queue-reviewer-throughput-binding-constraint) | Agent-driven small MRs; provenance receipts; human view for governance; promote sandbox→upstream (0009) | in-progress | |
| 83 | |
| 84 | ### Code browser & web UX |
| 85 | |
| 86 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 87 | |----|------|-----|--------|-------------|--------| |
| 88 | | P-030 | SPA: back button ломается, scroll position теряется, jank | human | [HN: GitHub UI slower](https://news.ycombinator.com/item?id=44799861), [HN Ask HN slow](https://news.ycombinator.com/item?id=44988854) | **Server-rendered HTML** (0002 thin web); no React SPA for core views | in-progress | |
| 89 | | P-031 | Issue links → popup вместо страницы; «не теряй место» ломает browser UX | human | [HN: issue popup](https://news.ycombinator.com/item?id=47910546) | Full page navigation; no floating panes | wont-fix (popups) | |
| 90 | | P-032 | Большие PR: browser не тянет diff; файлы lazy-load и не грузятся | human | Logic.inc, HN | Pagination / per-file load; avoid mega-SPA; optional «open in CIDE» | open | |
| 91 | | P-033 | Code viewer: selection/highlight сломан; syntax highlight жрёт RAM | human | HN 43154358, 44988854 | Minimal highlight; compact gutter; table-layout sane | in-progress | |
| 92 | | P-040 | **Pilot:** три строки meta (branch, path, commit); жирный gutter; дубли crumbs | human | pilot Comet/Nova | Single `code-nav` row: branch + path + lang + commit | **resolved** | |
| 93 | | P-041 | GitLab: sidebar chaos, Plan/Manage, +1 click на каждый пункт после redesign | human | [GitLab Forum UI](https://forum.gitlab.com/t/the-ui-irks-me-enough-that-it-alone-would-be-a-reason-to-move-all-my-projects-elsewhere/126110), [gitlab#406285](https://gitlab.com/gitlab-org/gitlab/-/work_items/406285) | Flat nav: Code \| Issues \| MRs; no feature zoo in default project | in-progress | |
| 94 | | P-042 | Floating panes: issue list + issue pane = clutter | human | GitLab Forum | Full-page issue view; list → detail navigation | wont-fix (panes) | |
| 95 | | P-043 | 99% OSS projects не используют registries/terraform/service desk — но UI показывает всё | human | GitLab Forum | Default minimal surface; plugins for zoo (0001) | open | |
| 96 | | P-044 | Enterprise = paywall на **весь** feature matrix в монолите; нельзя купить только LDAP/audit | ops | GitLab EE model, operator 2026-06 | **Paid plugins** (0015 §8.6): spine MIT, SKU = DLL (ReSharper model); zoo opt-in | open | |
| 97 | |
| 98 | ### Identity & provenance |
| 99 | |
| 100 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 101 | |----|------|-----|--------|-------------|--------| |
| 102 | | P-050 | `github-actions[bot]`, анонимный commit — непонятно кто actor | agent+human | ADR-0013 | `Forge-Author`, `Forge-Actor`, `oar:` identity | in-progress | |
| 103 | | P-051 | Непонятно: merge принял human или pipeline | human | ADR-0013 | drive_mode; accept = named actor; CI ≠ verdict | in-progress | |
| 104 | |
| 105 | ### Git transport & local dev |
| 106 | |
| 107 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 108 | |----|------|-----|--------|-------------|--------| |
| 109 | | P-060 | `ssh://` cloneUrl vs git-shell; push fails, clone ok | agent+human | pilot | scp-style `git@host:slug.git` (0004); `GIT_SSH_COMMAND` docs | **resolved** | |
| 110 | | P-061 | WitDB/SQLite: `$name` params не парсятся → bootstrap падает | agent | pilot | Upstream PR [#2](https://github.com/dmitrat/WitDatabase/pull/2); Forge hotfix literal until NuGet bump | in-progress | |
| 111 | |
| 112 | ### Ops & stack weight |
| 113 | |
| 114 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 115 | |----|------|-----|--------|-------------|--------| |
| 116 | | P-070 | GitLab CE: 4–8 GB RAM, omnibus, Gitaly, Sidekiq, Postgres | ops | [Danube Data 2026](https://danubedata.ro/blog/self-host-gitea-forgejo-github-alternative-2026), [Augment code review tools](https://www.augmentcode.com/tools/best-open-source-code-review-tools) | docker compose, .NET + WitDB file; ~512MB class (0001) | in-progress | |
| 117 | | P-071 | «Форк GitLab» = тащить весь feature matrix и patch zoo | ops | ADR-0001 §pain-5 | MEF plugins; MIT fork as escape hatch ([0014](FORGE-ADR-0014-microkernel-and-standard-bundle.md)) | in-progress | |
| 118 | | P-072 | Gitea/Forgejo легче, но всё равно web-first; нет MCP-канона | agent | ADR-0001 alternatives | Forge ≠ Gitea clone; agent ingress in core | n/a (positioning) | |
| 119 | |
| 120 | ### Wiki & docs |
| 121 | |
| 122 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 123 | |----|------|-----|--------|-------------|--------| |
| 124 | | P-080 | Wiki в git, но web-редактор — отдельный мир от repo и чата | agent | ADR-0001 §pain-4 | `docs/` or `*.wiki.git`; clone/commit primary; render plugin | **resolved** | |
| 125 | | P-081 | Confluence-mode без Confluence | human | ADR-0001 | Static `/docs` bundled (Doxygen, Mermaid) read-only | in-progress | |
| 126 | |
| 127 | ### Agent-specific (2026) |
| 128 | |
| 129 | | ID | Боль | Кто | Откуда | Forge-ответ | Статус | |
| 130 | |----|------|-----|--------|-------------|--------| |
| 131 | | P-090 | Каждый forge свой API; нет OAR / cross-node identity | agent | ACN manifesto | `oar:` + bracket refs; ACN registry (external) | in-progress | |
| 132 | | P-091 | Sandbox vs upstream — двойные правила без явного promote | agent+human | ADR-0009 | agent-driven sandbox; human gate on upstream MR only | **resolved** | |
| 133 | | P-092 | Agent output без «receipts» — reviewer не доверяет | agent+human | Developers Digest | Commit provenance JSON; CI hint; IOP link to issue intent | in-progress | |
| 134 | | P-093 | 2000-line agent PR до обеда — review impossible | agent | Developers Digest, DORA 2025 | Culture + MCP nudge small MRs; decomposition; diff budget (process doc) | open | |
| 135 | |
| 136 | --- |
| 137 | |
| 138 | ## Resolved (changelog) |
| 139 | |
| 140 | | ID | Когда | Что сделали | |
| 141 | |----|-------|-------------| |
| 142 | | P-040 | 2026-06 | `code-nav`: одна строка branch/path/lang/commit; compact gutter | |
| 143 | | P-021 | 2026-06 | MR view: 70/30 split — diff слева, IOP sidebar (thread, CI, approve) справа | |
| 144 | | P-022 | 2026-06 | Lens из diff: file header + new-line links → blob at line | |
| 145 | | P-023 | 2026-06 | CI badge inline в IOP sidebar (`ci-pass` / `ci-fail`) | |
| 146 | | P-024 | 2026-06 | MR head.json poll + auto-reload on source branch push | |
| 147 | | P-041 | 2026-06 | Header: repo select, search, avatar; MR IOP sub-tabs Conversation/Changes/Checks | |
| 148 | | P-080 | 2026-06 | `/view/repos/{name}/docs` read-only markdown from git | |
| 149 | | P-091 | 2026-06 | Promote panel in MR IOP (agent-driven → human-driven upstream) | |
| 150 | | P-060 | 2026-06 | `BuildCloneUrl` → scp-style; `docs/git-transport.md`, smoke script | |
| 151 | | P-003 | 2026-06 | View OAuth: `/view/auth/oauth/start` + callback → session cookie (GitHub provider) | |
| 152 | | P-024b | 2026-06 | MR view SSE stream (`/view/.../events`) + EventSource fallback poll | |
| 153 | | P-004b | 2026-06 | CIDE ADR-0159 phase 3: `BracketForgeReferenceParser`, `forge_lens.open`, `/forge goto`, markdown click | |
| 154 | | P-002b | 2026-06 | Server-driven MCP `/api/v1/capabilities` + invoke; ListTools refetch each call | |
| 155 | | P-082 | 2026-06 | `/openapi/v1.json` stub + root index links | |
| 156 | |
| 157 | --- |
| 158 | |
| 159 | ## Backlog — top bets (v0.5–v0.6) |
| 160 | |
| 161 | Приоритет после UI density (P-040): |
| 162 | |
| 163 | | # | Bet | Закрывает | ADR | Статус | |
| 164 | |---|-----|-----------|-----|--------| |
| 165 | | 1 | **CIDE Lens client** — bracket `[FRG:]` / `[F:]` open in editor | P-022, P-004 | 0003, 0159 | **phase 3 done** (CRS in-app tail — backlog) | |
| 166 | | 2 | **WitDB NuGet bump** — [dmitrat/WitDatabase#2](https://github.com/dmitrat/WitDatabase/pull/2) merge + publish | P-061 | — | waiting maintainer | |
| 167 | | 3 | **View OAuth callback** — session cookie без paste token | P-003 | 0006, 0010 | **done** (GitHub; PKCE device flow unchanged) | |
| 168 | | 4 | **SSE MR refresh** — live diff head events | P-024 follow-up | — | **done** (SSE + poll fallback) | |
| 169 | | 5 | **Static `/docs` bundle** — Doxygen/Mermaid for API (repo-agnostic) | P-081 | 0002 | open (repo `/view/.../docs` есть) | |
| 170 | | 6 | **Plugin SDK** — `IForgePluginHost`, public abstractions | P-070 | 0014 | **started** (`AgentForge.Plugin.Sdk`) | |
| 171 | |
| 172 | --- |
| 173 | |
| 174 | ## Что сознательно не делаем (wont-fix / plugin-only) |
| 175 | |
| 176 | - Epics, milestones, weight, burndown, Agile boards (0001 non-goals) |
| 177 | - GitLab-style floating panes и popup issues (P-031, P-042) |
| 178 | - Built-in GitLab CI / full DevOps suite in core (0005 bridge only) |
| 179 | - Confluence/Jira replacement in core |
| 180 | - AI merge bot as default gate (0013: actors decide, CI hints) |
| 181 | |
| 182 | --- |
| 183 | |
| 184 | ## Источники (web research 2026-06-12) |
| 185 | |
| 186 | ### GitLab |
| 187 | - [Forum: UI alone reason to move](https://forum.gitlab.com/t/the-ui-irks-me-enough-that-it-alone-would-be-a-reason-to-move-all-my-projects-elsewhere/126110) — sidebar chaos, feature clutter, floating panes |
| 188 | - [Pensero: GitLab reviews analyzed](https://pensero.ai/blog/gitlab-reviews) — dense UI, review friction, no auto-refresh |
| 189 | - [GitLab navigation redesign feedback #406285](https://gitlab.com/gitlab-org/gitlab/-/work_items/406285) — +1 click regression |
| 190 | |
| 191 | ### GitHub / PR review |
| 192 | - [HN: Why is GitHub UI getting slower?](https://news.ycombinator.com/item?id=44799861) — SPA jank, back button |
| 193 | - [HN: Has GitHub gotten tremendously slow?](https://news.ycombinator.com/item?id=44988854) — file explorer, large PRs |
| 194 | - [HN: Issue popup](https://news.ycombinator.com/item?id=47910546) — modal vs navigation |
| 195 | - [baz.co: Code reviews are broken](https://baz.co/resources/code-reviews-are-broken) — tabs, alphabetical files, detached CI |
| 196 | - [Logic.inc: Massive PRs](https://bits.logic.inc/p/the-unbearable-weight-of-massive) — browser can't render; need smarter grouping |
| 197 | |
| 198 | ### Issue trackers |
| 199 | - [Linear vs Jira 2026](https://workmanagementhub.com/jira-vs-linear-2026-dev-teams/) — admin overhead, speed |
| 200 | - [Rock-n-Roll: Linear JTBD](https://rocknroll.dev/blog/how-linear-captured-jira-frustrated-users/) — batch updates, context switch |
| 201 | - [Atlassian: Jira config bloat](https://www.atlassian.com/blog/how-we-build/optimisation-tools-for-jira) — sprawl, performance |
| 202 | |
| 203 | ### Ops / alternatives |
| 204 | - [Danube Data: Gitea/Forgejo vs GitLab RAM](https://danubedata.ro/blog/self-host-gitea-forgejo-github-alternative-2026) — 512MB vs 4–8GB |
| 205 | - [Augment: open source code review tools 2026](https://www.augmentcode.com/tools/best-open-source-code-review-tools) — resource comparison |
| 206 | |
| 207 | ### AI + review bottleneck (2025–2026) |
| 208 | - [Developers Digest: AI code review bottleneck](https://www.developersdigest.tech/blog/ai-code-review-bottleneck) — diff budgets, receipts |
| 209 | - [Yuval Yeret: review is the constraint](https://yuvalyeret.com/blog/ai-coding-made-code-review-the-bottleneck/) — ToC, stop starting |
| 210 | - [SoftwareSeni: agent PR model breaking](https://www.softwareseni.com/why-agent-generated-code-is-breaking-the-pull-request-review-model/) — volume, batch size |
| 211 | - [Tian Pan: mixed PR queue](https://tianpan.co/blog/2026-05-10-mixed-pr-queue-reviewer-throughput-binding-constraint) — tiered review, governance |
| 212 | |
| 213 | ### Research |
| 214 | - [PeerJ CS: change decomposition in PR review](https://pmc.ncbi.nlm.nih.gov/articles/PMC7924728/) — tangled changes → false positives |
| 215 | |
| 216 | --- |
| 217 | |
| 218 | ## Твой вклад |
| 219 | |
| 220 | Добавляй строки в таблицу или issue с тегом `pain-inventory`: |
| 221 | |
| 222 | ```markdown |
| 223 | | P-xxx | «цитата» | human | личный опыт | предложение | open | |
| 224 | ``` |
| 225 | |
| 226 | Периодически: перенос resolved → changelog; пересмотр top bets. |
| 227 | |