Forge
markdown3407750f
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
271. Artifact-first — нельзя создать/найти из MCP за ≤2 шага → friction.
282. View ≠ Write — web смотрит и approve; write через MCP/CIDE/git.
293. One thread, one truth — IOP, не boards.
304. Actors, not hierarchy — capabilities, не ranks в UI.
315. Thin stack — WitDB + bare git; тяжёлое — plugin.
326. Human UI = density — одна строка nav, zero duplicate meta.
337. **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
View only · write via MCP/CIDE