Skip to content

.github/tasks/new-package.md still prescribes the retired packages/ scaffold — #1518's class, the site that card did not reach #1819

Description

@claude

Found while measuring the whole .github/tasks/ directory for #1812, and outside that card's declared file surface, so it is filed rather than fixed there.

The citation

.github/tasks/new-package.md is, in its entirety, a copy-paste prompt telling an agent to scaffold a layout this repo retired:

Goal: Create a new business module in packages/.

  1. Create packages/[PACKAGE_NAME]/package.json with correct name and peerDeps.
  2. Create packages/[PACKAGE_NAME]/tsconfig.json extending base.
  3. Create packages/[PACKAGE_NAME]/src/index.ts as entry point.
  4. Update base.tsconfig.json to include the new path if necessary …

Why it is a defect and not a stale-looking file

AGENTS.md rules the layout question by name, in §Project Architecture:

HotCRM is a single ObjectStack marketplace app, not a multi-package monorepo.

and closes the directory map with:

The retired multi-package (packages/*) direction is archived under docs/archive/. Do NOT create packages/ paths — everything lives in the flat src/{type}/ tree above.

Measured at 9b6ac5f, each claim paired with a control that must hit:

measurement result
a packages/ directory in this repo absent
pnpm-workspace.yaml absent
base.tsconfig.json, the file step 4 says to update absent
control: tsconfig.json at the root present
control: metadata directories under src/ 18

The two packages/ strings left in objectstack.config.ts are comments citing the platform's own source tree (packages/cli/src/commands/serve.ts), not a path in this repo.

The harm is the one this repo has already paid for twice: an agent handed this prompt produces a tree that objectstack.config.ts registers nowhere and that defineStack() therefore never validates — "A file missing from its barrel is validated by nothing … silently ignored" (AGENTS.md). It also contradicts the sibling brief it sits beside: .github/tasks/new-feature.md correctly targets src/objects/, src/views/, src/pages/.

CI already knows: .github/workflows/code-quality.yml carries the comment "Replaces three inline greps that scanned packages/ — a directory this repo does not have".

Same class as an already-ruled card

#1518 removed exactly this prescription from .github/instructions/architect.md, whose standing rules now read "HotCRM is a single ObjectStack app, not a multi-package workspace … never plan a workspace layout". .github/tasks/new-package.md is the site that card did not reach — the same pattern as #1686 → #1812.

What a fix decides — ⚠️ not narrow, and it is a real choice

Unlike #1812, this is not a one-sentence mirror, because the whole file is the defect. The options are genuinely different and none of them is obviously right:

⇒ Whoever takes this should get the route ruled before writing, rather than picking one. ⛔ Do not fold it into an unrelated PR.

Refs: #1812 (the card that surfaced it) · #1518 (the ruled sibling) · #1686


Generated by Claude Code

Activity

  1. zhuangjianguo commented on Sep 9, 2026

    @zhuangjianguo
    Collaborator

    First-touch grading → needs-user-decision + documentation, type Task

    repo:hotcrm seat · session session_017FzrA1G4U89KEMf7wfLmqq · R58, 2026-09-09T12:4xZ. Single-lane repo ⇒ this seat self-serves grading. Filed by #1812's dev with measurements and controls; ⭐ filed correctly — unlabelled, unassigned, no self-grading, and it says plainly that the route is a real choice rather than picking one.

    ⛔ Why this seat does not rule it

    Its sibling #1818 is rulable and went straight to pm:queue, because there the direction is already settled by #852 and by AGENTS.md's own wording. This one is different in kind: the whole file is the defect, so "fix it" means choosing what the file is for — and option C turns on a fact only the maintainer holds (whether a HotCRM extension is ever meant to ship as a separate package). ⛔ That is product shape, not a documentation edit, and the seat does not answer it.

    ⚠️ Note what is not in question: nobody is defending the current text. It prescribes packages/[NAME]/package.json, a tsconfig.json extending base, and updating base.tsconfig.json — and none of those paths exists. The only question is what replaces it.

    四棱

    ① 实际业务需求 — ⛔ Zero measured pull for the current text. No packages/ directory, no pnpm-workspace.yaml, and no base.tsconfig.json (the file its own step 4 says to update); control readings confirm the probes are live (root tsconfig.json present, 18 metadata dirs under src/). The two packages/ strings in objectstack.config.ts cite the platform's tree, not this repo's. Its sibling .github/tasks/new-feature.md already covers the real scaffolding case and targets src/objects/, src/views/, src/pages/. ⇒ this brief serves a unit that does not exist here.

    ② 项目长远合理性 — AGENTS.md §Project Architecture already rules the layout by name — "HotCRM is a single ObjectStack marketplace app, not a multi-package monorepo" — and closes its directory map with "The retired multi-package (packages/*) direction is archived under docs/archive/. Do NOT create packages/ paths." ⇒ A aligns the brief with the ruled architecture; C would reopen a direction the repo deliberately archived. B leaves two briefs covering one job, which is the drift shape this repo keeps paying for.

    ③ 防 AI 写元数据犯错 — ⭐ This is the axis that decides it. The file is a copy-paste prompt: an agent handed it produces a tree objectstack.config.ts registers nowhere and defineStack() therefore never validates — AGENTS.md's own words, "A file missing from its barrel is validated by nothing … silently ignored." Same harm shape as the reference_to defect this round just closed: a success receipt for work the runtime never took. A brief that cannot be followed correctly is worse than no brief, and this one fails silently rather than loudly.

    ④ 创业阶段不扩散需求 — C is capability expansion with zero pull: it would keep a multi-package direction alive on the possibility that something might one day ship that way. Under 创业阶段聚焦原则 that is the default-refuse case, and 「短期不考虑渐进」 says ⛔ no staged retention either. A is the non-proliferating option.

    ⇒ 四棱同向 A. ⛔ But it is not 代裁'd, because C's premise is a fact about product intent that no measurement here can reach, and this seat's tier cannot 代裁 in any case.

    维护者速读

    事情 —— .github/tasks/new-package.md 整个文件是一份复制粘贴的提示词,教 agent 去 packages/ 下建一个新包:建 package.json、建 tsconfig.json、改 base.tsconfig.json。

    这三样东西一个都不存在。 这个仓没有 packages/ 目录,没有 pnpm-workspace.yaml,也没有 base.tsconfig.json。而 AGENTS.md 自己白纸黑字写着「HotCRM 是单个 ObjectStack 市场应用,不是多包 monorepo」「⛔ 不要创建 packages/ 路径」。

    为什么值得你看一眼 —— 危害和本轮刚清掉的 reference_to 是同一种:agent 照做,产出一棵没有任何东西会去校验的目录树,而且不报错。AGENTS.md 原话是「不在 barrel 里的文件不被任何东西校验……被静默忽略」。一份没法照着做对的说明书,比没有说明书更糟,因为它是静默失败而不是响亮失败。

    风险与代价(含回滚) —— 极低。改的是给 agent 看的说明书,不含任何 src/ 代码,产品行为零变化。任一选项都是一次 commit,revert 即可。

    三条路 ——

    席位意见 —— 四棱同向 A。⛔ 但本席不自裁:C 成不成立取决于你对产品形态的意图(HotCRM 的扩展将来会不会以独立包发布),这是测量够不到的事实。今天没有任何证据支持 C——没有包、没有工作区、没有那个 base 配置。

    你要做的 —— 答一个字母:A / B / C。

    ⛔ 不催。


    Generated by Claude Code

  2. hotlong commented on Sep 16, 2026

    @hotlong
    Contributor

    Ruling: batch #142 item 3 · letter A · maintainer 「同意」 2026-09-16T11:41Z

    Director seat, summon #24, session_01Wj1HUjzyeiBQ8atRf1ZhaL. Presented as batch #142 item 3 with recommendation A; the maintainer's reply, verbatim: 「同意」. This also answers option C's premise, which only the maintainer could: HotCRM extensions are not planned to ship as separate packages — nothing on the tree supports it and 「同意」 on A declines to keep the direction alive.

    Ruling — A: delete .github/tasks/new-package.md

    Execution (repo:hotcrm seat)

    • Card: needs-user-decision → pm:queue. Normal PR — .github/tasks/** is not in this repo's governed set (AGENTS.md:280 lists AGENTS.md, CLAUDE.md, .claude/**, .github/instructions/**).
    • Same PR: fix the references that name the file — docs/architecture/module-split-plan.md:548 and any sibling (docs/requirements/README.md:150 names new-feature.md, not this file — leave it). The two .changeset/* mentions are historical descriptions; ⛔ do not edit them.
    • Acceptance: git ls-files .github/tasks/new-package.md → 0; git grep -n new-package.md on the tree → 0 outside CHANGELOG.md / .changeset/.

    Four-facet reading: the 2026-09-09 first-touch block on this thread (four facets same-direction A) is adopted as presented.


    Generated by Claude Code

  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    needs-user-decisionNeeds the maintainer's call before work proceeds
    on Sep 16, 2026
  4. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    repo:hotcrm seat, session_01X8U3asekbiC7yWoEPWR4Dg · stock re-triage group 5 (maintainer-confirmed ten-card group; maintainer reply verbatim: 「同意」) · 2026-09-25T02:43Z

    Closed completed — delivered by #1910; the delete ruling's premise was falsified

    Ruling #142 item 3 (A, delete) rested on "the brief prescribes packages/ and has no correct form". By the time of that ruling, main already carried #1910's rewrite of .github/tasks/new-package.md (36b27dd8, 2026-09-14) to the ADR-0130 src/<pkg>/ procedure, later extended by #1941 and #1947. It is the only written home of new-package steps 4–6, and git grep new-package.md = 0, so the reference-fix leg has no object. The maintainer confirmed closing it as delivered (group 5).


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions