kind: llman.sdd.spec
name: "sdd-ison-authoring"
purpose: "TBD - created by archiving change migrate-llmanspec-specs-to-ison-table. Update Purpose after archive."
valid_scope[2]: src/,tests/
requirements[7]{req_id,title,statement}:
  r1,Canonical Table ISON Schema for Main Specs,"当 `llmanspec/config.yaml` 声明 `spec_style: ison` 时，`llmanspec/specs/<capability>/spec.md` MUST embed canonical semantic content using table/object ISON inside one or more fenced ` ```ison ` code blocks. The ISON payload MUST provide these blocks with strictly fixed names and columns: - `object.spec` (exactly 1 row): `kind name purpose` - `table.requirements`: `req_id title statement` - `table.scenarios`: `req_id id given when then` Validation MUST enforce: - `object.spec.kind` equals `llman.sdd.s"
  r2,Canonical Table ISON Schema for Delta Specs,"当 `llmanspec/config.yaml` 声明 `spec_style: ison` 时，`llmanspec/changes/<change-id>/specs/<capability>/spec.md` MUST embed delta semantics using table/object ISON inside one or more fenced ` ```ison ` code blocks. The ISON payload MUST provide these blocks with strictly fixed names and columns: - `object.delta` (exactly 1 row): `kind` (kind = `llman.sdd.delta`) - `table.ops`: `op req_id title statement from to name` - `table.op_scenarios`: `req_id id given when then` Validation MUST enforce: - `obj"
  r3,Multiple ISON Blocks Are Supported and Merged by Canonical Block Name,"当 `llmanspec/config.yaml` 声明 `spec_style: ison` 时，spec and delta files MUST be allowed to split the required canonical blocks across multiple fenced ` ```ison ` code blocks (for example, one ISON block per Markdown section). The runtime MUST: - extract all ` ```ison ` code blocks from the file, - parse each payload (table/object ISON), - merge blocks by block name into a single semantic document, - fail validation when a required canonical block is missing, - fail validation when any canonical b"
  r4,"Token-Friendly Dumps Are the Default and Deterministic","All llman commands that write or rewrite spec payloads (CRUD edits, archive merge outputs, conversions) MUST emit deterministic dumps for the configured style. - In `ison` projects, the default dump MUST remain token-friendly (no column-alignment padding). - In `ison` projects, the CLI MAY provide opt-in pretty alignment for review. - In `toon` and `yaml` projects, the serializer MUST use stable field ordering, stable list ordering, and consistent indentation. Repeated writes without semantic ch"
  r5,CLI Provides Authoring Helpers for Skeletons and Delta CRUD,"The SDD CLI MUST provide first-class authoring helpers that emit the project’s configured style for: - create/update a main spec skeleton for a capability - create/update a delta spec skeleton for a change + capability - add/modify/remove/rename a requirement op in a delta spec - add a scenario to a spec or delta op If the project has no declared `spec_style`, these authoring helpers MUST fail loudly instead of silently choosing a format. Style-specific formatting flags MUST also be enforced str"
  r6,TOON 与 YAML 主 spec 使用统一对象语义,"当 `llmanspec/config.yaml` 声明 `spec_style: toon` 或 `spec_style: yaml` 时，`llmanspec/specs/<capability>/spec.md` MUST 在与风格匹配的 fenced block 中承载一个 canonical 文档对象。 风格与 fence 的对应关系 MUST 为： - `toon` → ` ```toon ` - `yaml` → ` ```yaml ` 该 canonical 文档 MUST 表达以下主 spec 语义字段： - `kind` - `name` - `purpose` - `requirements` - `scenarios` 其中： - `kind` MUST 等于 `llman.sdd.spec` - `name` 在 strict 模式下 MUST 等于 `<capability>` - `requirements` 中的每一项 MUST 包含 `req_id`、`title`、`statement` - `scenarios` 中的每一项 MUST 包含 `re"
  r7,TOON 与 YAML delta spec 使用统一 ops 语义,"当 `llmanspec/config.yaml` 声明 `spec_style: toon` 或 `spec_style: yaml` 时，`llmanspec/changes/<change-id>/specs/<capability>/spec.md` MUST 在与风格匹配的 fenced block 中承载一个 canonical delta 文档对象。 该对象 MUST 表达以下字段： - `kind` - `ops` - `op_scenarios` 其中： - `kind` MUST 等于 `llman.sdd.delta` - `ops` 中的每一项 MUST 使用字段 `op`、`req_id`、`title`、`statement`、`from`、`to`、`name` - `op_scenarios` 中的每一项 MUST 使用字段 `req_id`、`id`、`given`、`when`、`then` - `op` MUST 是 `add_requirement`、`modify_requirement`、`remove_requirement`、`renam"
scenarios[9]{req_id,id,given,when,then}:
  r1,"canonical-blocks-can-be-parsed-without-depending-on-markdown","",a main spec in an `ison` project contains Markdown headings/prose plus the required ` ```ison ` blocks,the runtime extracts and parses the ISON blocks as the canonical semantic source
  r2,"delta-ops-and-scenarios-are-representable-as-deterministic-t","",an `ison` project contains an add/modify/remove/rename requirement delta spec,the delta operations are represented as rows in `table.ops`
  r3,"canonical-blocks-can-be-split-across-sections","","an `ison` spec file places `object.spec`, `table.requirements`, and `table.scenarios` in separate ` ```ison ` blocks under different Markdown headings",the runtime merges them and produces the same semantic result as a single combined ISON block
  r4,"repeated-yaml-writes-do-not-churn-formatting","","a maintainer runs the same YAML-targeted write command twice without source changes","the emitted ` ```yaml ` payload text is byte-identical across runs"
  r5,"maintainer-can-author-a-yaml-delta-spec-without-manual-forma","",a maintainer in a `yaml` project uses CLI authoring helpers to create a delta spec skeleton and add an `add_requirement` op plus a scenario,the resulting file is written in ` ```yaml ` format
  r6,"yaml-主-spec-满足统一对象语义","","项目声明 `spec_style: yaml`",运行时可将其解析为主 spec 语义对象
  r6,"toon-主-spec-缺少必需字段会失败","","项目声明 `spec_style: toon`","`llman sdd validate sample --type spec --strict` 返回非零"
  r7,"yaml-delta-spec-可表达-add-modify-remove-rename","","项目声明 `spec_style: yaml`",运行时可以从 `ops` 与 `op_scenarios` 中读取 add/modify/remove/rename 语义
  r7,"toon-delta-spec-为-rename-op-携带-scenario-会失败","","项目声明 `spec_style: toon`","`llman sdd validate <change-id> --type change --strict` 返回非零"
