任务:产品线“不分版本”的范围:规格文档和定不了版本线的用例文档挂进去,各版本都读得到
依据:
- 决定 35 知识库第 2 项(
docs/hub-r4-progress.md):没有发布记录的规格类文档,挂进产品线“不分版本”的范围,构建字段记未声明,各版本都读得到;普查 5.2 第 6 条那 762 份没有版本线的用例文档也这样处理。 - 普查
docs/hub-r4-research/unknown-sweep.md5.2 第 6 条:产品同步从不列出的用例文档 762 份,670 份没有版本线,92 份所在的版本线没有构建;改法是放进不分版本线的范围,视图带上略去的计数。 - 调研 4(
docs/hub-r4-research/kb-real-sources.md74 行):手册库的规格和 QA 文档还没读进知识库,K01 R[5] 的基线定下之前存而不挂。 - 模型:K01、K02 R[2]、K05、W06 F[4] 和 R[0](
node tools/show-element.ts K01 K02 K05 W06)。模型文字由集成者先改,再开这一件:- K01 DEF:每条产品线@版本一棵,另有一棵产品线不分版本的;
- K01 R[5]:没有发布记录的规格类文档、定不了版本线的源进不分版本的范围,构建记未声明,依据是产品包的声明;
- K01 R[6]:不分版本的范围也有一个当前根指针,移动规则同版本线;
- K05 DEF、W06 F[4]:运行开始时同时锁定版本根和不分版本的根;换了其中一个就是新运行(W06 R[0]);
- K02 R[2]:不分版本的条目,“版本适用”的第二条看不分版本的根的组成,结论带“构建未声明”。
动手时以集成者改后的模型为准,有出入写进 README。
- 分支和工作树:
kb-unversioned,目录circle-hub-kb-unversioned。等这一批(K1、K2、kb-links、views-and-notes、hygiene-2)和 hub-unknown-model(也改contracts/src/validation.ts)合并、集成者改完模型以后,从 hub-redesign 开出并通知。先后:- hub-variables 第二步也改
contracts/src/product.ts(product@1 的variables)、knowledge.ts(tree_root@1 的variables)和hub/knowledge/sync.ts、sources.ts、produce.ts。那一件先合并(它在决定 29 推送的路上),这一件第一步在它之后合并;不分版本的根的生产器照它解析变量,组成记录照它写variables。 - famx-deployment-conventions 的 FAMX 那一步和 kb-applicability 也改 FAMX 包,这一件第二步排在它们后面;
packs/product/famx/pack.json的版本号和签名以合并后的为准,最后重签;kb-applicability 还改contracts/src/product.ts的 Applicability 一段,和这一件第一步段落不同; - hub-retry-split 管着
exact.ts和evaluate.ts的 80–560 行,这一件第 4 条要改其中两段:排在 hub-retry-split 合并以后; - hub-unknown-exits、hub-read-absence 也改
hub/runs/engine/start.ts、submit.ts、hub/ports.ts、hub/server/text.ts、hub/server/console/pages.ts、packs/system/**:这一件在这些文件里只动下面点名的几段,并行时后合并的一方解决冲突; - hub-view-scope 排在这一件后面。那一页第 10 条里“产品同步不列出的用例文档放进不分版本线的范围”改由这一件做,已从那一页拿掉;那一页第 2 条“略去的文档”只再数既不在构建的根、也不在不分版本的根里的。
- hub-variables 第二步也改
- 可以改的路径:
- 第一步:
contracts/src/product.ts、knowledge.ts、run.ts,contracts/src/validation.ts的 Locks 一处,照生成器重新生成contracts/generated/**;hub/knowledge/**;hub/ports.ts的 KnowledgePort 和 RootInfo;hub/runs/engine/里:target.ts;start.ts锁根的一段;submit.ts里回注的 contributionScope 一段;exact.ts的scopeProblem;evaluate.ts里 tree 引用的那一支(约 399 行);reuse.ts的unchanged();hub/server/text.ts的 start_run 回答一段;hub/server/console/pages.ts的知识页和rootPage;- 对应的测试和 README。
- 第二步:
packs/system/manual-store/**;packs/system/openkm/functions/webdav.ts、system.json、README.md和 openkm 的pack.json(只为和手册库那份保持一致:webdav.test.ts逐字节比 webdav.ts,也比 system.json 里的读列表);packs/product/famx/**;- 对应测试。
- 第一步:
- 规则:同前(不推送、不建 PR、不发布、不部署;不碰 7420、钥匙串、环境配置文件和任何真实系统;测试只用合成数据,版本线 10.6 以后,地址只用 192.0.2.0/24 和 2001:db8::/32;
git commit -s)。所有者的规矩:- 未知只能是过渡状态:产品还没有不分版本的根时,给确定的说明和下一步(同步这条产品线),不记未知;
- 枚举只来自生成的词表:生产器只在不分版本的根上跑用布尔开关,组成的依据用现有的
declared,不加取值; - Hub 只核验,不生成内容,不调用模型:不分版本的根和版本根一样,由产品包的确定性生产器从源产出;
- 核心里没有产品的字:规格目录、命名空间和文档的认法都在 FAMX 包里。
- 验证:
npx tsc --noEmit;node tools/gen-contracts.ts --check;node --test --test-concurrency=1对contracts/**、hub/knowledge/**、hub/runs/**、hub/server/**;第二步再加packs/system/**、packs/product/**、node packs/product/famx/api.ts check,和tests/acceptance里受影响的。
要做的
第一步:核心(合成产品,放在 hub/knowledge 的测试支持里)
- 契约:
- sync-plan-output@1 加可选的
scope:不挂版本线的源,按角色列出,写法同 BuildInfo.sources(一个或一列); - 生产器声明加一个布尔开关(名字回报):开了的只在不分版本的根上跑,没开的照旧只在构建的根上跑;
- ProducerInput 的 build 在不分版本的生产里没有(
hub/knowledge/README.md约 690 行,Needs 里“contracts(milestone 2)”的第 (1) 条要的就是这个),已有的生产器照旧拿到构建; - tree_root@1 的 version 和 build、root_pointer@1 的 line 和 build,在不分版本的根上记未声明(null);只放宽;
- 运行摘要(
contracts/src/run.ts103 行的 root)和校验结果的 Locks 旁边,加不分版本的根。
测试:几个新形状的正例和反例;旧的 tree_root、root_pointer 记录照样过校验。
- sync-plan-output@1 加可选的
- 产出(
hub/knowledge/sync.ts、produce.ts、store.ts、builds.ts):- plan 给了 scope,就用开了开关的生产器产一个根:和构建的根一样按内容寻址,源的摘要和生产器都没变就跳过;
- 组成记录里每个源的依据记 declared,决定人是产品包 id@版本;
- 每个产品一个不分版本的当前根指针,名字和任何版本线的指针都不撞(
store.ts195 行的 pointerName),照现在的比较并交换移动、留记录;同步报告单列一行; - plan 没给 scope 的产品照旧。
测试:有 scope 的同步产出两类根;只改 scope 的源,只重产不分版本的根,构建的根不动;什么都没改,两次同步字节相同;指针名不撞;没给 scope 的产品,构建的根和指针一个都不变。
- 读(
hub/knowledge/read.ts、api.ts,hub/ports.ts):- KnowledgePort 加“这个产品不分版本的当前根”,声明成可选的方法(
unversionedRoot?(product)),照以前给端口加方法的做法。这样hub/server/fakes.ts、hub/runs/engine/testing/knowledge.ts和各个包的测试桩(case-compile、defect-to-case、quality-board、traceability、regression-scope、case-location、maintenance-sweep 的测试 Hub,template-gap 的testing/bed.ts)不用改。没实现这个方法的端口,当作这个产品还没有不分版本的根。 - get_nodes、resolve_reference 按根摘要照常读它,读者权限同这个产品的其他根;
read.ts427 行按version.line取读者的根、408 行写组成的构建名、出处里的 build:不分版本的根用它自己的指针,构建写“未声明”;- RootInfo 的 build 在这个根上没有:改成可空,或者给不分版本的根单独的返回形状,二选一写进 README,用到 RootInfo.build 的地方都过一遍,控制台的
rootPage(pages.ts约 429 行的info.build.name)也在内。
测试:读得到不分版本的根;无权的读者照旧“对你不可用”、同形的空答复;读者的根取自它自己的指针;出处的构建写“未声明”;控制台的根页对这个根写“构建未声明”。
- KnowledgePort 加“这个产品不分版本的当前根”,声明成可选的方法(
- 运行(
hub/runs/engine/target.ts、start.ts):- start_run 锁定版本根的同时,锁定这个产品不分版本的当前根,记进运行和 target_basis(一条依据,来源类型 projected,规则写明“产品线不分版本的当前根”);
- 还没有这个根时,回答里写“这条产品线还没有不分版本的根”,下一步是同步这条产品线,运行照开;
- 运行的范围是它锁定的根的集合,不再只是
run.root。现在只认run.root的三处都改:- 边界:
exact.ts的scopeProblem(约 153 行,“引用的知识树根不是本次运行锁定的根”); - 检查的片段绑定:
evaluate.ts里 tree 引用那一支(约 399 行,现在记 not_bound); - 条目复用:
reuse.ts的unchanged()(约 82 行)。
- 边界:
- 回注运行核对来源范围时,也认运行锁定的这个根(
hub/knowledge/contributions.ts取组成的一段,submit.ts的 contributionScope)。
测试:
- 运行锁定两个根;没有不分版本的根时的确定说明,运行照开;不分版本的根换了以后再开是新运行;
- 一份提交引用不分版本的根里的条目,被受理,检查读这个片段是 bound;引用第三个根的照旧被拒;
- 不分版本的根里的条目没变时,条目照样复用;
- 回注引用不分版本的根里的源能过范围核对。
-
显示:start_run 的回答(
hub/server/text.ts810 行)在锁定的知识根后面写出不分版本的根;控制台知识页(hub/server/console/pages.ts350–389 行)每条产品线加一行“不分版本”,写当前根和源的个数。测试:回答文字里有这个根;知识页有这一行,没有根时写“—”。
-
版本差不变:两个构建的根做差(diffRoots、diffEntries),不分版本的内容不出现,回归范围也就不受它影响。
测试:同一次同步产出的两个构建的根做差,结果里没有不分版本的路径。
- 构建的视图也带上不分版本的根(
hub/knowledge/views.ts):- 现在构建的视图(
knowledge:index/facets/impact:<产品>:<构建>)只读构建的根。用例文档挪进不分版本的根以后,质量看板、追溯、用例定位、模板查缺会悄悄少掉这些文档。 - 改成:视图把运行锁定的不分版本的根里的条目一起算进来,每条标“构建未声明”,带那个根的摘要;
totals里单独数“其中不分版本的”条目数和文档数,截断砍不掉。 - 产品还没有不分版本的根时,视图照旧,说明里写“这条产品线还没有不分版本的根”。
- 测试:同一份用例文档从构建的根挪到不分版本的根以后,四种视图里照样有它,标着“构建未声明”,计数对;两次读字节相同。
- 现在构建的视图(
第二步:FAMX 包(第一步合并以后,集成者通知)
- 手册库列目录:manual-store 系统包加一个读,列出声明的目录下的直接成员。
- 目录清单是资源设置里的一个参数(
settings.spec_folders,一列),不写死。这一件只接现在的规格目录;product/、qa/要不要加,由集成者只读数过、定了以后改部署数据,不改代码。 - 目录清单仍是手册库资源的设置
settings.spec_folders(一列),包只读设置,代码不改;部署时这一项写成${var:MANUAL_SPEC_FOLDERS}(hub-variables 的--setting-var),product/、qa/要不要加就是一条circle-hub var set。原来的字符串设置settings.spec_folder并进列表还是保留,仍由这一件定。 - 取目录照 spec-search 的做法;成员照
functions/webdav.ts现有的 membersOf:不跟链接,放不进路径段的名字跳过并在读的警告里点名。 - openkm 那份同名文件照测试保持一致:webdav.ts 逐字节相同,system.json 里加同一个读(前缀换成 openkm:),README 同步;两个包各升一个小版本,重签。
测试:列目录的正例;目录读不到;跳过的名字;两个目录的清单;两份 webdav.ts 和读列表一致的那个测试照过。
- 目录清单是资源设置里的一个参数(
- 规格文档:
- 规格目录是几个产品共用的(架构第 8 节:约 1,070 份,文件名里有 FAMX 的 354 份,有 FAMY 的 47 份)。同步计划只把文件名或标题里写着 product.json 某个名字的文档(
manual:file:<路径>)列成这条产品线不分版本的源,认名字的办法和documents.ts一样。 - 别的文档不挂这棵树,在同步报告里数成“不属于这条产品线”:照旧存着、能被引用,只是不挂。
- 新的规格生产器照 K1 的章节落点,挂在和 /manual 分开的规格命名空间下(例如
/spec/<文档名>/<章节路径>,最后的写法写进 README);命令字面照 K1 记在data.command_literals,生产时不解析; - 文档名或标题里写到的版本线(
functions/documents.ts的 documentLines)照原样记在 data 里,只作说明,不限制哪个版本能读; - 适用条件照 K1 和 kb-applicability 的规则抽(那一件合并在前);构建不设。
测试:规格文档按章节挂,命令字面照记;名字里写了版本线的规格也在不分版本的根里,data 里照原样记着那条线;一份别的产品的规格不挂、报告里计数;两次同步字节相同。
- 规格目录是几个产品共用的(架构第 8 节:约 1,070 份,文件名里有 FAMX 的 354 份,有 FAMY 的 47 份)。同步计划只把文件名或标题里写着 product.json 某个名字的文档(
- 用例文档(
functions/cases-sync.ts的列出规则):- 定位不出版本线的、所在版本线没有带命令树的构建的(uncoveredDocuments 数的那一类),改列进不分版本的范围;早于 min_line 的、编号敏捷包读不了的、空目录,照旧不列,计数照旧写进 note。
- 不分版本的根里没有命令树:
product.json加一条开了开关的生产器,函数照用 cases,输入只有文档和目录、没有 tree。条目照 cases 现在的规则出,命令解析不了的照旧不挂节点。 - 命令短语记在
data.command_phrases里,原样。这个字段只在不分版本的那条生产器上加,用一个生产器参数打开;构建的根上的用例条目不加,它们的摘要不变,也就不用重产所有的根。 - 读时对上读者版本根的命令,要等 kb-links 的链接声明,属于后续,写进 README。
- 同步报告按原因写出进了不分版本范围的文档数,和仍然没列的文档数。
测试:没有版本线的用例文档、版本线没有构建的用例文档进不分版本的根,带
command_phrases;构建的根里的用例条目字节不变;早于 min_line 的照旧不列;报告里两个计数对。 - 包升小版本,README 同步,
node packs/product/famx/api.ts sign。
完成后在终端里回报:提交号、测试数量、没做完或拿不准的地方。