[{"data":1,"prerenderedAt":1307},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"docs:\u002Feos\u002Fharbourmaster\u002Freference\u002Ftelemetry":443},[4,8,201],{"title":5,"path":6,"stem":7},"Documentation","\u002F","README",{"title":9,"path":10,"stem":11,"children":12},"EOS","\u002Feos","eos\u002FREADME",[13,44,121,181],{"title":14,"collapsed":15,"path":16,"stem":17,"children":18,"page":43},"Adrs",true,"\u002Feos\u002Fadrs","eos\u002Fadrs",[19,23,27,31,35,39],{"title":20,"path":21,"stem":22},"Use Turborepo for the EOS monorepo","\u002Feos\u002Fadrs\u002F0001-use-turborepo-for-eos","eos\u002Fadrs\u002F0001-use-turborepo-for-eos",{"title":24,"path":25,"stem":26},"Use Oxc for linting and formatting","\u002Feos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting","eos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting",{"title":28,"path":29,"stem":30},"Lint Markdown and validate links in CI","\u002Feos\u002Fadrs\u002F0004-lint-markdown-in-ci","eos\u002Fadrs\u002F0004-lint-markdown-in-ci",{"title":32,"path":33,"stem":34},"Use Lefthook for repository-managed Git hooks","\u002Feos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks","eos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks",{"title":36,"path":37,"stem":38},"Use Commitlint's conventional configuration","\u002Feos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration","eos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration",{"title":40,"path":41,"stem":42},"Use Nx for EOS task execution","\u002Feos\u002Fadrs\u002F0007-use-nx-for-eos","eos\u002Fadrs\u002F0007-use-nx-for-eos",false,{"title":45,"path":46,"stem":47,"children":48},"Harbourmaster","\u002Feos\u002Fharbourmaster","eos\u002Fharbourmaster\u002FREADME",[49,58,71,96],{"title":50,"path":51,"stem":52,"children":53,"page":43},"Decisions","\u002Feos\u002Fharbourmaster\u002Fdecisions","eos\u002Fharbourmaster\u002Fdecisions",[54],{"title":55,"path":56,"stem":57},"AI-50: GitHub auth and fork pull request policy","\u002Feos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy","eos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy",{"title":59,"path":60,"stem":61,"children":62,"page":43},"Explanation","\u002Feos\u002Fharbourmaster\u002Fexplanation","eos\u002Fharbourmaster\u002Fexplanation",[63,67],{"title":64,"path":65,"stem":66},"The Harbourmaster review pipeline","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline","eos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline",{"title":68,"path":69,"stem":70},"The Harbourmaster shared-action trust boundary","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary","eos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary",{"title":72,"path":73,"stem":74,"children":75,"page":43},"How To","\u002Feos\u002Fharbourmaster\u002Fhow-to","eos\u002Fharbourmaster\u002Fhow-to",[76,80,84,88,92],{"title":77,"path":78,"stem":79},"How to add Harbourmaster reviews to a repository","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository","eos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository",{"title":81,"path":82,"stem":83},"How to build a pilot dashboard","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard","eos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard",{"title":85,"path":86,"stem":87},"How to configure model routing","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing","eos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing",{"title":89,"path":90,"stem":91},"How to request a Harbourmaster review","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review",{"title":93,"path":94,"stem":95},"How to diagnose a Harbourmaster review failure","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review",{"title":97,"path":98,"stem":99,"children":100,"page":43},"Reference","\u002Feos\u002Fharbourmaster\u002Freference","eos\u002Fharbourmaster\u002Freference",[101,105,109,113,117],{"title":102,"path":103,"stem":104},"Harbourmaster command-line interface","\u002Feos\u002Fharbourmaster\u002Freference\u002Fcli","eos\u002Fharbourmaster\u002Freference\u002Fcli",{"title":106,"path":107,"stem":108},"Harbourmaster configuration","\u002Feos\u002Fharbourmaster\u002Freference\u002Fconfiguration","eos\u002Fharbourmaster\u002Freference\u002Fconfiguration",{"title":110,"path":111,"stem":112},"Harbourmaster GitHub Action","\u002Feos\u002Fharbourmaster\u002Freference\u002Fgithub-action","eos\u002Fharbourmaster\u002Freference\u002Fgithub-action",{"title":114,"path":115,"stem":116},"Harbourmaster review behavior","\u002Feos\u002Fharbourmaster\u002Freference\u002Freview-behavior","eos\u002Fharbourmaster\u002Freference\u002Freview-behavior",{"title":118,"path":119,"stem":120},"Harbourmaster telemetry","\u002Feos\u002Fharbourmaster\u002Freference\u002Ftelemetry","eos\u002Fharbourmaster\u002Freference\u002Ftelemetry",{"title":72,"path":122,"stem":123,"children":124,"page":43},"\u002Feos\u002Fhow-to","eos\u002Fhow-to",[125,129,133,137,141,145,149,153,157,161,165,169,173,177],{"title":126,"path":127,"stem":128},"How to add an external documentation source","\u002Feos\u002Fhow-to\u002Fadd-external-documentation-source","eos\u002Fhow-to\u002Fadd-external-documentation-source",{"title":130,"path":131,"stem":132},"How to connect SDLC integrations","\u002Feos\u002Fhow-to\u002Fconnect-sdlc-integrations","eos\u002Fhow-to\u002Fconnect-sdlc-integrations",{"title":134,"path":135,"stem":136},"How to consume the EOS plugin marketplace","\u002Feos\u002Fhow-to\u002Fconsume-eos-marketplace","eos\u002Fhow-to\u002Fconsume-eos-marketplace",{"title":138,"path":139,"stem":140},"How to create a spike ticket","\u002Feos\u002Fhow-to\u002Fcreate-spike-ticket","eos\u002Fhow-to\u002Fcreate-spike-ticket",{"title":142,"path":143,"stem":144},"How to finalise a repository change","\u002Feos\u002Fhow-to\u002Ffinalise-change","eos\u002Fhow-to\u002Ffinalise-change",{"title":146,"path":147,"stem":148},"How to install the EOS Docs MCP server","\u002Feos\u002Fhow-to\u002Finstall-eos-docs-mcp","eos\u002Fhow-to\u002Finstall-eos-docs-mcp",{"title":150,"path":151,"stem":152},"How to resolve a spike ticket","\u002Feos\u002Fhow-to\u002Fresolve-spike-ticket","eos\u002Fhow-to\u002Fresolve-spike-ticket",{"title":154,"path":155,"stem":156},"How to run Git hook checks","\u002Feos\u002Fhow-to\u002Frun-git-hook-checks","eos\u002Fhow-to\u002Frun-git-hook-checks",{"title":158,"path":159,"stem":160},"How to use the AI-enabled SDLC","\u002Feos\u002Fhow-to\u002Fuse-ai-enabled-sdlc","eos\u002Fhow-to\u002Fuse-ai-enabled-sdlc",{"title":162,"path":163,"stem":164},"Use the Aikido plugin","\u002Feos\u002Fhow-to\u002Fuse-aikido-plugin","eos\u002Fhow-to\u002Fuse-aikido-plugin",{"title":166,"path":167,"stem":168},"How to use Compass","\u002Feos\u002Fhow-to\u002Fuse-compass","eos\u002Fhow-to\u002Fuse-compass",{"title":170,"path":171,"stem":172},"How to use Fallow","\u002Feos\u002Fhow-to\u002Fuse-fallow","eos\u002Fhow-to\u002Fuse-fallow",{"title":174,"path":175,"stem":176},"How to use incremental mutation tests","\u002Feos\u002Fhow-to\u002Fuse-incremental-mutation-tests","eos\u002Fhow-to\u002Fuse-incremental-mutation-tests",{"title":178,"path":179,"stem":180},"How to use Scout","\u002Feos\u002Fhow-to\u002Fuse-scout","eos\u002Fhow-to\u002Fuse-scout",{"title":97,"path":182,"stem":183,"children":184,"page":43},"\u002Feos\u002Freference","eos\u002Freference",[185,189,193,197],{"title":186,"path":187,"stem":188},"Compass CLI","\u002Feos\u002Freference\u002Fcompass-cli","eos\u002Freference\u002Fcompass-cli",{"title":190,"path":191,"stem":192},"EOS marketplace skills","\u002Feos\u002Freference\u002Fmarketplace-skills","eos\u002Freference\u002Fmarketplace-skills",{"title":194,"path":195,"stem":196},"Nx task execution and cache","\u002Feos\u002Freference\u002Fnx-task-execution","eos\u002Freference\u002Fnx-task-execution",{"title":198,"path":199,"stem":200},"Scout CLI","\u002Feos\u002Freference\u002Fscout-cli","eos\u002Freference\u002Fscout-cli",{"title":202,"path":203,"stem":204,"children":205},"Product engineering","\u002Fproduct-engineering","product-engineering\u002FREADME",[206],{"title":14,"collapsed":15,"path":207,"stem":208,"children":209,"page":43},"\u002Fproduct-engineering\u002Fadrs","product-engineering\u002Fadrs",[210],{"title":211,"path":212,"stem":213},"Codify Engineering Standards as Skills","\u002Fproduct-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills","product-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills",[215,268],{"nav":216,"source":265},[217],{"title":218,"path":219,"stem":220,"children":221},"Ember","\u002Fember","ember",[222,225,257,261],{"title":223,"path":219,"stem":224},"StoreFront Documentation","ember\u002Findex",{"title":14,"path":226,"stem":227,"children":228,"page":43},"\u002Fember\u002Fadrs","ember\u002Fadrs",[229,233,237,241,245,249,253],{"title":230,"path":231,"stem":232},"Add Infection as a non-blocking mutation testing tool for Ember","\u002Fember\u002Fadrs\u002F0001-infection-mutation-testing","ember\u002Fadrs\u002F0001-infection-mutation-testing",{"title":234,"path":235,"stem":236},"Process DELETE scheduled changes before CREATE_UPDATE at the same instant","\u002Fember\u002Fadrs\u002F0002-scheduled-change-processing-order","ember\u002Fadrs\u002F0002-scheduled-change-processing-order",{"title":238,"path":239,"stem":240},"Standard rate scheduling is permanent until overridden","\u002Fember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent","ember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent",{"title":242,"path":243,"stem":244},"Promotions require an existing standard rate","\u002Fember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate","ember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate",{"title":246,"path":247,"stem":248},"UTC datetime contract between Storefront and Hub","\u002Fember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub","ember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub",{"title":250,"path":251,"stem":252},"Elapsed unprocessed scheduled changes do not block rate changes","\u002Fember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes","ember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes",{"title":254,"path":255,"stem":256},"ADR-0007: Delete ConfigureTenantAuth routing command once OIDC setup migrates to Hub","\u002Fember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command","ember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command",{"title":258,"path":259,"stem":260},"Domain Overview","\u002Fember\u002Fdomain_overview","ember\u002Fdomain_overview",{"title":262,"path":263,"stem":264},"Main Flows","\u002Fember\u002Fkey_flows","ember\u002Fkey_flows",{"collectionName":266,"label":267,"prefix":220},"external_ember","StoreFront (Ember)",{"nav":269,"source":441},[270],{"title":271,"path":272,"stem":273,"children":274},"Core","\u002Fcore","core",[275,278,306,310,332,336,346,363,420,424],{"title":276,"path":272,"stem":277},"Documentation Index","core\u002Findex",{"title":14,"path":279,"stem":280,"children":281,"page":43},"\u002Fcore\u002Fadrs","core\u002Fadrs",[282,286,290,294,298,302],{"title":283,"path":284,"stem":285},"ADR-XXXX: Short, descriptive title","\u002Fcore\u002Fadrs\u002F0000-template","core\u002Fadrs\u002F0000-template",{"title":287,"path":288,"stem":289},"ADR-1: Promotions endpoint","\u002Fcore\u002Fadrs\u002F0001-add-promotions-endpoint","core\u002Fadrs\u002F0001-add-promotions-endpoint",{"title":291,"path":292,"stem":293},"ADR-2: EOM partner report job dispatch","\u002Fcore\u002Fadrs\u002F0002-eom-report-job-dispatch","core\u002Fadrs\u002F0002-eom-report-job-dispatch",{"title":295,"path":296,"stem":297},"ADR-3: Replace PB fee waive flag with a Zero scheme override","\u002Fcore\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme","core\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme",{"title":299,"path":300,"stem":301},"ADR-4: No processor Digital Top-up capability gate in Reloadable Commercials","\u002Fcore\u002Fadrs\u002F0004-no-processor-top-up-capability-gate","core\u002Fadrs\u002F0004-no-processor-top-up-capability-gate",{"title":303,"path":304,"stem":305},"ADR-5: Sparse polymorphic sale fee override reason stamp","\u002Fcore\u002Fadrs\u002F0005-sale-fee-override-reason-stamp","core\u002Fadrs\u002F0005-sale-fee-override-reason-stamp",{"title":307,"path":308,"stem":309},"Agent Workflow","\u002Fcore\u002Fai-workflow","core\u002Fai-workflow",{"title":311,"path":312,"stem":313,"children":314},"Backend Guide","\u002Fcore\u002Fbackend","core\u002Fbackend\u002Findex",[315,316,320,324,328],{"title":311,"path":312,"stem":313},{"title":317,"path":318,"stem":319},"Backend AI Tooling","\u002Fcore\u002Fbackend\u002Fai-tooling","core\u002Fbackend\u002Fai-tooling",{"title":321,"path":322,"stem":323},"Backend Linting and Formatting","\u002Fcore\u002Fbackend\u002Flinting-and-formatting","core\u002Fbackend\u002Flinting-and-formatting",{"title":325,"path":326,"stem":327},"Backend Setup","\u002Fcore\u002Fbackend\u002Fsetup","core\u002Fbackend\u002Fsetup",{"title":329,"path":330,"stem":331},"Backend Testing","\u002Fcore\u002Fbackend\u002Ftesting","core\u002Fbackend\u002Ftesting",{"title":333,"path":334,"stem":335},"Documentation Health","\u002Fcore\u002Fdoc-health","core\u002Fdoc-health",{"title":337,"path":338,"stem":339,"children":340},"Frontend Guide","\u002Fcore\u002Ffrontend","core\u002Ffrontend\u002Findex",[341,342],{"title":337,"path":338,"stem":339},{"title":343,"path":344,"stem":345},"Frontend Development","\u002Fcore\u002Ffrontend\u002Fdevelopment","core\u002Ffrontend\u002Fdevelopment",{"title":347,"path":348,"stem":349,"children":350,"page":43},"Modules","\u002Fcore\u002Fmodules","core\u002Fmodules",[351,355],{"title":352,"path":353,"stem":354},"Connect API","\u002Fcore\u002Fmodules\u002Fconnect-api","core\u002Fmodules\u002Fconnect-api",{"title":356,"path":357,"stem":358,"children":359,"page":43},"Secure Links","\u002Fcore\u002Fmodules\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links",[360],{"title":356,"path":361,"stem":362},"\u002Fcore\u002Fmodules\u002Fsecure-links\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links\u002Fsecure-links",{"title":364,"path":365,"stem":366,"children":367,"page":43},"Processors","\u002Fcore\u002Fprocessors","core\u002Fprocessors",[368,372,376,380,384,388,392,396,400,404,408,412,416],{"title":369,"path":370,"stem":371},"Amazon Processor and API","\u002Fcore\u002Fprocessors\u002Famazon","core\u002Fprocessors\u002Famazon",{"title":373,"path":374,"stem":375},"Amilon Processor and API","\u002Fcore\u002Fprocessors\u002Familon","core\u002Fprocessors\u002Familon",{"title":377,"path":378,"stem":379},"Cadooz Processor and API","\u002Fcore\u002Fprocessors\u002Fcadooz","core\u002Fprocessors\u002Fcadooz",{"title":381,"path":382,"stem":383},"Choice Digital Processor and API","\u002Fcore\u002Fprocessors\u002Fchoice-digital","core\u002Fprocessors\u002Fchoice-digital",{"title":385,"path":386,"stem":387},"Diggecard processor reference","\u002Fcore\u002Fprocessors\u002Fdiggecard","core\u002Fprocessors\u002Fdiggecard",{"title":389,"path":390,"stem":391},"ePay Processor and API","\u002Fcore\u002Fprocessors\u002Fepay","core\u002Fprocessors\u002Fepay",{"title":393,"path":394,"stem":395},"GoGift v2 Processor and API","\u002Fcore\u002Fprocessors\u002Fgo-gift-v2","core\u002Fprocessors\u002Fgo-gift-v2",{"title":397,"path":398,"stem":399},"InComm Processor and API","\u002Fcore\u002Fprocessors\u002Fincomm","core\u002Fprocessors\u002Fincomm",{"title":401,"path":402,"stem":403},"Ogloba Processor and API","\u002Fcore\u002Fprocessors\u002Fogloba","core\u002Fprocessors\u002Fogloba",{"title":405,"path":406,"stem":407},"SVSECard Processor and API","\u002Fcore\u002Fprocessors\u002Fsvs-ecard","core\u002Fprocessors\u002Fsvs-ecard",{"title":409,"path":410,"stem":411},"Vananam Processor and API","\u002Fcore\u002Fprocessors\u002Fvananam","core\u002Fprocessors\u002Fvananam",{"title":413,"path":414,"stem":415},"Vouchers Depot processor reference","\u002Fcore\u002Fprocessors\u002Fvouchers-depot","core\u002Fprocessors\u002Fvouchers-depot",{"title":417,"path":418,"stem":419},"You Got a Gift Processor and API","\u002Fcore\u002Fprocessors\u002Fyou-got-a-gift","core\u002Fprocessors\u002Fyou-got-a-gift",{"title":421,"path":422,"stem":423},"Development Quickstart","\u002Fcore\u002Fsetup","core\u002Fsetup",{"title":425,"path":426,"stem":427,"children":428,"page":43},"Workflows","\u002Fcore\u002Fworkflows","core\u002Fworkflows",[429,433,437],{"title":430,"path":431,"stem":432},"Hub Endpoint Workflow","\u002Fcore\u002Fworkflows\u002Fhub-endpoints","core\u002Fworkflows\u002Fhub-endpoints",{"title":434,"path":435,"stem":436},"OpenAPI Tooling","\u002Fcore\u002Fworkflows\u002Fopenapi-tooling","core\u002Fworkflows\u002Fopenapi-tooling",{"title":438,"path":439,"stem":440},"Processor Integration Workflow","\u002Fcore\u002Fworkflows\u002Fprocessors","core\u002Fworkflows\u002Fprocessors",{"collectionName":442,"label":271,"prefix":273},"external_core",{"page":444,"surround":1304},{"id":445,"title":118,"body":446,"config":1298,"description":1299,"extension":1300,"meta":1301,"navigation":15,"path":119,"seo":1302,"stem":120,"__hash__":1303},"docs\u002Feos\u002Fharbourmaster\u002Freference\u002Ftelemetry.md",{"type":447,"value":448,"toc":1284},"minimark",[449,462,467,470,537,577,581,798,802,808,926,929,933,952,991,995,1002,1017,1126,1133,1136,1140,1149,1176,1180,1188,1231,1235,1238,1242,1252,1256],[450,451,452,453,457,458,461],"p",{},"Harbourmaster emits one logfmt record per line using Effect's built-in\n",[454,455,456],"code",{},"Logger.logFmt"," format. This matches OpenCode's compact ",[454,459,460],{},"key=value"," logs. Review\nmetadata is redacted before it is added as log annotations.",[463,464,466],"h2",{"id":465},"effect-logfmt-fields","Effect logfmt fields",[450,468,469],{},"Harbourmaster does not define a separate telemetry wire schema or schema\nversion. Effect owns the log format.",[471,472,473,486],"table",{},[474,475,476],"thead",{},[477,478,479,483],"tr",{},[480,481,482],"th",{},"Field",[480,484,485],{},"Description",[487,488,489,500,514,524],"tbody",{},[477,490,491,497],{},[492,493,494],"td",{},[454,495,496],{},"timestamp",[492,498,499],{},"Timestamp generated by Effect.",[477,501,502,507],{},[492,503,504],{},[454,505,506],{},"level",[492,508,509,510,513],{},"Effect log level. Review lifecycle events use ",[454,511,512],{},"INFO",".",[477,515,516,521],{},[492,517,518],{},[454,519,520],{},"fiber",[492,522,523],{},"Identifier for the Effect fiber that emitted the entry.",[477,525,526,531],{},[492,527,528],{},[454,529,530],{},"message",[492,532,533,534,513],{},"Review event name, such as ",[454,535,536],{},"run_started",[450,538,539,540,543,544,543,547,543,550,543,553,543,556,559,560,543,563,543,566,543,569,572,573,576],{},"Effect writes annotations as additional fields on the same line. Common fields\ninclude ",[454,541,542],{},"run",", ",[454,545,546],{},"repo",[454,548,549],{},"pullNumber",[454,551,552],{},"headSha",[454,554,555],{},"workflowRunId",[454,557,558],{},"agent",",\n",[454,561,562],{},"model",[454,564,565],{},"provider",[454,567,568],{},"modelTier",[454,570,571],{},"riskTier",", and ",[454,574,575],{},"opencode",". Strings containing\nspaces are quoted. Arrays and nested objects are encoded as quoted JSON values.",[463,578,580],{"id":579},"event-names","Event names",[471,582,583,593],{},[474,584,585],{},[477,586,587,590],{},[480,588,589],{},"Event",[480,591,592],{},"Event-specific annotations",[487,594,595,607,617,630,646,656,668,704,714,734,744,764,774,784],{},[477,596,597,601],{},[492,598,599],{},[454,600,536],{},[492,602,603,604,513],{},"Optional run ",[454,605,606],{},"mode",[477,608,609,614],{},[492,610,611],{},[454,612,613],{},"context_loaded",[492,615,616],{},"Optional file\u002Fcomment counts plus discussion source and review-thread counts.",[477,618,619,624],{},[492,620,621],{},[454,622,623],{},"diff_filtered",[492,625,626,627,513],{},"Optional included and excluded file counts and ",[454,628,629],{},"excludedReasons",[477,631,632,637],{},[492,633,634],{},[454,635,636],{},"risk_classified",[492,638,639,640,642,643,513],{},"Required ",[454,641,571],{},"; optional ",[454,644,645],{},"signals",[477,647,648,653],{},[492,649,650],{},[454,651,652],{},"change_analyzed",[492,654,655],{},"Required affected-behavior count, recommended reviewer list, and uncertainty count.",[477,657,658,663],{},[492,659,660],{},[454,661,662],{},"reviewer_started",[492,664,639,665,667],{},[454,666,575],{},"; optional reviewer role and selected reason.",[477,669,670,675],{},[492,671,672],{},[454,673,674],{},"opencode_progress",[492,676,639,677,680,681,684,685,688,689,692,693,695,696,699,700,703],{},[454,678,679],{},"phase","; optional duration, event count, last status, output stream, stdout ",[454,682,683],{},"line",", and structured ",[454,686,687],{},"details",". Telemetry uses ",[454,690,691],{},"phase: telemetry_record"," with the validated record in ",[454,694,687],{},"; the former ",[454,697,698],{},"stderr_line"," and ",[454,701,702],{},"server_log"," phases are not emitted.",[477,705,706,711],{},[492,707,708],{},[454,709,710],{},"reviewer_completed",[492,712,713],{},"Optional duration, finding and quarantine counts, status, reason, retry, usage, cost, and OpenCode metadata.",[477,715,716,721],{},[492,717,718],{},[454,719,720],{},"editor_completed",[492,722,723,724,543,727,543,730,733],{},"Required accepted, duplicate, rejected-unmappable, and severity-adjusted counts; optional existing-discussion suppress count and grouped severity\u002Fcategory\u002Fsource counts (",[454,725,726],{},"countsBySeverity",[454,728,729],{},"countsByCategory",[454,731,732],{},"countsBySource",").",[477,735,736,741],{},[492,737,738],{},[454,739,740],{},"blocking_decision",[492,742,743],{},"Required policy, file, line, severity, would-block and did-block flags; optional bypass reason.",[477,745,746,751],{},[492,747,748],{},[454,749,750],{},"finding_produced",[492,752,639,753,543,756,759,760,763],{},[454,754,755],{},"info",[454,757,758],{},"warning",", or ",[454,761,762],{},"error"," severity; optional path. This is the provider-neutral result-contract event, distinct from canonical editor severity.",[477,765,766,771],{},[492,767,768],{},[454,769,770],{},"publish_attempted",[492,772,773],{},"Required target and publication mode.",[477,775,776,781],{},[492,777,778],{},[454,779,780],{},"run_completed",[492,782,783],{},"Required exit code; optional duration, findings, calls, retries, degradation, unavailable usage, cost, previous-finding considered\u002Fpreserved\u002Fcompleted\u002Freplied counts, lifecycle warnings, receipt verification, and cost warning.",[477,785,786,791],{},[492,787,788],{},[454,789,790],{},"run_failed",[492,792,793,794,797],{},"Required classified ",[454,795,796],{},"failure"," object.",[463,799,801],{"id":800},"opencode-metadata","OpenCode metadata",[450,803,804,805,807],{},"The optional ",[454,806,575],{}," object accepts:",[471,809,810,818],{},[474,811,812],{},[477,813,814,816],{},[480,815,482],{},[480,817,485],{},[487,819,820,836,846,859,872,882,895,911],{},[477,821,822,827],{},[492,823,824],{},[454,825,826],{},"sdkClientMode",[492,828,829,832,833,513],{},[454,830,831],{},"embedded"," or ",[454,834,835],{},"external",[477,837,838,843],{},[492,839,840],{},[454,841,842],{},"serverLabel",[492,844,845],{},"Runtime server identity such as an owned-per-run label.",[477,847,848,856],{},[492,849,850,543,853],{},[454,851,852],{},"sessionId",[454,854,855],{},"agentId",[492,857,858],{},"OpenCode session and agent identifiers.",[477,860,861,869],{},[492,862,863,543,866],{},[454,864,865],{},"configDirLabel",[454,867,868],{},"configDirHash",[492,870,871],{},"Trusted configuration identity and SHA-256 content hash.",[477,873,874,879],{},[492,875,876],{},[454,877,878],{},"rawArtifactPath",[492,880,881],{},"Diagnostic artifact reference when one exists.",[477,883,884,892],{},[492,885,886,543,889],{},[454,887,888],{},"fallbackUsed",[454,890,891],{},"retryCount",[492,893,894],{},"Route fallback and retry metadata.",[477,896,897,908],{},[492,898,899,543,902,543,905],{},[454,900,901],{},"pollCount",[454,903,904],{},"eventCount",[454,906,907],{},"lastStatus",[492,909,910],{},"Runtime progress counters and final observed status.",[477,912,913,918],{},[492,914,915],{},[454,916,917],{},"structuredOutput",[492,919,920,832,923,925],{},[454,921,922],{},"success",[454,924,762],{}," for the accepted structured-output boundary.",[450,927,928],{},"Specialists and the adversarial verifier return bounded intermediate text. The\neditor response is the structured-output boundary whose accepted value can\nbecome canonical findings.",[463,930,932],{"id":931},"retry-usage-and-cost","Retry, usage, and cost",[450,934,935,936,939,940,543,943,543,946,948,949,513],{},"The ",[454,937,938],{},"retry"," object can contain ",[454,941,942],{},"attempts",[454,944,945],{},"retries",[454,947,888],{},", and an\narray of classified ",[454,950,951],{},"failureClasses",[450,953,935,954,939,957,543,960,543,963,966,967,970,971,974,975,978,979,982,983,986,987,990],{},[454,955,956],{},"usage",[454,958,959],{},"inputTokens",[454,961,962],{},"outputTokens",[454,964,965],{},"totalTokens",", and\n",[454,968,969],{},"unavailable",". Valid plugin records aggregate editor, specialist, and verifier\nusage. Missing child-session records are represented with ",[454,972,973],{},"unavailable: true",";\nusage is not inferred from the editor alone. Coverage requires at least one\neditor record, at least as many specialist records as the editor reports\ncompleted, and at least one verifier record when any specialist completed. Runs\nwithout completed specialists need only the editor record. ",[454,976,977],{},"estimatedCostUsd"," is\nemitted only when provider cost or complete token usage and configured model\nrates permit calculation. A ",[454,980,981],{},"cost_usd"," value from the telemetry plugin is used\ndirectly and takes precedence over token-rate estimates from\n",[454,984,985],{},"costPer1kTokensUsd",". A configured ",[454,988,989],{},"warning_budget_usd"," produces a warning but\ndoes not stop execution.",[463,992,994],{"id":993},"opencode-telemetry-plugin","OpenCode telemetry plugin",[450,996,997,998,1001],{},"Harbourmaster's bundled ",[454,999,1000],{},"harbourmaster-telemetry"," plugin observes the official\nOpenCode plugin hooks for sessions, chat messages, tools, and errors. It uses\nthe OpenCode SDK message and event types to aggregate completed activity in\nmemory. The plugin does not poll OpenCode and does not subscribe to text-delta\nor other high-volume streaming events.",[450,1003,1004,1005,1008,1009,1012,1013,1016],{},"On session idle, error, or deletion, the plugin sends a cumulative\n",[454,1006,1007],{},"session_summary"," record through ",[454,1010,1011],{},"client.app.log",". The inner record schema is\nversion ",[454,1014,1015],{},"1"," and is independent of Harbourmaster's outer Effect logfmt record.\nLater revisions for the same session replace earlier revisions.",[471,1018,1019,1027],{},[474,1020,1021],{},[477,1022,1023,1025],{},[480,1024,482],{},[480,1026,485],{},[487,1028,1029,1050,1063,1079,1092,1108],{},[477,1030,1031,1042],{},[492,1032,1033,543,1036,543,1039],{},[454,1034,1035],{},"schema_version",[454,1037,1038],{},"kind",[454,1040,1041],{},"revision",[492,1043,1044,1045,543,1047,1049],{},"Literal ",[454,1046,1015],{},[454,1048,1007],{},", and a monotonic session revision.",[477,1051,1052,1060],{},[492,1053,1054,543,1057],{},[454,1055,1056],{},"session_id",[454,1058,1059],{},"parent_session_id",[492,1061,1062],{},"Opaque OpenCode session relationships.",[477,1064,1065,1076],{},[492,1066,1067,543,1070,543,1072,543,1074],{},[454,1068,1069],{},"role",[454,1071,558],{},[454,1073,565],{},[454,1075,562],{},[492,1077,1078],{},"Attribution to editor, specialist, verifier, or bounded other activity.",[477,1080,1081,1089],{},[492,1082,1083,543,1086],{},[454,1084,1085],{},"duration_ms",[454,1087,1088],{},"model_duration_ms",[492,1090,1091],{},"Session wall time and completed model-call time.",[477,1093,1094,1105],{},[492,1095,1096,543,1099,543,1102],{},[454,1097,1098],{},"tool_duration_ms",[454,1100,1101],{},"model_calls",[454,1103,1104],{},"tool_calls",[492,1106,1107],{},"Aggregate tool\u002Fmodel counts and tool time.",[477,1109,1110,1123],{},[492,1111,1112,543,1115,543,1117,543,1120],{},[454,1113,1114],{},"errors",[454,1116,981],{},[454,1118,1119],{},"tokens",[454,1121,1122],{},"tools",[492,1124,1125],{},"Error count, provider cost, token counters, and tool-name counts.",[450,1127,1128,1129,1132],{},"Harbourmaster accepts only strict, versioned records bearing the\n",[454,1130,1131],{},"harbourmaster.telemetry"," service marker. Arbitrary OpenCode server log lines\nare ignored. Server spawn, readiness, timeout, abort, and exit measurements\nremain adapter-owned lifecycle telemetry.",[450,1134,1135],{},"The plugin is observational and failure-isolated: logging errors are swallowed,\npending log writes and observed sessions\u002Ftool calls are capped, identifiers and\ninput buffers are bounded, and telemetry cannot change reviewer output or\npublication policy. Records never include prompts, message text, reasoning, tool\narguments, tool results, file contents, or error messages.",[463,1137,1139],{"id":1138},"editor-and-policy-fields","Editor and policy fields",[450,1141,1142,1144,1145,1148],{},[454,1143,720],{}," contains ",[454,1146,1147],{},"existingDiscussionSuppressedCount"," when the editor\nreports findings already covered by visible pull request discussion. This count\nis model-reported and has no publication authority.",[450,1150,1151,1152,1154,1155,543,1158,543,1161,759,1164,1167,1168,1171,1172,1175],{},"Each ",[454,1153,740],{}," describes a critical finding considered by policy. Its\noptional reason is ",[454,1156,1157],{},"policy-nonblocking",[454,1159,1160],{},"fork",[454,1162,1163],{},"untrusted",[454,1165,1166],{},"unmappable",".\n",[454,1169,1170],{},"would_block"," records severity intent; ",[454,1173,1174],{},"did_block"," records the deterministic\npolicy result.",[463,1177,1179],{"id":1178},"failure-object","Failure object",[450,1181,935,1182,1184,1185,1187],{},[454,1183,796],{}," annotation on a ",[454,1186,790],{}," entry contains:",[1189,1190,1191,1204,1209,1217,1226],"ul",{},[1192,1193,1194,1197,1198,1203],"li",{},[454,1195,1196],{},"class",": one of the failure classes in the\n",[1199,1200,1202],"a",{"href":1201},"\u002Feos\u002Fharbourmaster\u002Freference\u002Freview-behavior#failure-classes","review behavior reference",";",[1192,1205,1206,1208],{},[454,1207,530],{},": redacted failure description;",[1192,1210,1211,699,1214,1203],{},[454,1212,1213],{},"retry.retryable",[454,1215,1216],{},"retry.maxAttempts",[1192,1218,1219,699,1222,1225],{},[454,1220,1221],{},"terminalCiOutcomes.comment",[454,1223,1224],{},"terminalCiOutcomes.check","; and",[1192,1227,1228,513],{},[454,1229,1230],{},"exitCode",[463,1232,1234],{"id":1233},"redaction","Redaction",[450,1236,1237],{},"Annotations recursively redact secret-like keys and values, including GitHub\ntokens, API keys, bearer credentials, passwords, private keys, and prompt or\nmessage fragments before Effect serializes the log entry.",[463,1239,1241],{"id":1240},"example","Example",[1243,1244,1250],"pre",{"className":1245,"code":1247,"language":1248,"meta":1249},[1246],"language-text","timestamp=2026-07-16T10:00:00.000Z level=INFO fiber=#0 message=run_completed run=github-987654321 repo=team\u002Fservice pullNumber=42 headSha=abc123 workflowRunId=987654321 riskTier=medium durationMs=48123 findingCount=2 modelCalls=5 retries=0 degradedCount=0 usageUnavailableCount=1 exitCode=0\n","text","",[454,1251,1247],{"__ignoreMap":1249},[463,1253,1255],{"id":1254},"dashboard-status-derivation","Dashboard status derivation",[450,1257,1258,1259,1261,1262,832,1264,1267,1268,543,1271,543,1274,759,1277,1280,1281,513],{},"The pilot dashboard groups entries by the ",[454,1260,542],{}," field. A completed run is\n",[454,1263,922],{},[454,1265,1266],{},"partial"," when degradation is present. Terminal failures become\n",[454,1269,1270],{},"timeout",[454,1272,1273],{},"config_failure",[454,1275,1276],{},"provider_failure",[454,1278,1279],{},"failed"," according to\nfailure class. A run without a terminal event remains ",[454,1282,1283],{},"running",{"title":1249,"searchDepth":1285,"depth":1285,"links":1286},3,[1287,1289,1290,1291,1292,1293,1294,1295,1296,1297],{"id":465,"depth":1288,"text":466},2,{"id":579,"depth":1288,"text":580},{"id":800,"depth":1288,"text":801},{"id":931,"depth":1288,"text":932},{"id":993,"depth":1288,"text":994},{"id":1138,"depth":1288,"text":1139},{"id":1178,"depth":1288,"text":1179},{"id":1233,"depth":1288,"text":1234},{"id":1240,"depth":1288,"text":1241},{"id":1254,"depth":1288,"text":1255},{},"Harbourmaster emits one logfmt record per line using Effect's built-in\nLogger.logFmt format. This matches OpenCode's compact key=value logs. Review\nmetadata is redacted before it is added as log annotations.","md",{},{"title":118,"description":1299},"46_bqKYtyWyuK5kkC7NX5NR4NEJ69DsBBZYJ_rYbyNk",[1305,1306],{"title":114,"path":115,"stem":116,"children":-1},{"title":126,"path":127,"stem":128,"children":-1},1789777548161]