Skip to content

feat(diff): 迁入 diff 域,与 render 共用 gorge-render 二进制 - #3

Merged
soulteary merged 1 commit into
mainfrom
feat/diff-with-gorge-render-service
Sep 6, 2026
Merged

feat(diff): 迁入 diff 域,与 render 共用 gorge-render 二进制#3
soulteary merged 1 commit into
mainfrom
feat/diff-with-gorge-render-service

Conversation

@soulteary

Copy link
Copy Markdown
Owner

新增 go/internal/diff,提供 POST /api/diff/generate 与 /api/diff/prose:

  • unified 引擎逐字节替代 PHP 侧的 diff -U65535 子进程调用。输出被 ArcanistDiffParser 解析而非渲染,所以格式必须精确:行模型是 (文本, 是否有尾换行) 的二元组、hunk 头按三种写法输出、 \ No newline at end of file 跟在承载它的记录之后;相同输入这一支 刻意照抄 PhabricatorDifferenceEngine 而不是 GNU diff。
  • prose 引擎四级递归,唯一硬不变量是无损:拼回 "="/"-" 得到旧文本, 拼回 "="/"+" 得到新文本。
  • 本域不定义域级错误码——两个引擎都没有可报告的失败模式,过大的输入 已经是 ERR_TOO_LARGE。

部署面没有新增东西:两个域都是纯计算、无外部依赖,第二个进程只会多出
一样要部署的东西,所以 diff 走既有的 :8140,原先规划的 :8130 废弃,
compose 里也没有新 service,只多了 GORGE_DIFF_MAX_BYTES(限制的是 len(old)+len(new),不是单边)。service token 一个覆盖两域。

契约与测试:

  • 新增 api/openapi/diff.yaml、go/internal/contracts/diff.go
  • 新增 14 份 tests/contract/diff 固件(unified 部分做字节精确断言)
  • 新增 tests/e2e/diff.sh 并挂进 make e2e
  • 把 render 的固件 runner 抽成 go/internal/contracttest,两域共用同一套 断言词汇,避免各写一份后开始用不同方式描述自己的契约
  • layering_test.go 的 forbiddenPrefixes 补上 internal/diff

文档:新增 docs/modules/diff.md,更新 architecture / testing / findings / compat/phorge 与 compose 注释。findings 新增一条:进程级配置 config.Base 目前嵌在 render.Config 里,diff 只能从 render.Load() 借 token,第三个域 进来时会开始咬人。

新增 go/internal/diff,提供 POST /api/diff/generate 与 /api/diff/prose:

- unified 引擎逐字节替代 PHP 侧的 `diff -U65535` 子进程调用。输出被
  ArcanistDiffParser 解析而非渲染,所以格式必须精确:行模型是
  (文本, 是否有尾换行) 的二元组、hunk 头按三种写法输出、
  `\ No newline at end of file` 跟在承载它的记录之后;相同输入这一支
  刻意照抄 PhabricatorDifferenceEngine 而不是 GNU diff。
- prose 引擎四级递归,唯一硬不变量是无损:拼回 "="/"-" 得到旧文本,
  拼回 "="/"+" 得到新文本。
- 本域不定义域级错误码——两个引擎都没有可报告的失败模式,过大的输入
  已经是 ERR_TOO_LARGE。

部署面没有新增东西:两个域都是纯计算、无外部依赖,第二个进程只会多出
一样要部署的东西,所以 diff 走既有的 :8140,原先规划的 :8130 废弃,
compose 里也没有新 service,只多了 GORGE_DIFF_MAX_BYTES(限制的是
len(old)+len(new),不是单边)。service token 一个覆盖两域。

契约与测试:
- 新增 api/openapi/diff.yaml、go/internal/contracts/diff.go
- 新增 14 份 tests/contract/diff 固件(unified 部分做字节精确断言)
- 新增 tests/e2e/diff.sh 并挂进 make e2e
- 把 render 的固件 runner 抽成 go/internal/contracttest,两域共用同一套
  断言词汇,避免各写一份后开始用不同方式描述自己的契约
- layering_test.go 的 forbiddenPrefixes 补上 internal/diff

文档:新增 docs/modules/diff.md,更新 architecture / testing / findings /
compat/phorge 与 compose 注释。findings 新增一条:进程级配置 config.Base
目前嵌在 render.Config 里,diff 只能从 render.Load() 借 token,第三个域
进来时会开始咬人。
@soulteary
soulteary merged commit bac204d into main Sep 6, 2026
6 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 6, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-06T12:07:53.678489Z a1ad66a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@soulteary
soulteary deleted the feat/diff-with-gorge-render-service branch September 6, 2026 18:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant