{
  "schemaVersion": "vext.spec-rules/v1",
  "rollout": "final",
  "verification": {
    "scope": "stage"
  },
  "documentationRevision": "46f30e2ef35a381379f02231245688a87955e47c560267dda7d1828974efda22",
  "frameworkVersion": "2.0.0",
  "rules": [
    {
      "id": "VEXT-ARCH-001",
      "level": "must",
      "title": "Automatic entry points must follow their actual loader contracts",
      "anchor": "vext-arch-001",
      "contentHash": "c2378e0dc3b217312868f648da936d5575562fe42b46456f02dc717d17ae340d",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-001"
    },
    {
      "id": "VEXT-ARCH-001",
      "level": "must",
      "title": "自动加载入口必须符合实际 Loader 合同",
      "anchor": "vext-arch-001",
      "contentHash": "becb85ba493e12fb690deb2ffd498d63f7678a2091ac77f3a52053e0f6d0d21c",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-001"
    },
    {
      "id": "VEXT-ARCH-002",
      "level": "should",
      "title": "Organize ordinary modules around consumers and import them explicitly",
      "anchor": "vext-arch-002",
      "contentHash": "01aa4d0ec77a44ae5b6f55c8917510983f34f97584a5b9130fb12ed1e0282f89",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-002"
    },
    {
      "id": "VEXT-ARCH-002",
      "level": "should",
      "title": "普通模块按消费者组织并显式导入",
      "anchor": "vext-arch-002",
      "contentHash": "51dc1f365e2bc49c7b1bf98bdd17e5412eca5e60d372043ec1cf247d1abf7458",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-002"
    },
    {
      "id": "VEXT-ARCH-003",
      "level": "should",
      "title": "Routes handle transport contracts; services organize reusable business logic",
      "anchor": "vext-arch-003",
      "contentHash": "5dd580dbce7ec56da79a38fd160953f86cb899d3ec1523bee72cde6216504c18",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-003"
    },
    {
      "id": "VEXT-ARCH-003",
      "level": "should",
      "title": "路由处理传输合同，服务组织可复用业务",
      "anchor": "vext-arch-003",
      "contentHash": "337cb3a706760104c73464cbd777702dfe772178eb2b969a037104260337fc67",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-003"
    },
    {
      "id": "VEXT-ARCH-004",
      "level": "must",
      "title": "Initialization code must respect when resources and services become available",
      "anchor": "vext-arch-004",
      "contentHash": "ac504324d6ddc8def7310c996841d1d9eb81d9d2af2b22b22808b8b08e3f2e14",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-004"
    },
    {
      "id": "VEXT-ARCH-004",
      "level": "must",
      "title": "初始化代码必须遵守资源与服务的可用时机",
      "anchor": "vext-arch-004",
      "contentHash": "5e544c26124f6a0f20e4b8173b4584cf73f385076451e9b13c12dcec421659ab",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-004"
    },
    {
      "id": "VEXT-ARCH-005",
      "level": "should",
      "title": "Resource creators should manage and release their resources",
      "anchor": "vext-arch-005",
      "contentHash": "528d258d4623829d69f9abc7912c25d43ed70a785fdf5444d893a44cdf8f78b8",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-005"
    },
    {
      "id": "VEXT-ARCH-005",
      "level": "should",
      "title": "资源由创建者管理并在生命周期中释放",
      "anchor": "vext-arch-005",
      "contentHash": "224fc277e46896d6797053c7298b883d5948d02bc27fbd9438f905ecce96cfb2",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-005"
    },
    {
      "id": "VEXT-ARCH-006",
      "level": "must",
      "title": "Job execution and page rendering use their own explicit entry points",
      "anchor": "vext-arch-006",
      "contentHash": "a17410e476f064d208c7007ca5663d738b2f39b347bbb241ee6be841b08cb3c4",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-006"
    },
    {
      "id": "VEXT-ARCH-006",
      "level": "must",
      "title": "任务运行与页面渲染使用各自的显式入口",
      "anchor": "vext-arch-006",
      "contentHash": "82a91924961fdd7f3bc8dc28e82665ca4dc3e225b30ce7e714efa820a22d1b2f",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-006"
    },
    {
      "id": "VEXT-ARCH-007",
      "level": "should",
      "title": "Shared modules must respect browser and server dependency boundaries",
      "anchor": "vext-arch-007",
      "contentHash": "719277982486273e0b75bdcd7c4d821fe26bcd945c2066bdc8c4b1426bef20e4",
      "docId": "specification.architecture",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/architecture#vext-arch-007"
    },
    {
      "id": "VEXT-ARCH-007",
      "level": "should",
      "title": "共享模块保持浏览器与服务端依赖边界",
      "anchor": "vext-arch-007",
      "contentHash": "4de25a9de25debe371e204f1a94f32462021925558851425ff3ea5a1467a4906",
      "docId": "specification.architecture",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/architecture#vext-arch-007"
    },
    {
      "id": "VEXT-ARCH-008",
      "level": "must",
      "title": "Routes Explicitly Own URLs and Server Data",
      "anchor": "vext-arch-008",
      "contentHash": "ff91b83005da3d88f67ec0258096d7bfb817f33a9b405c7ba40609066590b475",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap#vext-arch-008"
    },
    {
      "id": "VEXT-ARCH-008",
      "level": "must",
      "title": "URL与服务端数据由路由显式拥有",
      "anchor": "vext-arch-008",
      "contentHash": "8783c4e148ac2e7528194b147081be49ab22e57540fd4d844193a4064fa3e837",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap#vext-arch-008"
    },
    {
      "id": "VEXT-ARCH-009",
      "level": "must-not",
      "title": "Browser Dependencies Must Not Include Server-Only Modules",
      "anchor": "vext-arch-009",
      "contentHash": "f1c08792f5af1cb3c6eba3d356e7b82b0711e2f27a606038f0200e7708d64617",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap#vext-arch-009"
    },
    {
      "id": "VEXT-ARCH-009",
      "level": "must-not",
      "title": "浏览器依赖不得包含服务端专属模块",
      "anchor": "vext-arch-009",
      "contentHash": "29e00135e0a6c194b8fe24630bb6df0a31af6a04d3777a475dd70b3bd4572cb4",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap#vext-arch-009"
    },
    {
      "id": "VEXT-ARCH-010",
      "level": "must",
      "title": "Verify Delivery Against the Actual Render and Deployment Mode",
      "anchor": "vext-arch-010",
      "contentHash": "dfb27a6d90eef462c19f7c882ae23a631102006a404d6840ef9493ed9fd30d70",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap#vext-arch-010"
    },
    {
      "id": "VEXT-ARCH-010",
      "level": "must",
      "title": "按实际渲染与部署模式验证交付",
      "anchor": "vext-arch-010",
      "contentHash": "fc72e9f19764ffe93b982c820f1b728a7c619dbbc2d79b677589beec961af3df",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap#vext-arch-010"
    },
    {
      "id": "VEXT-ARCH-011",
      "level": "must-not",
      "title": "Do Not Present Planned Directions as Current Usage Contracts",
      "anchor": "vext-arch-011",
      "contentHash": "120a371390fa017475892dc720f2026a27eb3f25ae464ebdd2fd58437d88536f",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/frontend/boundaries-and-roadmap#vext-arch-011"
    },
    {
      "id": "VEXT-ARCH-011",
      "level": "must-not",
      "title": "不得将规划方向写成当前使用合同",
      "anchor": "vext-arch-011",
      "contentHash": "3ae077f9d6dce83eee7d07296a0a697dea323326179bc1c3c9cbcd3c2c0955bd",
      "docId": "frontend.boundaries-and-roadmap",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/frontend/boundaries-and-roadmap#vext-arch-011"
    },
    {
      "id": "VEXT-CONTRACT-001",
      "level": "must-not",
      "title": "Do not treat Schema validation as authorization, business invariants, or database constraints",
      "anchor": "vext-contract-001",
      "contentHash": "450c5e66112a940b80cc295104bd4086b66943ed037451324e2d42370e38660d",
      "docId": "specification.validation-and-contracts",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts#vext-contract-001"
    },
    {
      "id": "VEXT-CONTRACT-001",
      "level": "must-not",
      "title": "不得把 Schema 校验当作授权、业务不变量或数据库约束",
      "anchor": "vext-contract-001",
      "contentHash": "c2a42aad00699b383f966e54b3565435022440e3dca5cf40b8238c586eecf4cc",
      "docId": "specification.validation-and-contracts",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts#vext-contract-001"
    },
    {
      "id": "VEXT-CONTRACT-002",
      "level": "must",
      "title": "Declare runtime validation at supported input locations",
      "anchor": "vext-contract-002",
      "contentHash": "aa00aff06460bfd51ded01666305f4b6bd7202f300a4601daeb41d2d474ee795",
      "docId": "specification.validation-and-contracts",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts#vext-contract-002"
    },
    {
      "id": "VEXT-CONTRACT-002",
      "level": "must",
      "title": "在支持的位置声明运行时校验",
      "anchor": "vext-contract-002",
      "contentHash": "6aa60fd4447a7a75ae0797e2b08ed009bcfaf9d4863f9a35ea163641239404e8",
      "docId": "specification.validation-and-contracts",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts#vext-contract-002"
    },
    {
      "id": "VEXT-CONTRACT-003",
      "level": "should",
      "title": "Business handlers should use validated data and check conversion semantics",
      "anchor": "vext-contract-003",
      "contentHash": "715f264e43a5e8c81cf036ad73459b8da1b9ca9cd0fdc9e1380b3180aba2b487",
      "docId": "specification.validation-and-contracts",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts#vext-contract-003"
    },
    {
      "id": "VEXT-CONTRACT-003",
      "level": "should",
      "title": "业务处理使用校验后的数据并核实转换语义",
      "anchor": "vext-contract-003",
      "contentHash": "3560ae2b84de8999e80df506ee811b1c432080963abba4b208b3b914e1d99b22",
      "docId": "specification.validation-and-contracts",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts#vext-contract-003"
    },
    {
      "id": "VEXT-CONTRACT-004",
      "level": "should",
      "title": "Express types and documentation from the same runtime contract",
      "anchor": "vext-contract-004",
      "contentHash": "54481196f659dbde507568882566d9712a6b5f60c986609be444e38fbf49a77a",
      "docId": "specification.validation-and-contracts",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts#vext-contract-004"
    },
    {
      "id": "VEXT-CONTRACT-004",
      "level": "should",
      "title": "类型和文档从同一份运行时合同表达",
      "anchor": "vext-contract-004",
      "contentHash": "2fe22f9150a8a0acbe8bf830956699bdac2d3908b3ad83949f17191279a99c26",
      "docId": "specification.validation-and-contracts",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts#vext-contract-004"
    },
    {
      "id": "VEXT-CONTRACT-005",
      "level": "must",
      "title": "A custom validation engine implements the synchronous compilation and result contract",
      "anchor": "vext-contract-005",
      "contentHash": "2c6e24c3a9108b88ff9bd7477265581c720e7cc2c3216b6847a34292e6e7c66d",
      "docId": "specification.validation-and-contracts",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts#vext-contract-005"
    },
    {
      "id": "VEXT-CONTRACT-005",
      "level": "must",
      "title": "自定义校验引擎实现同步编译与结果合同",
      "anchor": "vext-contract-005",
      "contentHash": "2505fab14483f3ebe97f910fe93677a859c80cb8167bc737e3b8880fa198701e",
      "docId": "specification.validation-and-contracts",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts#vext-contract-005"
    },
    {
      "id": "VEXT-CONTRACT-006",
      "level": "must",
      "title": "Declare runtime JSON response Schemas in responses",
      "anchor": "vext-contract-006",
      "contentHash": "beaeccc6b2ad87fee2c4826403abacd21468bc633b9f921b31219a02263d5e04",
      "docId": "specification.validation-and-contracts",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/validation-and-contracts#vext-contract-006"
    },
    {
      "id": "VEXT-CONTRACT-006",
      "level": "must",
      "title": "JSON 运行时响应 Schema 使用 responses 声明",
      "anchor": "vext-contract-006",
      "contentHash": "5ac7065be429e8c3a806af3f9b0287e377cb23115b9dd33fab368375ef5727f2",
      "docId": "specification.validation-and-contracts",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/validation-and-contracts#vext-contract-006"
    },
    {
      "id": "VEXT-DATA-001",
      "level": "must",
      "title": "Use app.db only after successful database initialization",
      "anchor": "vext-data-001",
      "contentHash": "979cc1b5765caa1f22c02321573d3d3167e71a86f9cc72e846e7ccbf17a5c324",
      "docId": "specification.data-access",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access#vext-data-001"
    },
    {
      "id": "VEXT-DATA-001",
      "level": "must",
      "title": "仅在数据库初始化成功后使用 app.db",
      "anchor": "vext-data-001",
      "contentHash": "2d8ed5d4a97ea30b4281094276e892a1aa01268202176bb3b769edcea70f42dd",
      "docId": "specification.data-access",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access#vext-data-001"
    },
    {
      "id": "VEXT-DATA-002",
      "level": "must",
      "title": "Distinguish real collection names from model registration keys",
      "anchor": "vext-data-002",
      "contentHash": "6034f1db97c344a92251459c7422a51aad21384fd3cb93ae2c47e6b7e39c4159",
      "docId": "specification.data-access",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access#vext-data-002"
    },
    {
      "id": "VEXT-DATA-002",
      "level": "must",
      "title": "区分真实集合名与模型注册键",
      "anchor": "vext-data-002",
      "contentHash": "9a7906a3c208924f41650e8d7cd9f4fc29769ae0379a130a37a78ef3741d3a54",
      "docId": "specification.data-access",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access#vext-data-002"
    },
    {
      "id": "VEXT-DATA-003",
      "level": "should",
      "title": "Choose a data access entry point based on required model behavior",
      "anchor": "vext-data-003",
      "contentHash": "f0bab4a53704c6922bd87b83dbd1da5558719a17aab9546050f33efa5288b6cf",
      "docId": "specification.data-access",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access#vext-data-003"
    },
    {
      "id": "VEXT-DATA-003",
      "level": "should",
      "title": "按所需模型行为选择数据访问入口",
      "anchor": "vext-data-003",
      "contentHash": "b9984c0904d47d8347f9c398b4e3e08d338cd1ad37e6bbf0fb2a83f2309d80eb",
      "docId": "specification.data-access",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access#vext-data-003"
    },
    {
      "id": "VEXT-DATA-004",
      "level": "must",
      "title": "Verify connection pools, databases, and model scope explicitly",
      "anchor": "vext-data-004",
      "contentHash": "b8824f4be3566a65b255a188ddbdb84a4064ab61400c79e14058a9e7c665473d",
      "docId": "specification.data-access",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access#vext-data-004"
    },
    {
      "id": "VEXT-DATA-004",
      "level": "must",
      "title": "显式核实连接池、数据库与模型作用域",
      "anchor": "vext-data-004",
      "contentHash": "bf24552712f4391acbb2d26daace6909208c8a85fec2aec6a0bdec69c097dd92",
      "docId": "specification.data-access",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access#vext-data-004"
    },
    {
      "id": "VEXT-DATA-005",
      "level": "should",
      "title": "Establish transactions and concurrency constraints at business boundaries",
      "anchor": "vext-data-005",
      "contentHash": "54c161e256ae6f8e11e2116b0a520e2097b339f44be2877890031757140eda73",
      "docId": "specification.data-access",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access#vext-data-005"
    },
    {
      "id": "VEXT-DATA-005",
      "level": "should",
      "title": "在业务边界显式建立事务与并发约束",
      "anchor": "vext-data-005",
      "contentHash": "da3013748a2ae61ca4a10418b17560e416eeb88a8a650b8257202fac45bfdc64",
      "docId": "specification.data-access",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access#vext-data-005"
    },
    {
      "id": "VEXT-DATA-006",
      "level": "must",
      "title": "Distinguish database query caches from HTTP response caches",
      "anchor": "vext-data-006",
      "contentHash": "73466899c83d452cc616f94ef52f2f937f810a40ddc28c3228385fafabe8d651",
      "docId": "specification.data-access",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/data-access#vext-data-006"
    },
    {
      "id": "VEXT-DATA-006",
      "level": "must",
      "title": "区分数据库查询缓存与 HTTP 响应缓存",
      "anchor": "vext-data-006",
      "contentHash": "3f9f0d710a4a7cc282ee16189876968e3cbd105380ca74912da8ca5ec628d093",
      "docId": "specification.data-access",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/data-access#vext-data-006"
    },
    {
      "id": "VEXT-HTTP-001",
      "level": "must",
      "title": "A route module must provide a supported default export",
      "anchor": "vext-http-001",
      "contentHash": "6395a2ed65c59cef77a5af991225c880903e71b3c5ca5315e6152cd49ae4a49b",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-001"
    },
    {
      "id": "VEXT-HTTP-001",
      "level": "must",
      "title": "路由模块必须提供受支持的默认导出",
      "anchor": "vext-http-001",
      "contentHash": "cce592aa6b0a5d6415e6d38119a1c6ebb58cbe1360380f09d8dc348e2128aae9",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-001"
    },
    {
      "id": "VEXT-HTTP-002",
      "level": "must",
      "title": "A route factory must collect routes synchronously during loading",
      "anchor": "vext-http-002",
      "contentHash": "2603c91c13ef2a25b6d1837bb2c9393820d9efe4b27e221a3c8136049b72ca32",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-002"
    },
    {
      "id": "VEXT-HTTP-002",
      "level": "must",
      "title": "路由工厂必须在加载时同步收集路由",
      "anchor": "vext-http-002",
      "contentHash": "5aca2772a9b98d8e0f2c61bd7a3624ffeb214e27736372dbe3031f0763bc1294",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-002"
    },
    {
      "id": "VEXT-HTTP-003",
      "level": "should",
      "title": "Handlers should use validated and normalized data",
      "anchor": "vext-http-003",
      "contentHash": "0cdfc7f7080602d3b4391174f460ada8113742fd9a165671b94b0c12b573b286",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-003"
    },
    {
      "id": "VEXT-HTTP-003",
      "level": "should",
      "title": "处理器应使用已校验并归一化的数据",
      "anchor": "vext-http-003",
      "contentHash": "335e3c334ea7033867ce07708f5f105e696fc1105c4f3b91c490b9765d7747c9",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-003"
    },
    {
      "id": "VEXT-HTTP-004",
      "level": "must",
      "title": "Route middleware must use declared names",
      "anchor": "vext-http-004",
      "contentHash": "0d6c0f1472fda73a4103ec024a7a8776407c00c2ae0aa0a947a96ca7378d376a",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-004"
    },
    {
      "id": "VEXT-HTTP-004",
      "level": "must",
      "title": "路由级中间件必须使用已声明名称",
      "anchor": "vext-http-004",
      "contentHash": "e32b24f6c06107fb5993743713468c5ed20e78c584a122762ff338f7e15e7084",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-004"
    },
    {
      "id": "VEXT-HTTP-005",
      "level": "must-not",
      "title": "Business code must not bypass the route-definition lifecycle to register HTTP methods",
      "anchor": "vext-http-005",
      "contentHash": "a65853d97ba2a92d3a5881e02b8ac67057f08e184dff49f5d7e707e180000243",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-005"
    },
    {
      "id": "VEXT-HTTP-005",
      "level": "must-not",
      "title": "业务代码不得绕过路由定义生命周期直接注册 HTTP 方法",
      "anchor": "vext-http-005",
      "contentHash": "e45883a43d171549a1f445831ce98c4d4c8a635c8a2afccc37f7adfeaa90bee4",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-005"
    },
    {
      "id": "VEXT-HTTP-006",
      "level": "should",
      "title": "Implement input validation separately from authorization and business constraints",
      "anchor": "vext-http-006",
      "contentHash": "38be6869224f3de1c9531513c83f0784cb737b1bc9e63c28c31622760f6dbc1d",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-006"
    },
    {
      "id": "VEXT-HTTP-006",
      "level": "should",
      "title": "输入校验与授权、业务约束应分别实现",
      "anchor": "vext-http-006",
      "contentHash": "89e2dc719bdc6d0a3d263d0989313dbfccd695878a95f40e3f22950a1182804a",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-006"
    },
    {
      "id": "VEXT-HTTP-007",
      "level": "must",
      "title": "A route's normalized method and full path must be unique",
      "anchor": "vext-http-007",
      "contentHash": "b5a391bc4096a714cb3e829cf9ac17bdbfcf5ef4683422e341a7e7e777124950",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-007"
    },
    {
      "id": "VEXT-HTTP-007",
      "level": "must",
      "title": "路由的规范化方法与完整路径不能重复",
      "anchor": "vext-http-007",
      "contentHash": "bb13bfc95517ccf9fa4e2c2987489048204c31da9c93ca714a2070c5d952451a",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-007"
    },
    {
      "id": "VEXT-HTTP-008",
      "level": "should",
      "title": "Declare runtime JSON response schemas separately from documentation details",
      "anchor": "vext-http-008",
      "contentHash": "69bc0ae88adee118bb2cb2e2e41e225d7e86ce93b944bb89e0d966343c692537",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-008"
    },
    {
      "id": "VEXT-HTTP-008",
      "level": "should",
      "title": "JSON 响应应把运行时 Schema 与文档说明分别声明",
      "anchor": "vext-http-008",
      "contentHash": "e1c48eddf4b967068e551b505291c3b159a2e9bd55fc85e22d05c6228005a63d",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-008"
    },
    {
      "id": "VEXT-HTTP-009",
      "level": "must-not",
      "title": "OpenAPI metadata must not be used as runtime access protection",
      "anchor": "vext-http-009",
      "contentHash": "2f23bd4285b7fda530d5ff3fa2efe098fbea6e0dc67665d589bc636c68fb6bc6",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-009"
    },
    {
      "id": "VEXT-HTTP-009",
      "level": "must-not",
      "title": "OpenAPI 元数据不得作为运行时访问保护",
      "anchor": "vext-http-009",
      "contentHash": "6c7d8861f785a20d9400982b5d5c0d19596ae472a04c26dfd832285b92deb5e8",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-009"
    },
    {
      "id": "VEXT-HTTP-010",
      "level": "must",
      "title": "Route overrides must respect each setting's enablement conditions and units",
      "anchor": "vext-http-010",
      "contentHash": "f311231e1a3c94242d48a3493208d1acf20131bc26007e72446c6e135cca6705",
      "docId": "specification.http-and-routing",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/http-and-routing#vext-http-010"
    },
    {
      "id": "VEXT-HTTP-010",
      "level": "must",
      "title": "路由覆盖必须遵守各配置项的启用条件与单位",
      "anchor": "vext-http-010",
      "contentHash": "eb024b6ea3facd5716289bf517085490cb43d11ab6ad12652a84fc28bf0fb8b5",
      "docId": "specification.http-and-routing",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/http-and-routing#vext-http-010"
    },
    {
      "id": "VEXT-JOB-001",
      "level": "must",
      "title": "Application startup",
      "anchor": "vext-job-001",
      "contentHash": "a2ff9d46f70f01b89d5e5458618e17fba6e4c319d5ede81e1d45f7e7b14e4b6a",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-001"
    },
    {
      "id": "VEXT-JOB-001",
      "level": "must",
      "title": "应用启动集成",
      "anchor": "vext-job-001",
      "contentHash": "ae864c22a173ce04164be767c48bc0c3d0f370a08553e12a971fe2dc9c5aa750",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-001"
    },
    {
      "id": "VEXT-JOB-002",
      "level": "must",
      "title": "Schedule definitions",
      "anchor": "vext-job-002",
      "contentHash": "00a66338bfd247277e7911cef0bf7866797dc7e0bc9a80e7dde402362b3c584e",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-002"
    },
    {
      "id": "VEXT-JOB-002",
      "level": "must",
      "title": "调度定义",
      "anchor": "vext-job-002",
      "contentHash": "593227f89368dea76ac8cb32f8c3c5e1b8820d1cdf5de287659c84fbfed001a6",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-002"
    },
    {
      "id": "VEXT-JOB-003",
      "level": "must",
      "title": "Execution and overlap",
      "anchor": "vext-job-003",
      "contentHash": "0a35bdcd2ae58923e4e7259499f32a464f4d36f9497675aa51b33d4175a67068",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-003"
    },
    {
      "id": "VEXT-JOB-003",
      "level": "must",
      "title": "执行与重叠",
      "anchor": "vext-job-003",
      "contentHash": "069685bfa5d872c00b18f24f43e2265a943e75d033c744bf41cf6f256b812e5c",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-003"
    },
    {
      "id": "VEXT-JOB-004",
      "level": "must",
      "title": "Replica configuration",
      "anchor": "vext-job-004",
      "contentHash": "76eaf03c7073ee6e8ca7fdbcd6471e5cfc69a8e3e64d8dd2a6303800447b4490",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-004"
    },
    {
      "id": "VEXT-JOB-004",
      "level": "must",
      "title": "多副本配置",
      "anchor": "vext-job-004",
      "contentHash": "e1290b10f3e1ff428a022accf12e4337f62074ef563268f1ed23e73d335433af",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-004"
    },
    {
      "id": "VEXT-JOB-005",
      "level": "must",
      "title": "Trigger deduplication",
      "anchor": "vext-job-005",
      "contentHash": "4ec645c9196ef04a6519eb094f0860fc30022c58c60bcc4aac46254806a7a223",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-005"
    },
    {
      "id": "VEXT-JOB-005",
      "level": "must",
      "title": "触发去重",
      "anchor": "vext-job-005",
      "contentHash": "01163f441591e2363fe14ec9dbb4b1a8ecc6186459eaa2b77f323960c9bff542",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-005"
    },
    {
      "id": "VEXT-JOB-006",
      "level": "must",
      "title": "Running leases",
      "anchor": "vext-job-006",
      "contentHash": "5f430d5ff155c54b236b57ee50968e8cf09bdbcf986c8aba304d0e82952f0a02",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-006"
    },
    {
      "id": "VEXT-JOB-006",
      "level": "must",
      "title": "运行租约",
      "anchor": "vext-job-006",
      "contentHash": "d8c541cbbee17b57be2617c159490c0ba7473f07a1f8e60193a0049efb12364d",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-006"
    },
    {
      "id": "VEXT-JOB-007",
      "level": "must",
      "title": "Redis failures",
      "anchor": "vext-job-007",
      "contentHash": "5d390fa7269893d10592914c0d32594ed1611390ad64455acad2bb9eac70707e",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-007"
    },
    {
      "id": "VEXT-JOB-007",
      "level": "must",
      "title": "Redis 故障",
      "anchor": "vext-job-007",
      "contentHash": "4328b59d7a1b9dae61408fad223ab80d555963223894078f9053c4ee6146c1d1",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-007"
    },
    {
      "id": "VEXT-JOB-008",
      "level": "must",
      "title": "Feature scope",
      "anchor": "vext-job-008",
      "contentHash": "0aef24e46803666c6bbe3b8ed5d1dce4bac9c32fb201bdc9765e275b784159de",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-008"
    },
    {
      "id": "VEXT-JOB-008",
      "level": "must",
      "title": "功能范围",
      "anchor": "vext-job-008",
      "contentHash": "9a3e9430843761290fe431212b67d022c17dfa3dfafe8268ac732a86fa7f5ca5",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-008"
    },
    {
      "id": "VEXT-JOB-009",
      "level": "must",
      "title": "Shutdown and side effects",
      "anchor": "vext-job-009",
      "contentHash": "e1c996d6a0416e06c4dfb684a08140ce61848e2b0acd4fb4c9de3994751daf06",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-009"
    },
    {
      "id": "VEXT-JOB-009",
      "level": "must",
      "title": "关闭与副作用",
      "anchor": "vext-job-009",
      "contentHash": "7f874f0b745a93b89df65d783acb76c64236f57032e349a3df6aa82894154ba1",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-009"
    },
    {
      "id": "VEXT-JOB-010",
      "level": "must",
      "title": "Testing and development",
      "anchor": "vext-job-010",
      "contentHash": "800c1894a0a96eeddbc0704fe4b516c840a4bb1c231342e7d961448bc27603f8",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-010"
    },
    {
      "id": "VEXT-JOB-010",
      "level": "must",
      "title": "测试与开发",
      "anchor": "vext-job-010",
      "contentHash": "73b3933368121e8854c91a726ac79fdb3384ca67fb0ccaadb4f90f77dde1d9ab",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-010"
    },
    {
      "id": "VEXT-JOB-011",
      "level": "must",
      "title": "Discovery and documentation selection",
      "anchor": "vext-job-011",
      "contentHash": "33785b0e0496cdef28f238c84da0ab68ed1957bf400163daefb1a36952eecb0a",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-011"
    },
    {
      "id": "VEXT-JOB-011",
      "level": "must",
      "title": "发现与文档选取",
      "anchor": "vext-job-011",
      "contentHash": "d9f899cf27999676d2cefe5695cb138c733c9e2aef4d6bd3ffd7ffa0f6dfe492",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-011"
    },
    {
      "id": "VEXT-JOB-012",
      "level": "must",
      "title": "Static evidence and project state",
      "anchor": "vext-job-012",
      "contentHash": "d8caa85dff8262c5f0630dc103b65c850c48f2496b478d9472e239ab9413d4e1",
      "docId": "specification.jobs",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/jobs#vext-job-012"
    },
    {
      "id": "VEXT-JOB-012",
      "level": "must",
      "title": "静态证据与项目状态",
      "anchor": "vext-job-012",
      "contentHash": "68035b4592e6fd67093c7310e9d4b49aef79ce2ee6cfb8b4c8a476fe90c227a4",
      "docId": "specification.jobs",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/jobs#vext-job-012"
    },
    {
      "id": "VEXT-OPS-001",
      "level": "should",
      "title": "Verify types, behavior, and deployable artifacts separately",
      "anchor": "vext-ops-001",
      "contentHash": "303cb7f7be338cc55a21731bc3cc6557b6c49fd85304e7f498649233b5eeba6e",
      "docId": "specification.operations",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/operations#vext-ops-001"
    },
    {
      "id": "VEXT-OPS-001",
      "level": "should",
      "title": "分别验证类型、行为和可部署产物",
      "anchor": "vext-ops-001",
      "contentHash": "5e76283f94903b4b6d1cf8497b276c27bb27580894a17b4ba370eb3e5a9eb9bb",
      "docId": "specification.operations",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations#vext-ops-001"
    },
    {
      "id": "VEXT-OPS-002",
      "level": "must",
      "title": "Distinguish runtime mode, configuration profile, and build-time replacement",
      "anchor": "vext-ops-002",
      "contentHash": "29d23c32c87aba5d9e02a8b95f10c589e7791b3d93b56f0594232cef634b9e67",
      "docId": "specification.operations",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/operations#vext-ops-002"
    },
    {
      "id": "VEXT-OPS-002",
      "level": "must",
      "title": "区分运行模式、配置 profile 与构建时替换",
      "anchor": "vext-ops-002",
      "contentHash": "959adcd7d0fa95a07d8a73e7ac35b8a3e51f51abd7313b66d1cbddc202a96427",
      "docId": "specification.operations",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations#vext-ops-002"
    },
    {
      "id": "VEXT-OPS-003",
      "level": "must",
      "title": "Start from valid, matching build output",
      "anchor": "vext-ops-003",
      "contentHash": "a3da0c0afc9492131a10b3d88c3d89f1938faf69a99b7e07d2cc7a000da6b2f4",
      "docId": "specification.operations",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/operations#vext-ops-003"
    },
    {
      "id": "VEXT-OPS-003",
      "level": "must",
      "title": "从有效且匹配的构建输出启动",
      "anchor": "vext-ops-003",
      "contentHash": "170cd7a61f345020b8c398fcc6b9b587161fc3df5b76f54fb7d3ff724f8d80c6",
      "docId": "specification.operations",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations#vext-ops-003"
    },
    {
      "id": "VEXT-OPS-004",
      "level": "must",
      "title": "Deliver complete runtime artifacts for enabled features",
      "anchor": "vext-ops-004",
      "contentHash": "86ffc4fb183528c27f5efd8f2e8960494bee89b196b7c6017fd7f908c651be8a",
      "docId": "specification.operations",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/operations#vext-ops-004"
    },
    {
      "id": "VEXT-OPS-004",
      "level": "must",
      "title": "交付启用功能需要的完整运行产物",
      "anchor": "vext-ops-004",
      "contentHash": "76cdeea76a89d39fda82aeb2d61d49a3055b2a3f81d9fb77bd4e74a3fcba1f69",
      "docId": "specification.operations",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations#vext-ops-004"
    },
    {
      "id": "VEXT-OPS-005",
      "level": "should",
      "title": "Design multi-worker deployment around state ownership",
      "anchor": "vext-ops-005",
      "contentHash": "788115333da9990e3b484d27d39d14e326022dcc5350c87b344b4f0b98b0fab9",
      "docId": "specification.operations",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/operations#vext-ops-005"
    },
    {
      "id": "VEXT-OPS-005",
      "level": "should",
      "title": "根据状态归属设计多 worker 部署",
      "anchor": "vext-ops-005",
      "contentHash": "51ec334bd51ef49f89df1434aaf3c8c0aeb85b20700550554c62b7f5ab004b2e",
      "docId": "specification.operations",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations#vext-ops-005"
    },
    {
      "id": "VEXT-OPS-006",
      "level": "should",
      "title": "Verify readiness, health, and bounded shutdown",
      "anchor": "vext-ops-006",
      "contentHash": "4fa85d93702c34c17ae879cbf0f3198b93191d6de37fa65bbf8c81d3821ffa8d",
      "docId": "specification.operations",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/operations#vext-ops-006"
    },
    {
      "id": "VEXT-OPS-006",
      "level": "should",
      "title": "验证就绪、健康与有界关闭",
      "anchor": "vext-ops-006",
      "contentHash": "7a1bfcd8a720edd7515fa491e53f36f83c6d717c3688f4cd7c78d83f7a9d81b6",
      "docId": "specification.operations",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/operations#vext-ops-006"
    },
    {
      "id": "VEXT-RESOURCE-001",
      "level": "should",
      "title": "Assign a creator and cleanup responsibility to each long-lived resource",
      "anchor": "vext-resource-001",
      "contentHash": "57e3d55352957229fd62e79cd57e8be4327e12f416d36f6ba4d75d2b3e57bf37",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-resource-001"
    },
    {
      "id": "VEXT-RESOURCE-001",
      "level": "should",
      "title": "给每个长期资源确定创建者与关闭职责",
      "anchor": "vext-resource-001",
      "contentHash": "79b169b194eaa016ab3443ad08054eb9489f1fe21d5ad5e96361150d67a6acfc",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-resource-001"
    },
    {
      "id": "VEXT-RESOURCE-002",
      "level": "must",
      "title": "Extension names and storage namespaces follow their owning contracts",
      "anchor": "vext-resource-002",
      "contentHash": "6613c92971ae296da186708395429889c97e982e6a45e2ca07114e130d605158",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-resource-002"
    },
    {
      "id": "VEXT-RESOURCE-002",
      "level": "must",
      "title": "扩展名称和存储命名空间遵循所属合同",
      "anchor": "vext-resource-002",
      "contentHash": "44d0a6dc2e21e13ae5d24c1b4b107e462c1e7bb8dfcda6b586dc2842b05413c0",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-resource-002"
    },
    {
      "id": "VEXT-RESOURCE-003",
      "level": "should",
      "title": "Set resource budgets and parsing placement before accepting uploads",
      "anchor": "vext-resource-003",
      "contentHash": "179a8672a82974e4cc490e93d360da98fb0562e293f1c0b039778e3a5022a637",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-resource-003"
    },
    {
      "id": "VEXT-RESOURCE-003",
      "level": "should",
      "title": "在接收上传前确定资源预算和解析位置",
      "anchor": "vext-resource-003",
      "contentHash": "871e369d65f3e9c3791f3650319deea9e37615a17637ed600cd4a8880d9773f2",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-resource-003"
    },
    {
      "id": "VEXT-SEC-001",
      "level": "must",
      "title": "Connect identity verification to route authorization explicitly",
      "anchor": "vext-sec-001",
      "contentHash": "67753a787e6faee325f8b68c3abcdd51d3f85e7a97866cd3a8faa229ec53f134",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-sec-001"
    },
    {
      "id": "VEXT-SEC-001",
      "level": "must",
      "title": "将身份识别和路由授权显式连接",
      "anchor": "vext-sec-001",
      "contentHash": "0794457a696401b0e251f5ca6b49b97c8fd4f19b8f8309eac32aac2741ca67ee",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-sec-001"
    },
    {
      "id": "VEXT-SEC-002",
      "level": "must-not",
      "title": "Do not treat documentation, input validation, or CORS as authorization",
      "anchor": "vext-sec-002",
      "contentHash": "da10b6f4e1086b6d631299fad2e3785d6045739a23d8a4f54e905e9aade94d88",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-sec-002"
    },
    {
      "id": "VEXT-SEC-002",
      "level": "must-not",
      "title": "不得把文档声明、输入校验或 CORS 当作授权",
      "anchor": "vext-sec-002",
      "contentHash": "9d348812496980b3d5db92a0179fe2488f6a9ecb991143480e22852a4162d058",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-sec-002"
    },
    {
      "id": "VEXT-SEC-003",
      "level": "must",
      "title": "Configure each protection according to its enablement conditions",
      "anchor": "vext-sec-003",
      "contentHash": "53d217a639d029ab8949169aea3d51e686b1068483689da0dccde312d2791784",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-sec-003"
    },
    {
      "id": "VEXT-SEC-003",
      "level": "must",
      "title": "按各机制的启用条件配置保护",
      "anchor": "vext-sec-003",
      "contentHash": "1ceeb8f6365a0364439677f8e8686e58d7d9a66c3e831dca14ee85590f998ad8",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-sec-003"
    },
    {
      "id": "VEXT-SEC-004",
      "level": "should",
      "title": "Check rate-limit keys and cross-process state at the actual execution point",
      "anchor": "vext-sec-004",
      "contentHash": "1543c261f0dd3aaade5fc832266fa5af9a19054abbcc17fdc503413725f80ad6",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-sec-004"
    },
    {
      "id": "VEXT-SEC-004",
      "level": "should",
      "title": "在实际执行位置核对限流键与跨进程状态",
      "anchor": "vext-sec-004",
      "contentHash": "22759b233aec691da5af90f70931c9696878673a554ef57a59fcbe26bee2e1a5",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-sec-004"
    },
    {
      "id": "VEXT-SEC-005",
      "level": "should",
      "title": "Partition response caches by access identity and data differences",
      "anchor": "vext-sec-005",
      "contentHash": "f4c0bae6ba96ec4c26073a413a8eaeaad85db0d4e06059ae9a54c7b90a64647a",
      "docId": "specification.security-and-resources",
      "locale": "en",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/specification/security-and-resources#vext-sec-005"
    },
    {
      "id": "VEXT-SEC-005",
      "level": "should",
      "title": "响应缓存按访问身份和数据差异划分",
      "anchor": "vext-sec-005",
      "contentHash": "5cb5e3fcd5b87ba678af097c591f61927073f155624b0f5e988616b81826017c",
      "docId": "specification.security-and-resources",
      "locale": "zh",
      "canonicalUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources",
      "ruleUrl": "https://devcodex-labs.github.io/vextjs/zh/specification/security-and-resources#vext-sec-005"
    }
  ]
}
