)]}'
{
  "commit": "855b60cd8f92aced122242d45b41a1814cff4057",
  "tree": "961bd77e587fc522bb0356af10910a010754be3a",
  "parents": [
    "422089e150d24513dac52dacc0719aa7234138f6"
  ],
  "author": {
    "name": "吴晟 Wu Sheng",
    "email": "wu.sheng@foxmail.com",
    "time": "Fri Jul 31 22:28:46 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jul 31 22:28:46 2026 +0800"
  },
  "message": "fix(layers): render bundled templates when the OAP template store is unreachable (#103)\n\nAn unreachable template store used to block every layer-driven page: routes\nserved nothing, so the Traces tab was empty with no explanation. The intent\nwas to avoid rendering content that might not match the operator\u0027s\nOAP-stored configuration, but the trade was wrong — a blank page is not\nsafer than a stated fallback.\n\nThe unreachable case is also predictable rather than exotic. An OAP 10.x has\nno `/ui-management/templates*` endpoint at all: template management lives on\nthe query port\u0027s GraphQL there, and Horizon implements only the OAP 11 REST\nprotocol. The store is therefore unreachable for the whole life of such a\ndeployment, which is what left Traces empty (apache/skywalking#13959).\n\nLayer resolution now falls back to the templates bundled in the release,\nwhile the connectivity banner keeps reporting the store as unreachable — the\ndegrade is visible, not silent. An admin-disabled layer still blocks, which\nis a different and deliberate signal. What a fallback cannot supply is a\ntemplate edit stored on OAP; those return as soon as a reachable store\nanswers.\n\nDocs updated: `templates.mode: readonly` moves from required to recommended\non OAP 10.x, since it states the deployment\u0027s reality up front and makes the\nadmin surface honestly display-only.\n\nAlso carries in-place doc corrections made against main: OAP 10 does have\npersistent template management (legacy query-port GraphQL, gated by\nSW_ENABLE_UPDATE_UI_TEMPLATE) — the gap is Horizon-side protocol support,\nnot a missing OAP feature — plus the minor-specific limits Horizon\u0027s current\nqueries impose (queryTrace duration needs 10.3+, findEndpoint duration 10.2+).",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d7d81555f3564dbfe8b1a603c824c76124d1dcbe",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "7833f197b826a45a376a9a61960da9ffc50e5e73",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "bea8a01e0bff6ed80db18f8c77fe63f79468395d",
      "old_mode": 33188,
      "old_path": "README.md",
      "new_id": "cfccab11a25e12c5714628be26ab4fdeb7939683",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "modify",
      "old_id": "28fe6c852c236c8c2fd687cea5890c76ba09997a",
      "old_mode": 33188,
      "old_path": "apps/bff/src/config/schema.ts",
      "new_id": "ee76c6740074c5bfe73e6884b2190220be5f221d",
      "new_mode": 33188,
      "new_path": "apps/bff/src/config/schema.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d307cbbcfae9ce65dad3175e0668ee959fd6627a",
      "new_mode": 33188,
      "new_path": "apps/bff/src/logic/layers/effective.test.ts"
    },
    {
      "type": "modify",
      "old_id": "d2443ec85bcead7eb41db4f264684fefb16847dc",
      "old_mode": 33188,
      "old_path": "apps/bff/src/logic/layers/effective.ts",
      "new_id": "37193439b2b1c078bcf47b3ae5fa48d17f6cfa6e",
      "new_mode": 33188,
      "new_path": "apps/bff/src/logic/layers/effective.ts"
    },
    {
      "type": "modify",
      "old_id": "a8343be5d88d2ba5b030c4a4b138fd7ea46996e6",
      "old_mode": 33188,
      "old_path": "docs/compatibility/oap-version.md",
      "new_id": "f5da969acb7ded563778c042c0eb3472b71bffab",
      "new_mode": 33188,
      "new_path": "docs/compatibility/oap-version.md"
    },
    {
      "type": "modify",
      "old_id": "a8df95dc5e4110103d4bcfad9feee53a381d3246",
      "old_mode": 33188,
      "old_path": "docs/compatibility/ports.md",
      "new_id": "8954244c57e8a41c05453f622db580c2c8e0d53d",
      "new_mode": 33188,
      "new_path": "docs/compatibility/ports.md"
    },
    {
      "type": "modify",
      "old_id": "bf15e0ac908b5a544adf97eee9c647f11584ebec",
      "old_mode": 33188,
      "old_path": "docs/compatibility/required-modules.md",
      "new_id": "f8dc9c626c9063e231fbc08f7b1222cd428abf68",
      "new_mode": 33188,
      "new_path": "docs/compatibility/required-modules.md"
    },
    {
      "type": "modify",
      "old_id": "a7a048cab29b56f2c2e3562fcd6b5c108aa90b55",
      "old_mode": 33188,
      "old_path": "docs/setup/container-image.md",
      "new_id": "ec6b9a9fa91ae74d7361bd977405935b1b68a788",
      "new_mode": 33188,
      "new_path": "docs/setup/container-image.md"
    },
    {
      "type": "modify",
      "old_id": "163f8fde4c4a5e1e6a4b126ae1e5d31337ad8995",
      "old_mode": 33188,
      "old_path": "docs/setup/horizon-yaml.md",
      "new_id": "462394952450ed3774e774077cb8eac4be491b93",
      "new_mode": 33188,
      "new_path": "docs/setup/horizon-yaml.md"
    },
    {
      "type": "modify",
      "old_id": "267af0e69362a67b28bdc901864fc945747805e3",
      "old_mode": 33188,
      "old_path": "docs/setup/oap.md",
      "new_id": "efc4510a5c885b5d0befc39bf61b40ffa296bbb5",
      "new_mode": 33188,
      "new_path": "docs/setup/oap.md"
    },
    {
      "type": "modify",
      "old_id": "e493e422992a1f511c1596653b2e3f3a4a76f666",
      "old_mode": 33188,
      "old_path": "docs/setup/overview.md",
      "new_id": "0c9a764a75c569f0cca2bdbe7ed888e84f3ab6d1",
      "new_mode": 33188,
      "new_path": "docs/setup/overview.md"
    },
    {
      "type": "modify",
      "old_id": "8a4695b18cda887990534621d467c2418ba02777",
      "old_mode": 33188,
      "old_path": "horizon.yaml",
      "new_id": "ece0f8efee9e0629f9a993c11dc34532813e0186",
      "new_mode": 33188,
      "new_path": "horizon.yaml"
    }
  ]
}
