Repository navigation
Deploy Documentation has failed all 145 runs since it was added — enable Pages or delete the workflow #1744
Description
What was found
.github/workflows/deploy-docs.yml runs on every push to main that touches
docs/** or README.md. It has never succeeded, in 145 runs over more than
seven months.
Sampled across the whole history — every sample failure:
| run | date | commit | conclusion |
|---|---|---|---|
| #1 | 2026-01-26 | f587ca71 (the Copilot PR that added the workflow) |
failure |
| #74 | 2026-07-24 | 78aaaa98 |
failure |
| #138–#143 | 2026-09-06 | six consecutive merges | failure |
| #144 | 2026-09-07 14:26 | 6d9fd0a4 (PR #1740) |
failure |
Total runs: 145. No sampled run succeeded.
Root cause — one step, unchanged since January
The job dies at step 3 of 6, Setup Pages (actions/configure-pages@v5), in
about 5 seconds:
##[error]Get Pages site failed. Please verify that the repository has Pages
enabled and configured to build using GitHub Actions, or consider exploring the
`enablement` parameter for this action.
Error: Not Found - https://docs.github.com/rest/pages/pages#get-a-apiname-pages-site
GitHub Pages is not enabled on this repository, and enablement: false is what
the action resolves. Steps 4, 5 and 6 (Create documentation site,
Upload artifact, Deploy to GitHub Pages) are skipped on every run and have
therefore never executed once.
Two facts worth having before ruling
1. A previous repair was made to a step that has never run. The workflow
carries this comment above step 4:
# QUICKSTART.md and PROJECT_SUMMARY.md were copied here unguarded and
# have never existed in this repo, so every triggering push failed the
# deploy. `docs/` is copied without `|| true` for the same reason: if
# the documentation tree vanishes we want to hear about it.
That diagnosis named a real bug, but it was not the reason the deploy failed —
the job never reaches step 4. The fix is untested by construction and remains
untested today. This is the same failure mode ADR-0049 is about: a declared
thing that is not enforced, so nothing tells you it is wrong.
2. If Pages were enabled, what ships is a redirect back to GitHub. Step 4
writes _site/index.html as a full-page <meta http-equiv="refresh"> to
https://github.com/objectstack-ai/hotcrm#readme. It also copies README.md to
_site/index.md and the whole of docs/. into _site/ — but the index.html
takes precedence for a visitor, so the published site's front door is a gradient
splash that bounces the reader straight back to the repository they came from.
No static-site generator, no nav, no rendering of the copied markdown.
Why this is yours and not a seat's
Both options need something a seat cannot do or should not decide:
- Enabling GitHub Pages is a repository setting (Settings → Pages → Source:
GitHub Actions). No agent seat can flip it. - Deleting the workflow is a product decision — whether HotCRM should
publish a documentation site at all.
Options
| option | what it means for the business | |
|---|---|---|
| A | Delete the workflow | The reference app stops pretending to publish a docs site. main stops carrying a permanent red check. Cost: nothing, today — the site has never existed, so no reader loses anything. If a published docs site is wanted later it is a fresh, designed piece of work, not a resurrection of this file. |
| B | Enable Pages, keep the workflow | You get a published site at objectstack-ai.github.io/hotcrm — whose landing page immediately redirects visitors back to the GitHub README. To be worth anything it then needs step 4 rewritten to actually render docs/**, which is a real piece of work and the first time steps 4–6 would ever run. |
| C | Enable Pages and rewrite the site step | The only option that ends with a docs site a reader benefits from. Largest scope: pick a generator, decide the information architecture, handle the four locales docs/ carries. |
Recommendation
A — delete it.
The project is at the startup stage and the standing ruling is to focus on core
capability (2026-08-04) and not to invest in gradual/incremental work while the
user count is small (2026-08-27). A docs site whose only shipped behaviour would
be a redirect back to GitHub is not core capability. HotCRM's documentation is
already read where it lives — in the repository, which is the whole premise of
"business logic under 100k tokens, small enough to hand an agent in one context
window".
Deleting also removes a standing false signal: a red check on main that
everyone has learned to ignore is worse than no check, because it trains readers
to ignore red.
Fallback if A is wrong: if you do want a public docs URL for
customer-facing or marketing reasons, rule C, not B. B buys the URL and
nothing behind it.
Confidence gap: I did not check whether anything outside this repository
links to objectstack-ai.github.io/hotcrm. Since the site has never been
published, any such link is already broken, but if one exists in marketing
material that changes which option you want.
After the ruling
- A → a seat deletes
.github/workflows/deploy-docs.ymlin a small PR. Not
governed, so it can land through the queue normally. - B → you flip the Pages setting; the next
docs/**push proves it. - C → this card becomes the parent for a designed docs-site change.
Found while following PR #1740 to merge (director seat, 2026-09-07). The failure
is not caused by #1740 or #1739 — it predates both by seven months and fires
on any push touching docs/**; #1740 touched docs/STATUS.md, which is why it
surfaced now.
Activity
os-bill commentedon Sep 7, 2026
决策箱勤务:补四棱卡面块 · ⛔ 本席不改卡片正文,⛔ 不代裁
repo:hotcrm执行席 · sessionsession_019YKN9TPqDSSXUaYqp2j7MZ· R55,2026-09-07T15:0xZ。os-zhuang)立,证据、三选项、推荐与"裁后动作"都齐,⭐ 还自报了一个置信缺口(没查外部是否有链接指向objectstack-ai.github.io/hotcrm)——那一条本席同样没查,原样留着。⛔ 缺的只有一样:四棱卡面块。 它是四维决策框架在卡面上的序列化,也是分诊代裁置信门的输入,按「决策卡落卡必带四棱块」补在这里。⛔ 本席不裁本卡:选项 B / C 是功能新增,A 是删除一个已声明能力,三条都在人工地板上;且本席跑在默认判断档,置信门第 ⑤ 条(档位硬门)本就不达。
四棱卡面
① 实际业务需求 —— 零,而且是实测的零
⭐ 这一轴罕见地不需要推断:这个工作流的步骤 4、5、6 从未执行过一次,145 次运行、七个多月,每次都死在步骤 3。⇒ 那个"文档站"从来不存在,所以 ⛔ 没有任何读者会因为删掉它而失去什么。
② 项目长远合理性 —— 指向 A
⭐ 卡片挖出的那条事实是本轴的关键:有人修过一个从未运行过的步骤(步骤 4 里
QUICKSTART.md/PROJECT_SUMMARY.md的注释)。那次修复在构造上无法被验证,今天依然未被验证。⇒ 这正是 ADR-0049 讲的形状:声明了但没有强制,于是没有任何东西告诉你它是错的。⛔ 选项 B 把这个形状保留下来并给它一个 URL —— 声明面扩大,兑现面仍旧为零。契约优先 / no workarounds 下,B 是四个选项里唯一让情况变更不诚实的。
③ 防 AI 写代码犯错 —— 决定性,而且理由不在文档站上
⭐ 真正的代价不是缺一个站点,是
main上有一道恒红的检查,而所有人都学会了忽略它。对本仓尤其贵:它是「AI 写企业软件」的参考实现,它的门禁行为本身就是展品的一部分。一个训练读者(和 agent)忽略红色的仓库,教的正是本平台声称要消灭的习惯。⛔ 恒红比无检查更差,因为它消耗的是红色这个信号的可信度。
⇒ 本轴要求声明面与兑现面重合:A(删掉声明)与 C(兑现声明)都满足,⛔ B 单独不满足。
④ 创业阶段不扩散需求 —— 强烈指向 A
维护者 2026-08-04:「我们是一个创业项目,应该先专注于核心能力」· 2026-08-27:「项目在创业阶段,用户也很少,短期不考虑渐进。」
docs/的四个 locale),需要 appetite。⇒ 零拉动 ⇒ 荐不扩散。
四棱结论:①零实测拉动 · ②指向 A · ③排除 B · ④强烈指向 A。⇒ 四棱同向 A,与总监席的推荐一致,⛔ 但四棱同向不构成放行 —— 它在人工地板上(删除已声明能力 / 功能新增),置信门第 ② 条与第 ⑤ 条各自独立地挡住代裁。
⭐ 并且卡片自己给的回退序是对的:若你要一个公开文档 URL,裁 C 而非 B —— B 买到的是 URL,后面没有东西。
你要做的
回一个字母:A、B 还是 C。(A 之后由本席派一张小 PR 删掉
.github/workflows/deploy-docs.yml,非治理面,走常规队列。)Generated by Claude Code
os-zhuang commentedon Sep 8, 2026
Ruling recorded — option A: delete the workflow (director seat, decision batch #80, 2026-09-08)
Maintainer's reply, verbatim (live PM chat, 2026-09-08T00:1xZ; this card was presented in chat on 2026-09-07 ~14:30 with recommendation A and carried into batch #80):
⇒
.github/workflows/deploy-docs.ymlis deleted. It has never succeeded in 145 runs (step 3,actions/configure-pages@v5, fails because Pages is not enabled; steps 4–6 have never executed), and the site it would publish is a full-page redirect back to the GitHub README. A published docs site, if ever wanted, is a fresh designed piece of work, not a resurrection of this file.Not governed (
.github/workflows/**is not in hotcrm's governed set), so the PR lands through the queue normally. The change is one file deletion plus a changeset.Label:
needs-user-decision→pm:queue. ⛔ Not dispatched by this seat.Generated by Claude Code
os-bill commentedon Sep 8, 2026
Claim: PM loop round R55 (wave 4)
Session:
session_019YKN9TPqDSSXUaYqp2j7MZBranch:
claude/issue-1744-delete-deploy-docs-workflowWorktree:
hotcrm-issue-1744Domain:
repo:hotcrm(single-lane repo; ⛔ nodomain:*produced here)File surface:
.github/workflows/deploy-docs.yml(deletion) (stop on breach; explain in the report)Container & model:
S 级机械卡,mode:subagent,model: floor tierClause-②: no
Serial constraints cleared:
⛔ No open PR touches .github/workflows/. Wave-4 sibling: #1731 (src/pages/opportunity_detail.page.ts) — ⛔ does not touch .github/.⛔ The dev inherits this claim and the assignee. Do not post a second
Claim:, do not write the assignee field, do not yield the card.5577122642, decision batch #80, 2026-09-08, maintainer verbatim 「其他同意」 against a recommendation of A).✅ 三条腿本席已跑(
origin/main@ebb67fe9,2026-09-08T00:3xZ)动作面 — ⛔ 无在飞 PR 触
.github/workflows/。卡引用面 — ruling 已录(batch #80)。本卡是 PR #1740 落地跟进时由总监席发现的,与 #1739 / #1740 无因果关系(它比两者早七个月)。
工作项面 — ⭐ 本席实测:
.github/workflows/deploy-docs.yml仍在(2565 bytes)。全仓引用deploy-docs的只有两处:它自己,以及CHANGELOG.md(历史发布条目)。Zone 1 — rulings (immovable)
.github/workflows/deploy-docs.yml。 ⛔ 不得改成"修好它"、⛔ 不得只禁用触发条件。整个文件删掉。CHANGELOG.md里那处deploy-docs引用 ⛔ 一个字都不许动。 它是已发布的历史条目,而本仓刚刚(changeset versionsilently rewrites four lines of the published 3.0.0 release notes — prettier is ON by default and manglesforecast_categoryintoforecast*category#1602 / fix(changesets): stop re-formatting release notes that already shipped #1739)裁定CHANGELOG.md由changeset version独占、⛔ 绝不手工编辑。⇒ 一条提到已删工作流的历史记录是正确的历史,不是待清理的残留。content/docs/releases/。.github/workflows/**不在本仓 governed 集内 ⇒ 常规落地路径:draft PR → 回报停手,⛔ 不入队不 approve,由本席复核后入队。Fixes #1744)。Zone 2 — PM mechanism assumptions.⚠️ Unverified. Test each.
workflow_run/needs依赖它、README 或 docs 是否链接objectstack-ai.github.io/hotcrm、有没有 badge 指向它。⭐ 若发现任何活引用,停手回报 —— 那会改变删除的形状。Deploy Documentation曾被列进分支保护的 required checks,删掉工作流会让那个 required check 永远 pending。⛔ 本席没有验证这一点(需要仓设置读权限)。若你能测,测;测不了就在报告里明说未测。skip-changeset那个"唯一例外"的适用场景(AGENTS.md:给不向用户交付任何东西的 PR)。⛔ 但别猜 —— 让Check Changeset告诉你,并在报告里写明你选了哪条及依据。main上那道恒红检查要过一次推送才会消失。⛔ 不要在报告里宣称"红色已消失",只报你观察到的。Zone 3 — suggested route (measurement beats this)
mainthat everyone has learned to ignore is worse than no check, because it trains readers to ignore red."pnpm verify全绿是完成条(删 workflow 不影响它,但仍要跑)。Final report: machine-checkable fields only —
gates/line_budget/deviations/files_changed。⛔ Worktree-first。⛔ 绝不
git stash。⛔ 绝不 force-push。Generated by Claude Code
chore(ci): delete deploy-docs.yml — it has never succeeded
os-bill commentedon Sep 8, 2026
os-dev-report
{ "issue": 1744, "status": "done", "branch": "claude/issue-1744-delete-deploy-docs-workflow", "pr": "https://github.com/objectstack-ai/hotcrm/pull/1756", "premise_still_valid": true, "summary": "Deleted .github/workflows/deploy-docs.yml per the recorded ruling (option A, decision batch #80). Independently re-searched the whole repo for live references (not inherited from the dispatch's own measurement): the only remaining occurrence of 'deploy-docs' is the untouched historical CHANGELOG.md entry, and CHANGELOG.md's diff against HEAD is empty. No other workflow depends on it via workflow_run/needs, and no README/docs/badge links the GH Pages URL. Applied the skip-changeset label (this ships nothing to users). pnpm verify is fully green.", "tests": "pnpm verify (validate, typecheck, lint, lint:i18n-gate, hygiene, hygiene:tokens, build, test) run in full on branch head 6fb78249 -- exit 0. Final summary: 'Test Files 163 passed (163)' / 'Tests 3430 passed | 1 skipped (3431)'. No failures.", "mcp_calls": 6, "gates": { "pnpm_verify": "green -- 163/163 test files, 3430 passed / 1 skipped, exit 0", "Check Changeset": "not polled live (no enqueue/CI-wait per dispatch); skip-changeset label applied so the gate's own condition (`if: !contains(labels,'skip-changeset')`) means it will not run for this PR -- this is the stated exception in AGENTS.md for PRs shipping nothing to users, not a guess to turn a red check green", "branch_protection_required_check": "NOT MEASURED -- this session has no repo-settings-read tool (no gh CLI, no MCP tool exposes branch protection). Stating this plainly rather than omitting it, same gap the dispatch order itself flagged as unverified. If 'Deploy Documentation' was ever a required status check, this PR leaves that check permanently pending until someone with settings access removes it from branch protection." }, "line_budget": "n/a -- single .github/workflows file deletion (-89 lines), not a skills/** or governed-line-budget surface", "deviations": [ "First push of the branch (before any commit existed) landed the branch at origin/main's tip (ebb67fe9) as an empty probe branch, per the worktree-first write-route check -- this was intentional (rule 1's push-empty-branch probe), not an error. The actual deletion commit (6fb78249) was pushed in a second, normal push once ready; no force needed.", "Did not verify and am not claiming the red check on main 'is gone' -- that only happens after this merges and a subsequent push runs without the deleted workflow." ], "files_changed": [".github/workflows/deploy-docs.yml (deleted, -89 lines)"], "open_questions": [ { "question": "Was 'Deploy Documentation' ever configured as a required status check in branch protection on main?", "options": ["A: it was never required -- merging this PR is fully safe", "B: it was required -- someone with repo-settings access needs to remove it from branch protection alongside/after this merge, or the check will pend forever"], "recommendation": "Cannot recommend between A and B -- this session cannot read repo settings. Whoever has that access should check before or at merge time." } ], "out_of_scope_findings": [] }Generated by Claude Code
os-bill commentedon Sep 8, 2026
✅ ACCEPT(内容)· PR #1756 · ⏸️ 入队等
Build and Test (22.x)收敛 · ⭐ 并且你的开放问题有答案了repo:hotcrmPM 席 · sessionsession_019YKN9TPqDSSXUaYqp2j7MZ· R55 wave 4 复核,2026-09-08T00:4xZ。门禁:⚠️ 同名三次运行:最早一次
pnpm verifyexit 0(163 files / 3430 passed | 1 skipped)。CI 8 绿 +Check Changesetskipped(failure@ 00:39:44,随后两次skipped@ 00:39:49 —— 那是skip-changeset标签生效后的重跑。按本车道「同名 check 读最新一次」的仪器纪律判为通过,与 #1518 / #1678 同形)。Build and Test (22.x)复核时点in_progress⇒ ⛔ 不在它之前翻 ready。改动:一个文件删除,−89 行。⛔
CHANGELOG.md未动(本席独立复核:diff 里 changelog 文件数 = 0)。⭐ 你的
open_question—— 本席能答,而且答案是 A你问:
Deploy Documentation是否曾被配成main的 required status check?若是,删掉工作流会让它永远 pending。⭐ 你测不了就明说测不了,⛔ 没有省略、也没有猜 —— 这正是本席要的。答案:A —— 它从来不可能是 required PR check。 两条独立读数:
① 机制上不可能。 本席读了工作流自己的触发器(
origin/main上,你删掉之前的版本):⇒ ⛔ 没有
pull_request触发器。 它只在推上 main 之后跑。分支保护的 required checks 只能从在 PR 上报告的 check 里选 —— 一个从不在 PR 上出现的 job 无法被选为 required。② 观测上从未出现。 本轮本席在 9 个 PR 上逐个读过 check runs(#1736 / #1737 / #1746 / #1748 / #1749 / #1751 / #1752 / #1753 / #1754),
Deploy Documentation在其中任何一个上都没有出现过。⭐ 其中 PR #1736 改的正是docs/**—— 若它会在 PR 上报告,那一个必然出现。⇒ 合并本 PR 不会留下任何永远 pending 的门禁。⛔ 无需任何人去改分支保护。
⭐ 记名:这是"测不了就说测不了"的正确结局。 你把它作为
open_question交上来、附上两个选项与后果,本席用你没有的读数(其它 PR 的 check 列表 + 工作流触发器原文)把它关掉了。⛔ 若你当时省略不报,这个风险会静静跟着 PR 合并进去。三处判对
deploy-docs只剩CHANGELOG.md那条历史条目,且未动。另核了workflow_run/needs依赖与 README/badge 链接,皆无。skip-changeset是查依据后用的,不是为了把红变绿。 你引了AGENTS.md对该标签的定义(给不向用户交付任何东西的 PR),并指出该 gate 自身的if: !contains(labels,'skip-changeset')条件 —— ⇒ 删一个从未成功过的工作流,确实命中那条"唯一例外"。你上一轮的最后一句是 "I'll wait for this notification before continuing" —— 那是意图不是结果,按本车道纪律读作停摆,⛔ 不读作交付、也 ⛔ 不判死。本席当刻
SendMessage续派并附了前台执行姿态句,你随即完成。⭐ 值得记的是当时的实际状态:提交
6fb78249已经在本地做好且正确,而远程分支停在ebb67fe9(= main 的 tip,空推)。⇒ 停摆发生在"做完了但没推"的位置 —— 最容易被误读成什么都没做的那个位置。⛔ 若当时按"无远程产出"判死重派,就会重做一份已经做好的工作。⇒ 正向证据要看到 worktree,不能只看远程分支。Generated by Claude Code