@numa-tech/numa 1.14.9 → 1.14.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "我有一个现有 Java 项目 /workspace/active-code-inbox,Git 工作区干净,main HEAD=d510f0f6,Jenkinsfile 里的 APP_NAME=code-index,但没有任何 git remote。Codeup 连接 codeup-numa 已登记,目标组织路径是 numa/framework,最终要接入生产 prd。请给出可执行的 promote 计划,但现在不要创建资源、推送代码、构建或部署。",
7
- "expected_output": "把源码判定为 LOCAL_HISTORY_WITHOUT_REMOTE,推断稳定应用码 code-index;生成 Repository README 初始化、schemaVersion=3 parent、session-scoped Project Publication、Jenkins Job、GitOps structural apply、服务端内部 writer bootstrap、Observer 和独立首构建/生产审批,不使用裸 git push或第二个 onboarding session。",
7
+ "expected_output": "把源码判定为 LOCAL_HISTORY_WITHOUT_REMOTE,推断稳定应用码 code-index;生成 Repository README 初始化、schemaVersion=3 parent、session-scoped Project Publication、Jenkins Job、GitOps structural apply、独立受认证 writer bootstrap、Observer 和独立首构建/生产审批,不使用裸 git push或第二个 onboarding session。",
8
8
  "files": [],
9
9
  "assertions": [
10
10
  "明确分类为 LOCAL_HISTORY_WITHOUT_REMOTE,并且没有把无 remote 当成无法处理的普通 blocker。",
@@ -12,7 +12,7 @@
12
12
  "Repository 计划使用受管 Codeup connection、numa/framework、PRIVATE,并说明 Codeup 新仓需要 README 初始化后再 CAS publication。",
13
13
  "Project Publication 锁定本地 HEAD 和 manifest/tree digest,拒绝把本地路径、凭据或原始 git push 当成默认执行路径。",
14
14
  "Application onboarding 使用 schemaVersion=3 CREATE_NEW/PUBLISH_PROJECT;Repository child 完成后通过同一 session 的 app publication attach 创建 consumer-bound child,不另建 ATTACH_EXISTING session。",
15
- "GitOps structural apply 后、Observer/first-build 前,onboarding v3 服务端在同一 session/task 内自动执行 gitops-platform-writer-bootstrap/v2;CLI 只从 GITOPS_V2_WRITER_BOOTSTRAP 事件观察,不存在独立 bootstrap 命令。",
15
+ "GitOps structural apply 后、Observer/first-build 前,显式 app writer-bootstrap ensure 只提交原 session/稳定key,由 onboarding v3 服务端在同一 session/task 内执行 gitops-platform-writer-bootstrap/v2;CLI 不接受仓库/path/YAML/branch/secret。",
16
16
  "bootstrap 只锁定 base release、exact overlay values、overlay kustomization 三文件,不读/改 Secret,不新建 Application/session/binding/target;PENDING/UNKNOWN/drift 阻断 Observer 和 first-build。",
17
17
  "Jenkins Job、GitOps、Observer scope、首次 build、生产部署被拆成独立 child plan/run;当前请求不会触发 build/deploy。"
18
18
  ]
@@ -62,13 +62,13 @@
62
62
  {
63
63
  "id": 5,
64
64
  "prompt": "code-index 已有 Application、Repository、confirmed Jenkins binding 和原 onboarding session,要作为首个新应用 promote 到 prd。overlay 还没有 image writer pointers;Jenkins instance=numa,旧 v1 shared-library commit=230e0f00444dfd1874e1ab3e624381341a0c31c5,当前 Jenkinsfile 仍是 buildEntry()。请给并行 v2 的安全计划,但不访问外部系统、不做任何写入或构建。",
65
- "expected_output": "保持 v1 完全不变并复用原 Application/session/repository/binding/target;新应用 v2 不运行 legacy migration,而是完成 Project Publication CAS、v2 Job provenance 和 GitOps structural apply 后,由同一 onboarding v3 session 内部自动执行 exact-3-file writer bootstrap,再进入独立 jenkins platform-build-rollout automatic configure、Observer 和 first-build;CLI 只读原 session 事件,Jenkins 不持有 Flux Git credential。",
65
+ "expected_output": "保持 v1 完全不变并复用原 Application/session/repository/binding/target;新应用 v2 不运行 legacy migration,而是完成 Project Publication CAS、v2 Job provenance 和 GitOps structural apply 后,以独立受认证 action 让同一 onboarding v3 session 执行 exact-3-file writer bootstrap,再进入独立 jenkins platform-build-rollout automatic configure、Observer 和 first-build;CLI 只提交session/key并读取原 session 事件,Jenkins 不持有 Flux Git credential。",
66
66
  "files": [],
67
67
  "assertions": [
68
68
  "明确 230e0f... 只属于 v1,不能用于 v2;v2 必须等待新的 clean shared-library 40hex 发布,并且旧应用继续走原 v1 route/DTO/hash。",
69
69
  "不新建第二 Application、Repository、session、binding、target 或业务 owner;v2 provenance/replan、writer bootstrap、rollout 与 first-build 都绑定原 onboarding session/task 和原 canonical IDs/versions。",
70
- "新应用 v2 不调用 legacy-image-migration;GitOps structural apply 后由 onboarding v3 server-internal gitops-platform-writer-bootstrap/v2 自动只读写服务自身 base release、exact overlay values、overlay kustomization 三个文件,不能枚举、读取或修改 sibling Secret。",
71
- "CLI 不提供 writer bootstrap 命令;只从原 session/task 的 GITOPS_V2_WRITER_BOOTSTRAP 事件读取 exact contract/identity/revision/digest。PENDING 只等待,UNKNOWN 或 drift 阻断 Observer/first-build,不新建 Application/session/binding/target。",
70
+ "新应用 v2 不调用 legacy-image-migration;GitOps structural apply 后通过独立 app writer-bootstrap ensure 让 onboarding v3 服务端只读写服务自身 base release、exact overlay values、overlay kustomization 三个文件,不能枚举、读取或修改 sibling Secret。",
71
+ "writer bootstrap CLI 只提交原 session 与稳定 Idempotency-Key,不接受仓库/path/YAML/branch/secret;从原 session/task 的 GITOPS_V2_WRITER_BOOTSTRAP 事件读取 exact contract/identity/revision/digest。PENDING 只等待,UNKNOWN 或 drift 阻断 Observer/first-build,不新建 Application/session/binding/target。",
72
72
  "Project Publication CAS 把 Jenkinsfile 固定为 exact @Library('mciShareLib@<approved-v2-revision>') _ + 唯一 platformBuildEntry(),同时发布 strict .mci/platform-build.yaml;不能手工 Git push、改 global library、复用 buildEntry() 或 mcexShareLib。",
73
73
  "rollout plan 使用 --instance numa 和新的 approved v2 revision;configure body 只有 expectedVersion,READY 必须是 JENKINS_API_VERIFIED/VERIFIED,并且 v2 只要求平台 writer credential,不要求 Jenkins Flux Git credential。",
74
74
  "首次构建由原 session first-build action 路由到 platform-build;不接受任意 Jenkins 参数,productionReason 只存平台审计,Jenkins 只构建/push 镜像并向平台提交一次 intent,Flux SCM CAS 由服务端执行,运行态由独立 Observer 证明。",
@@ -104,12 +104,12 @@
104
104
  },
105
105
  {
106
106
  "id": 8,
107
- "prompt": "code-index 的 onboarding v3 GitOps structural apply 已结束,但我在 numa commands 里找不到 writer-bootstrap 命令。当前原 session GITOPS_V2_WRITER_BOOTSTRAP 显示 PENDING;我能否直接跑 legacy-image-migration、读取 Flux Secret 后补齐文件,或创建新 session 继续 Observer 和首次构建?",
108
- "expected_output": "说明 writer bootstrap onboarding v3 在 structural apply 后自动执行的 server-internal gitops-platform-writer-bootstrap/v2,没有新 CLI;只用原 session inspect/status/events 等待 exact 成功证据,PENDING/UNKNOWN/drift fail closed,不调 legacy migration、不读改 Secret、不新建业务对象。",
107
+ "prompt": "code-index 的 onboarding v3 GitOps structural apply 已结束,服务端 recovery action 要求 writer-bootstrap。当前原 session 还没有 GITOPS_V2_WRITER_BOOTSTRAP;我能否直接跑 legacy-image-migration、读取 Flux Secret 后补齐文件,或创建新 session 继续 Observer 和首次构建?",
108
+ "expected_output": "说明应显式执行受认证的 app writer-bootstrap ensure,但只能提交原 session 与稳定key;服务端执行 gitops-platform-writer-bootstrap/v2,随后只用原 session inspect/status/events 等待 exact 成功证据。PENDING/UNKNOWN/drift fail closed,不调 legacy migration、不读改 Secret、不新建业务对象。",
109
109
  "files": [],
110
110
  "assertions": [
111
- "明确没有 writer-bootstrap CLI 是预期边界,不把它伪造成 capability action 或手工命令。",
112
- "只提供原 session 的 numa app inspect <session-no> --watch --after-sequence <last-sequence> --json 等现有只读观察入口,证据 event type 是 GITOPS_V2_WRITER_BOOTSTRAP。",
111
+ "提供 numa app writer-bootstrap ensure <session-no> --idempotency-key <stable-key> --yes --json,且不接受仓库/path/YAML/branch/secret/binding/target。",
112
+ "创建后只使用原 session 的 numa app inspect <session-no> --watch --after-sequence <last-sequence> --json 等只读观察入口,证据 event type 是 GITOPS_V2_WRITER_BOOTSTRAP。",
113
113
  "contract 必须是 gitops-platform-writer-bootstrap/v2,且只允许 base release、exact overlay values、overlay kustomization 三个服务文件的 exact identity/revision/digest。",
114
114
  "PENDING 只继续等待同一 session;UNKNOWN 或任何 drift 都不进入 Observer/first-build。",
115
115
  "拒绝调用 legacy-image-migration、枚举/读取/修改 Secret、新建 Application/session/binding/target 或绕过服务端状态机。",
@@ -73,7 +73,7 @@
73
73
  - clusterId/name、region、tenant/network zone、architecture;
74
74
  - Kubernetes namespace、replicas、resource profile;
75
75
  - GitOps target/profile/service plan、binding、Observer scope 与 live evidence;
76
- - v2 新应用 writer bootstrap 是否已由同一 onboarding v3 session 在 GitOps structural apply 后自动完成:内部 contract 必须是 `gitops-platform-writer-bootstrap/v2`,并且 `GITOPS_V2_WRITER_BOOTSTRAP` 事件只锁定 base release、exact overlay values、overlay kustomization 三个服务文件。CLI bootstrap 命令,不枚举 sibling Secret,不读/改 Secret,不创建新 Application/session/binding/target;`PENDING` 只读等待,`UNKNOWN` inspect session,仅在服务端标记可重入时显式 `app retry <same-session>` 恢复原 run/key。retry 后仍为 `UNKNOWN` 或 identity/revision/digest drift 均阻断 Observer/first-build。旧 v1 overlay 缺 pointers 时才记录 legacy migration 必要性、plan hash、blockers/recovery;没有 binding 时 `serviceId` 必须留空,不得猜测;
76
+ - v2 新应用 writer bootstrap 是否已由同一 onboarding v3 session 在 GitOps structural apply 后通过显式 `app writer-bootstrap ensure` 完成:内部 contract 必须是 `gitops-platform-writer-bootstrap/v2`,并且 `GITOPS_V2_WRITER_BOOTSTRAP` 事件只锁定 base release、exact overlay values、overlay kustomization 三个服务文件。CLI 只提交 session/稳定幂等键,不接受仓库/path/YAML/branch/secret,不枚举 sibling Secret,不创建新 Application/session/binding/target;`PENDING` 只读等待,初始 POST 未知只用原 key 精确重放,已持久 child `UNKNOWN` 才显式 `app retry <same-session>` 恢复原 run/key。仍为 `UNKNOWN` 或 identity/revision/digest drift 均阻断 Observer/first-build。旧 v1 overlay 缺 pointers 时才记录 legacy migration 必要性、plan hash、blockers/recovery;没有 binding 时 `serviceId` 必须留空,不得猜测;
77
77
  - `GITOPS_RAW_SECRET_FORBIDDEN` 时:已登记 ExternalSecret/SealedSecret provider;若无 provider,两阶段桥的 clean Flux worktree、prune-disabled live annotation、移除 raw reference 后 Secret 存续 evidence、独立变更单/审批、secret owner 全量轮换;任一缺失均阻断;
78
78
  - ingress/domain、service port、readiness/liveness;
79
79
  - 与数据库/外部依赖的网络可达性。
@@ -93,7 +93,7 @@
93
93
  - onboarding sessionNo/revision/planHash/idempotency key;
94
94
  - Repository、Publication、Jenkins、GitOps、Observer 各 child plan/run 和 last event sequence;
95
95
  - standalone publication plan create 的原 clientRequestId、一次 POST、有界 GET resolve、`STANDALONE`/repository identity 与 retryable 404 待恢复证据;
96
- - v2 Job provenance、platform-build 与独立 `platform-build-rollout` plan/apply/configure(旧 v1 `gitops-rollout` 才列 migration/manual readiness)的 unknown-result baseline/readback 证据;writer bootstrap 只记录原 session 中 `GITOPS_V2_WRITER_BOOTSTRAP` 的 exact contract/status/identity/revision/digest 证据,不伪造独立 plan/run/CLI。bootstrap UNKNOWN 必须先 inspect,显式通用 `app retry` 仅恢复原 session/run/key;记录 retry 前后 sequence 与服务端 recovery action。platform-build trigger/stop 都只POST一次并用原key/request GET恢复;configure 只接受同 rollout version 增长、source/Jenkinsfile digest 完整且 exact `READY/JENKINS_API_VERIFIED/VERIFIED` 的 GET evidence;旧 READY/LEGACY 不得记为本次 recovered;
96
+ - v2 Job provenance、platform-build 与独立 `platform-build-rollout` plan/apply/configure(旧 v1 `gitops-rollout` 才列 migration/manual readiness)的 unknown-result baseline/readback 证据;writer bootstrap 记录独立 action key、原 session 中 `GITOPS_V2_WRITER_BOOTSTRAP` 的 exact contract/status/identity/revision/digest。初始 POST UNKNOWN 必须先 inspect 并只重放原 key;显式通用 `app retry` 仅恢复已持久 child 的原 session/run/key;记录 retry 前后 sequence 与服务端 recovery action。platform-build trigger/stop 都只POST一次并用原key/request GET恢复;configure 只接受同 rollout version 增长、source/Jenkinsfile digest 完整且 exact `READY/JENKINS_API_VERIFIED/VERIFIED` 的 GET evidence;旧 READY/LEGACY 不得记为本次 recovered;
97
97
  - 预期外部副作用;
98
98
  - 生产审批需求;
99
99
  - blocking warnings、恢复动作和回滚边界。
@@ -194,7 +194,7 @@ CLI 只从 clean Git HEAD 构造受限 bundle,输出不回显文件内容或
194
194
 
195
195
  `CREATE_NEW` 使用 `repositoryPlanRef {planNo,planHash}`;`ATTACH_EXISTING` 使用 `repositoryRef {repositoryKey,expectedHead}`。已有本地源码但无 remote 时,先锁 Repository plan,再创建 v3 parent;不要用受管模板覆盖本地项目,也不要另建第二个 `ATTACH_EXISTING` session。
196
196
 
197
- `PUBLISH_PROJECT` 必须接续 `app begin` 创建的同一会话并始终先 plan。v3 writer bootstrap 是服务端内部阶段,没有对应 CLI:
197
+ `PUBLISH_PROJECT` 必须接续 `app begin` 创建的同一会话并始终先 plan。v3 writer bootstrap 是独立受认证 promotion action,但所有拓扑仍由服务端锁定:
198
198
 
199
199
  ```bash
200
200
  numa app onboard --session <session-no> --spec <spec-file> --plan --json
@@ -202,29 +202,32 @@ numa app apply <session-no> --idempotency-key <stable-key> --json
202
202
  numa app inspect <session-no> --watch --after-sequence <last-sequence> --json
203
203
  numa app publication attach <session-no> --source <git-root> --commit-message <message> --client-request-id <key> --idempotency-key <key> --yes --json
204
204
  numa app jenkins-binding confirm <session-no> --binding-id <id> --expected-version <version> --idempotency-key <key> --yes --json
205
+ numa app writer-bootstrap ensure <session-no> --idempotency-key <key> --yes --json
205
206
  numa app observer-scope configure <session-no> --service-binding-id <id> --kustomization-namespace <ns> --kustomization-name <name> --helm-release-namespace <ns> --helm-release-name <name> --workload-namespace <ns> --workload-kind <kind> --workload-name <name> --expected-version <version> --idempotency-key <key> --yes --json
206
207
  numa app first-build decide <session-no> --decision defer --idempotency-key <key> --yes --json
207
208
  numa pipeline inspect <application-code> --json
208
209
  ```
209
210
 
210
- GitOps structural apply 完成后,服务端在原 session/task 内自动执行
211
- `gitops-platform-writer-bootstrap/v2`。CLI 只用上面的 `app inspect` 续读
212
- `GITOPS_V2_WRITER_BOOTSTRAP` 事件,不发送 bootstrap request。事件必须证明 exact 三文件
211
+ GitOps structural apply 完成后,显式 `writer-bootstrap ensure` 让服务端在原 session/task 内执行
212
+ `gitops-platform-writer-bootstrap/v2`。CLI 请求不含 repository/path/branch/YAML/binding/target/secret,
213
+ 并用 `app inspect` 续读 `GITOPS_V2_WRITER_BOOTSTRAP` 事件。事件必须证明 exact 三文件
213
214
  (base release、overlay values、overlay kustomization)的 contract/identity/revision/digest 都与原
214
215
  Application/repository/binding/target 匹配。`PENDING` 只继续读取同一 session;`UNKNOWN` 或任何 drift
215
216
  均 fail closed,不进入 Observer/first-build,不调用 legacy migration,不新建应用/会话/绑定/
216
217
  target,也不读取或修改 Secret。
217
218
 
218
- `UNKNOWN` 必须先只读检查同一 session。普通 inspect/status 与 first-build 未知结果恢复不会触发
219
- bootstrap;只有服务端把原内部步骤标记为可重入失败时,用户才显式调用现有通用 session retry:
219
+ 初始 POST 的 `UNKNOWN` 必须先只读检查同一 session,再只以原 Idempotency-Key 精确重放。普通
220
+ inspect/status 与 first-build 未知结果恢复不会触发 bootstrap;只有已持久 child 本身为 UNKNOWN 时,
221
+ 用户才显式调用现有通用 session retry:
220
222
 
221
223
  ```bash
222
224
  numa app inspect <session-no> --after-sequence <last-sequence> --json
225
+ numa app writer-bootstrap ensure <session-no> --idempotency-key <original-key> --yes --json
223
226
  numa app retry <session-no> --json
224
227
  numa app inspect <session-no> --watch --after-sequence <last-sequence> --json
225
228
  ```
226
229
 
227
- `app retry` 不接收新 run/key、bootstrap/SCM/path/Secret/first-build 参数,服务端只恢复原
230
+ `app retry` 不接收新 run/key、SCM/path/Secret/first-build 参数,服务端只恢复原
228
231
  session/run/key。retry 后仍须读取同一 `GITOPS_V2_WRITER_BOOTSTRAP` 的 exact 成功证据;UNKNOWN/drift
229
232
  继续阻断,不重放 first-build POST、不手工修改 SCM、不创建新身份。
230
233
 
@@ -267,7 +270,7 @@ v2 `platform-build-rollout` 所有写入要求 Idempotency-Key 与 `--yes`,且
267
270
  - standalone `publication plan create` 的 500/504、连接中断或无效 2xx 只触发原 key 有界 GET resolve,POST 只发一次;恢复结果必须是同 repository 的 `STANDALONE` plan。retryable 404 `PUBLICATION_PLAN_NOT_RESOLVED` 只允许稍后继续 GET。
268
271
  - HTTP 2xx 后客户端 schema 解析失败不代表服务端失败。先 list/get 核实资源,禁止直接重放 POST。
269
272
  - legacy migration plan 无 Idempotency-Key/resolve-by-key,结果未知时 fail closed。Rollout plan create 也不按 key resolve;apply 必须用写前 list baseline 与写后 exact application/instance/plan mode/new version 恢复;configure 未知时不重放,只 GET 同 rollout,并要求 exact identity/intent、new version、credential booleans=true、observed shared-library revision、verified source revision、Jenkinsfile/configuration digest 与 `READY/JENKINS_API_VERIFIED/VERIFIED`,否则 result unknown;source revision 不与 approved library revision 混同。旧 readiness 必须用同 rollout 的 exact reference/mode/status/identity/new version 恢复。预存 READY/LEGACY 不是成功证据。
270
- - `WAITING_EXTERNAL` 使用 `resume`;可重入失败使用 `retry`;HEAD 移动使用 `reassess`。按服务端 recovery action 选择,不自行跳步骤。对 v3 writer bootstrap,必须先 inspect session;只有显式 `app retry <same-session>` 可以触发 server-internal same-run/key recovery,普通 status/inspect 和 first-build unknown recovery 都保持纯读。
273
+ - `WAITING_EXTERNAL` 使用 `resume`;可重入失败使用 `retry`;HEAD 移动使用 `reassess`。按服务端 recovery action 选择,不自行跳步骤。对 v3 writer bootstrap,按 recoveryAction 显式执行 `writer-bootstrap ensure`;初始响应未知只重放原 key,已持久 child UNKNOWN 才用 `app retry <same-session>` 恢复 same-run/key,普通 status/inspect 和 first-build unknown recovery 都保持纯读。
271
274
  - 生产 `pipeline build`、stop、retry 需要独立审批 ID 或具体 production reason;本 skill 默认只创建/核验流水线。
272
275
  - 不启动或遗留 `kubectl port-forward`、SSH tunnel 或后台代理来绕过网关;只读恢复仍失败时报告 profile/API origin、request ID 和上述恢复命令,等待平台恢复。
273
276
 
@@ -19,7 +19,7 @@
19
19
  | Jenkins Job plan/run | job plan/provision/status 命令 | `WAITING_EXTERNAL`,不得直接调用 Jenkins |
20
20
  | Application onboarding | v2/v3 capabilities 与 plan | 不创建 Application |
21
21
  | GitOps plan/apply | target/profile/service 命令 | 保留已完成 child,停止部署 |
22
- | v3 writer bootstrap | 原 session status/events 中 exact `GITOPS_V2_WRITER_BOOTSTRAP` + `gitops-platform-writer-bootstrap/v2` 证据;它没有独立 CLI | `PENDING` 继续只读等待;`UNKNOWN` 先 inspect,仅显式通用 `app retry <same-session>` 可恢复原 run/key;drift fail closed |
22
+ | v3 writer bootstrap | `app writer-bootstrap ensure <same-session> --idempotency-key <key>` + 原 session status/events 中 exact `GITOPS_V2_WRITER_BOOTSTRAP` 证据 | 初始 POST 未知只以原 key 精确重放;已持久 child `UNKNOWN` 先 inspect,再用显式通用 `app retry <same-session>` 恢复原 run/key;drift fail closed |
23
23
  | Legacy image writer migration | `gitops service legacy-image-migration plan` 命令目录;不需要独立 server capability action | 保留 binding,不直写 YAML/path/image |
24
24
  | Platform build rollout v2 | `jenkins platform-build-rollout plan/apply/list/get/configure`;configure 必须自述 `JENKINS_API_VERIFIED/VERIFIED`;v2 无 manual readiness | 保持 fail-closed gate,不触发首次 build |
25
25
  | Jenkins GitOps rollout v1 | `jenkins gitops-rollout plan/apply/list/get/readiness`;`MANUAL_OPERATOR_ATTESTED` 不是 live-read | 仅用于旧应用,不隐式升级 v2 |
@@ -98,15 +98,15 @@ Jenkins Job 创建、配置和 `INDEX_ONLY` scan 必须验证不会触发 build
98
98
  ### 并行 v2 writer 与 Jenkins rollout gate
99
99
 
100
100
  新应用 v2 不运行 legacy migration。先在原 onboarding session 内完成 v2 Job provenance replan 和
101
- GitOps structural apply,随后由 onboarding v3 服务端内部自动执行
101
+ GitOps structural apply,随后显式执行 `app writer-bootstrap ensure`,由 onboarding v3 服务端执行
102
102
  `gitops-platform-writer-bootstrap/v2`。该阶段只读写服务自己的 base release、exact overlay values 和
103
103
  overlay kustomization 三个文件;不枚举、不读取也不改写 sibling raw Secret,也不新建
104
- Application、session、binding 或 target。CLI 不提供 bootstrap 命令,只续读原 session 的
104
+ Application、session、binding 或 target。CLI 不接受任意仓库/path/YAML/branch/secret,只续读原 session 的
105
105
  `GITOPS_V2_WRITER_BOOTSTRAP` 事件;`PENDING` 只等待,`UNKNOWN` 或 contract/identity/revision/digest
106
106
  drift 都禁止 Observer/first-build。旧 v1 应用只有在确有 writer pointer 缺失时才使用 legacy migration。
107
- `UNKNOWN` inspect 原 session;只有服务端把原内部步骤标记为可重入失败时,用户才显式执行
108
- `numa app retry <same-session> --json`。该通用恢复只让服务端续作原 run/key,不创建 bootstrap
109
- 命令、请求或身份;status/inspect 与 first-build 未知结果恢复保持纯读。retry 后仍为 UNKNOWN 或存在
107
+ 初始 POST 为 `UNKNOWN` 时先 inspect 原 session,并只以原 Idempotency-Key 精确重放 bootstrap action;
108
+ 只有已持久 child 本身为 UNKNOWN 时,用户才显式执行 `numa app retry <same-session> --json`。该通用恢复
109
+ 只让服务端续作原 run/key,不创建新 child 或身份;status/inspect 与 first-build 未知结果恢复保持纯读。retry 后仍为 UNKNOWN 或存在
110
110
  drift 时继续阻断,不重放 first-build POST,也不手工写 SCM。
111
111
  `code-index` 目标仍是原 target=`prd`、Jenkins instance=`numa`;旧批准提交
112
112
  `230e0f...` 是 v1,不得用于 v2 plan。v2 必须等新的 clean shared-library 40hex 发布后再执行:
@@ -156,7 +156,7 @@ legacy writer 行为不变。
156
156
  - legacy migration plan 没有 Idempotency-Key/resolve-by-key,未知结果必须 fail closed。Rollout plan 也不按 key resolve;apply 只在写前 baseline 之后出现 exact application/instance/plan mode 且新 version 时恢复;configure 未知时不重放,只 GET 同 rollout,并要求 exact identity/intent、new version、credential booleans=true、observed shared-library revision、verified source revision、Jenkinsfile/configuration digest 和 `READY/JENKINS_API_VERIFIED/VERIFIED`,`STALE/DRIFTED/UNAVAILABLE` 或证据不足均 result unknown;旧 readiness 只在同 rollout 出现 exact reference/mode/status/identity 且新 version 时恢复。预存 READY/LEGACY 不构成证据。
157
157
  - 普通 profile HTTPS 网关失败时,Repository/Jenkins run 按原 clientRequestId 查 `status`;standalone publication plan create 的 500/504、连接中断或无效 2xx 只按原 key 有界 GET `publication plan resolve`,校验 `STANDALONE`/repository identity,POST 只发一次,retryable 404 只稍后 GET。普通 session action 先 `app inspect`;publication attach 必须先按原 `sessionNo/clientRequestId` 执行 `app publication resolve`。其 retryable 404 只能稍后重查,禁止自动重放 attach;不要启动或遗留 port-forward/tunnel 旁路。
158
158
  - session action 的自动恢复必须以写前 event cursor 为基线,只接受 cursor 之后与本次 planHash/精确 intent 匹配的新持久事件;既有 `WAITING_EXTERNAL` 或旧 observer/build/binding 字段不是本次写成功的证据。child run resolve 必须至少匹配请求 planNo,并校验响应中可用的 repository/workload identity。
159
- - v3 bootstrap 不是客户端写请求;只能从原 session `GITOPS_V2_WRITER_BOOTSTRAP` 事件读取结果。PENDING 只读等待;UNKNOWN inspect,且仅在服务端声明可重入时通过显式通用 `app retry <same-session>` 恢复原 run/key。普通 status/inspect 和 first-build recovery 都是纯读;不得重放 first-build POST、调用 legacy migration、手工写 SCM 或另建身份。retry 后仍 UNKNOWN 或 drift 时保持 fail closed。
159
+ - v3 bootstrap 是独立受认证 action;CLI 只提交原 session/Idempotency-Key,服务端锁定全部拓扑与固定三文件。PENDING 只读等待;初始 POST 未知只以原 key 精确重放,已持久 child UNKNOWN 才通过显式通用 `app retry <same-session>` 恢复原 run/key。普通 status/inspect 和 first-build recovery 都是纯读;不得重放 first-build POST、调用 legacy migration、手工写 SCM 或另建身份。retry 后仍 UNKNOWN 或 drift 时保持 fail closed。
160
160
  - Jenkins scan 不等于 build;观察到意外 build 时停止父流程并报告。
161
161
  - GitOps target 只有 topology validation 时保持 DRAFT;Jenkins attestation 最多推进 VERIFYING,只有独立 Flux Observer evidence 能推进 ACTIVE。
162
162