[{"data":1,"prerenderedAt":974},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"docs:\u002Feos\u002Fharbourmaster\u002Freference\u002Fconfiguration":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":971},{"id":445,"title":106,"body":446,"config":966,"description":452,"extension":967,"meta":968,"navigation":15,"path":107,"seo":969,"stem":108,"__hash__":970},"docs\u002Feos\u002Fharbourmaster\u002Freference\u002Fconfiguration.md",{"type":447,"value":448,"toc":956},"minimark",[449,453,458,461,479,483,490,557,564,567,571,640,643,647,661,692,695,743,750,782,793,803,838,842,942,949],[450,451,452],"p",{},"Harbourmaster uses TypeScript model defaults, bundled OpenCode configuration,\nand environment overrides. The GitHub Action maps its inputs to environment\nvariables before it starts the CLI. Harbourmaster does not read repository YAML\nconfiguration.",[454,455,457],"h2",{"id":456},"precedence","Precedence",[450,459,460],{},"Model routes use this order, from highest to lowest precedence:",[462,463,464,468,476],"ol",{},[465,466,467],"li",{},"The environment override for the selected tier.",[465,469,470,471,475],{},"The general ",[472,473,474],"code",{},"HARBOURMASTER_BEDROCK_MODEL"," override.",[465,477,478],{},"The TypeScript defaults.",[454,480,482],{"id":481},"model-defaults","Model defaults",[450,484,485,486,489],{},"Use a ",[472,487,488],{},"provider\u002Fmodel-id"," value for each model. Change per-agent rules, fallback\nlists, provider availability, and optional cost metadata in the TypeScript model\nconfiguration when necessary.",[491,492,493,506],"table",{},[494,495,496],"thead",{},[497,498,499,503],"tr",{},[500,501,502],"th",{},"Key",[500,504,505],{},"Default",[507,508,509,522,534,546],"tbody",{},[497,510,511,517],{},[512,513,514],"td",{},[472,515,516],{},"fast_review",[512,518,519],{},[472,520,521],{},"amazon-bedrock\u002Fharbourmaster-gpt-5-6-luna-medium",[497,523,524,529],{},[512,525,526],{},[472,527,528],{},"deep_review",[512,530,531],{},[472,532,533],{},"amazon-bedrock\u002Fharbourmaster-gpt-5-6-luna-extra-high",[497,535,536,541],{},[512,537,538],{},[472,539,540],{},"editor",[512,542,543],{},[472,544,545],{},"amazon-bedrock\u002Fharbourmaster-gpt-5-6-terra-medium",[497,547,548,553],{},[512,549,550],{},[472,551,552],{},"fallback",[512,554,555],{},[472,556,545],{},[450,558,559,560,563],{},"Fast specialist routes use GPT-5.6 Luna with medium reasoning effort, while deep\nspecialist routes use Luna with extra-high (",[472,561,562],{},"xhigh",") reasoning effort. The\neditor, fallback, and adversarial verifier use GPT-5.6 Terra with medium\nreasoning effort by default. The code-quality route uses GPT-5.6 Sol with low\nreasoning effort, also called Sol Light. A tier override can select another\nconfigured model when needed.",[450,565,566],{},"The default fast, deep, and editor fallback is the bundled GPT-5.6 Terra medium\nmodel. The fallback tier has no additional fallback.",[454,568,570],{"id":569},"model-environment-variables","Model environment variables",[491,572,573,583],{},[494,574,575],{},[497,576,577,580],{},[500,578,579],{},"Variable",[500,581,582],{},"Effect",[507,584,585,594,607,618,629],{},[497,586,587,591],{},[512,588,589],{},[472,590,474],{},[512,592,593],{},"Default override for every tier.",[497,595,596,601],{},[512,597,598],{},[472,599,600],{},"HARBOURMASTER_FAST_REVIEW_MODEL",[512,602,603,604,606],{},"Overrides ",[472,605,516],{},"; takes precedence over the all-tier override.",[497,608,609,614],{},[512,610,611],{},[472,612,613],{},"HARBOURMASTER_DEEP_REVIEW_MODEL",[512,615,603,616,606],{},[472,617,528],{},[497,619,620,625],{},[512,621,622],{},[472,623,624],{},"HARBOURMASTER_EDITOR_MODEL",[512,626,603,627,606],{},[472,628,540],{},[497,630,631,636],{},[512,632,633],{},[472,634,635],{},"HARBOURMASTER_FALLBACK_MODEL",[512,637,603,638,606],{},[472,639,552],{},[450,641,642],{},"Empty values are ignored.",[454,644,646],{"id":645},"bundled-opencode-configuration","Bundled OpenCode configuration",[450,648,649,650,653,654,657,658,660],{},"The shared action always sets ",[472,651,652],{},"OPENCODE_CONFIG_PATH"," to Harbourmaster's bundled\n",[472,655,656],{},".opencode"," directory. Consumer-owned ",[472,659,656],{}," content is review context and\nis not executed.",[450,662,663,664,667,668,671,672,675,676,679,680,683,684,687,688,691],{},"The bundled runtime defines the editor, adversarial verifier, and specialist\nagents. For each attempt Harbourmaster creates an isolated temporary diff\ndirectory with reviewable patches. Before OpenCode starts, the trusted runner\nwrites ",[472,665,666],{},".\u002Freview-index.json",", ",[472,669,670],{},".\u002Fshared-pr-context.txt",", and\n",[472,673,674],{},".\u002Freview-discussion.txt",". It also copies the root reference paths ",[472,677,678],{},"AGENTS.md",",\n",[472,681,682],{},".agents\u002F",", and ",[472,685,686],{},"docs\u002F"," when the checkout contains them. OpenCode starts in this\ndirectory with the trusted bundled configuration. Specialist and verifier\nprompts refer to the three review files, ",[472,689,690],{},".\u002Fpatches\u002F",", and the staged reference\npaths.",[450,693,694],{},"The review workspace files have these roles:",[491,696,697,707],{},[494,698,699],{},[497,700,701,704],{},[500,702,703],{},"File",[500,705,706],{},"Contents",[507,708,709,723,733],{},[497,710,711,716],{},[512,712,713],{},[472,714,715],{},"review-index.json",[512,717,718,719,722],{},"Trusted repository root, exact base and head, changed paths, previous paths, statuses, patch paths, and per-hunk base, head, and patch-line ranges. A missing patch path is ",[472,720,721],{},"null",".",[497,724,725,730],{},[512,726,727],{},[472,728,729],{},"shared-pr-context.txt",[512,731,732],{},"Pull request facts, change analysis, diff filtering, and known uncertainties.",[497,734,735,740],{},[512,736,737],{},[472,738,739],{},"review-discussion.txt",[512,741,742],{},"Loaded review threads, existing discussion, and trusted lifecycle identifiers for prior findings.",[450,744,745,746,749],{},"The editor receives the publication and lifecycle context inline. It invokes\n",[472,747,748],{},"spawn_reviewers"," directly after it reads the prior discussion. It cannot write\nor copy the review workspace files.",[450,751,752,753,667,756,667,759,667,762,671,765,768,769,771,772,667,774,683,776,778,779,781],{},"Specialists and the verifier can use only ",[472,754,755],{},"read",[472,757,758],{},"glob",[472,760,761],{},"grep",[472,763,764],{},"list",[472,766,767],{},"read_more",". Each result page contains at most 200 lines from ",[472,770,755],{}," output, or\n30 lines from ",[472,773,758],{},[472,775,761],{},[472,777,764],{}," output. Each page, including its\ncontinuation notice, has a 48 KiB limit. The ",[472,780,767],{}," tool accepts a cursor\nfrom the previous page in the same session. A cursor works once. The runtime\nretains at most 128 results, each with at most 64 KiB of UTF-8 text. It discards\nthe oldest cursor when it reaches this count. A notice identifies results that\nexceed the retention limit. The cursor can return only the retained prefix. If\nOpenCode truncates a result first, the cursor cannot recover the omitted text.\nUse supported file offsets or a narrower query.",[450,783,784,785,788,789,792],{},"The code-quality reviewer also receives the absolute canonical checkout root in\nits prompt. A per-run permission override grants this reviewer\n",[472,786,787],{},"external_directory"," access to that checkout root. The reviewer can inspect the\ncheckout alongside the staged diff. All other external-directory access remains\ndenied, so other specialists and the verifier can inspect only the diff\ndirectory. A trusted hook canonicalizes paths for the repository tools and\nrejects symlink escapes. It also rejects ",[472,790,791],{},".git"," paths and symlink aliases to Git\nmetadata. The same guard applies when the runner copies reference files.",[450,794,795,796,798,799,802],{},"Before the editor's first model call, a runtime preflight verifies that OpenCode\nregistered ",[472,797,748],{}," and ",[472,800,801],{},"publish_review"," and that the editor\nconfiguration allows both. Missing access fails the run before specialists are\nstarted.",[450,804,805,806,809,810,813,814,817,818,820,821,824,825,828,829,667,832,671,835,722],{},"The default provider is Amazon Bedrock in ",[472,807,808],{},"us-east-1",". The Terra alias resolves\nto ",[472,811,812],{},"openai.gpt-5.6-terra"," with medium reasoning effort. The Luna alias resolves\nto ",[472,815,816],{},"openai.gpt-5.6-luna"," with medium or extra-high (",[472,819,562],{},") reasoning effort.\nThe code-quality reviewer uses the Sol alias. It resolves to\n",[472,822,823],{},"openai.gpt-5.6-sol"," with low reasoning effort. These models use the\n",[472,826,827],{},"bedrock-mantle"," endpoint. The GitHub Actions IAM role must allow these Bedrock\nMantle calls: ",[472,830,831],{},"bedrock-mantle:CreateInference",[472,833,834],{},"bedrock-mantle:GetProject",[472,836,837],{},"bedrock-mantle:ListProjects",[454,839,841],{"id":840},"runtime-environment","Runtime environment",[491,843,844,853],{},[494,845,846],{},[497,847,848,850],{},[500,849,579],{},[500,851,852],{},"Description",[507,854,855,870,880,890,906,916,929],{},[497,856,857,865],{},[512,858,859,667,862],{},[472,860,861],{},"AWS_REGION",[472,863,864],{},"AWS_DEFAULT_REGION",[512,866,867,868,722],{},"Fixed Bedrock region: ",[472,869,808],{},[497,871,872,877],{},[512,873,874],{},[472,875,876],{},"AWS_PROFILE",[512,878,879],{},"Optional named AWS profile for self-hosted runners.",[497,881,882,887],{},[512,883,884],{},[472,885,886],{},"AWS_BEARER_TOKEN_BEDROCK",[512,888,889],{},"Optional Bedrock bearer credential.",[497,891,892,903],{},[512,893,894,667,897,667,900],{},[472,895,896],{},"AWS_ACCESS_KEY_ID",[472,898,899],{},"AWS_SECRET_ACCESS_KEY",[472,901,902],{},"AWS_SESSION_TOKEN",[512,904,905],{},"Standard AWS credential-chain values.",[497,907,908,913],{},[512,909,910],{},[472,911,912],{},"OPENCODE_COMMAND",[512,914,915],{},"OpenCode executable override.",[497,917,918,923],{},[512,919,920],{},[472,921,922],{},"HARBOURMASTER_OPENCODE_SERVER_START_TIMEOUT_MS",[512,924,925,926,722],{},"OpenCode server startup timeout in milliseconds; default ",[472,927,928],{},"30000",[497,930,931,936],{},[512,932,933],{},[472,934,935],{},"HARBOURMASTER_STRICT_RUNTIME",[512,937,938,939,722],{},"Enables strict runtime failure behavior when set to ",[472,940,941],{},"true",[450,943,944,945,948],{},"GitHub-hosted action runs normally use ",[472,946,947],{},"aws_role_to_assume"," and GitHub OIDC\ninstead of long-lived AWS credentials.",[450,950,951,952,722],{},"Review-thread loading, specialist selection, and publication lifecycle rules are\nin the ",[953,954,955],"a",{"href":115},"review behavior reference",{"title":957,"searchDepth":958,"depth":958,"links":959},"",3,[960,962,963,964,965],{"id":456,"depth":961,"text":457},2,{"id":481,"depth":961,"text":482},{"id":569,"depth":961,"text":570},{"id":645,"depth":961,"text":646},{"id":840,"depth":961,"text":841},{},"md",{},{"title":106,"description":452},"AHJYBjbrDnupbjMmA0PbthdIsdwuJCaPQVEX7-Cz-zw",[972,973],{"title":102,"path":103,"stem":104,"children":-1},{"title":110,"path":111,"stem":112,"children":-1},1789777548101]