{"id":"27922358-cfc0-4b19-9ef7-90c182b53894","shortId":"LyrTxn","kind":"skill","title":"openspec-ultra-bridge","tagline":"Bridge OpenSpec change artifacts into Ultra-Orchestrator execution artifacts. Use when a repo follows OpenSpec for proposal, design, tasks, and archive, but execution should remain controlled by Ultra-Orchestrator through TaskManifest, WorkPackage, review, QA, risk gates, and led","description":"# OpenSpec Ultra Bridge\n\nTreat OpenSpec as the spec source-of-truth and Ultra-Orchestrator as the execution control plane.\n\nThis bridge is part of the mainline strict control plane. It is normally\ninvoked by `$ultra-orchestrator`; users should not need to call it manually.\n\n## Priority\n\nAbsorb OpenSpec advantages without weakening the existing Ultra-Orchestrator architecture.\n\nPrioritize these four advantages first:\n\n1. Persistent spec assets\n2. Change-based workflow\n3. Archive discipline\n4. Spec-first task decomposition input\n\nDo not let this bridge replace Ultra's state machine, review, QA, risk vetter, safety guard, or execution ledger ownership.\n\n## Purpose\n\nUse this skill to translate between:\n\n- OpenSpec change artifacts\n- Ultra-Orchestrator execution artifacts\n\nThe bridge must not replace OpenSpec. It must map OpenSpec artifacts into Ultra execution objects and map Ultra review and QA feedback back into OpenSpec update suggestions.\n\n## Inputs\n\nExpect one or more of these OpenSpec artifacts:\n\n- `proposal.md`\n- `design.md`\n- `tasks.md`\n- spec delta artifacts\n- change metadata such as `change-id`\n\nOptionally consume these Ultra-side artifacts:\n\n- `TaskManifest`\n- `WorkPackage`\n- `AgentResult`\n- `RunOutput`\n- `ExecutionLedger` summary\n\n## Produce\n\nGenerate these Ultra-side artifacts when possible:\n\n- `TaskManifest`\n- `WorkPackage`\n- `change-id <-> task-id` mapping notes\n- archive gate readiness notes\n\nGenerate these OpenSpec-side feedback outputs when possible:\n\n- task refinement suggestions\n- design update suggestions\n- failure-context updates\n- archive blocking reasons\n\n## Mapping rules\n\n- Map `change-id` to `TaskManifest.id`.\n- Map proposal summary to `goal`.\n- Map design constraints to `constraints`.\n- Map OpenSpec task dependencies to `dependencies`.\n- Map task acceptance criteria or spec delta checks to `success_criteria` and `acceptance_checks`.\n- Map affected components or files to `owned_paths`.\n\n## Orchestration rules\n\n- Preserve OpenSpec as the spec source-of-truth.\n- Preserve Ultra-Orchestrator as the orchestration source-of-truth.\n- Do not rewrite OpenSpec artifacts into Ultra-native storage unless the user explicitly asks for that migration.\n- Prefer artifact-driven handoff over conversation-history handoff.\n- Treat archive as gated by Ultra review, QA, and risk decisions.\n- Use OpenSpec as a higher-quality frontend for planning, not as a replacement for dispatch, review, or QA.\n\n## Worktree guidance\n\nWhen Git Worktree is used:\n\n- Prefer one OpenSpec change per worktree.\n- Record worktree path in run metadata.\n- Use owned-path rules and active write locks before parallel execution.\n\n## Pilot guidance\n\nWhen validating this bridge on a real project such as `/teammate`:\n\n- Start with one change at a time.\n- Prefer one feature task, one bug-fix task, and one task that forces a review or QA loopback.\n- Judge success by bridge stability, not by feature count.\n\n## Change and slice contract\n\nThis bridge must preserve a strict division:\n\n- OpenSpec `change` = specification source-of-truth and long-lived progress node\n- Ultra `slice` = execution source-of-truth for implementation progress inside a change\n\nDo not collapse them into one concept.\n\nWhen bridging, always make the current slice explicit for the selected change.\n\n## Required change scaffold\n\nFor every newly opened change, initialize at minimum:\n\n- `proposal.md`\n- `design.md`\n- `tasks.md`\n- `ultra-bridge.md`\n\nThe initial bridge status should default to:\n\n- `slice_0_spec_ready` if the change is opened and ready for implementation\n- `slice_0_not_opened` only for program-level ledgers or unopened planned changes\n\n## Required ultra-bridge fields\n\nEach `ultra-bridge.md` should include or imply:\n\n- `change_id`\n- `milestone`\n- `status`\n- `task_manifest_focus`\n- `work_package_scope`\n- `next_slice`\n\nIf a field is not known yet, write the narrowest truthful placeholder rather than omitting slice status.\n\n## Status synchronization\n\nAfter each completed slice, the bridge should push status intent back into OpenSpec-facing artifacts:\n\n- update `ultra-bridge.md` status\n- update `tasks.md` task checks when implementation actually landed\n- suggest roadmap or current-status tally changes when opened/unopened counts changed\n\nDo not treat conversation text as an acceptable substitute for status synchronization.\n\n## Strict-mode output\n\nWhen the run mode is `STRICT_OPENSPEC`, produce or hand off:\n\n- JSON-ready `TaskManifest`\n- JSON-ready `WorkPackage` set\n- change-to-task mapping\n- current slice status\n- next slice\n- owned paths for the active slice\n- review and QA targets\n- archive or status-sync blockers\n\n## Batch initialization mode\n\nWhen a program has many unopened planned changes, the bridge may be used to:\n\n1. enumerate all planned changes\n2. classify them as `opened` or `unopened`\n3. create missing change skeletons in batches\n4. stamp each opened change with an initial slice status\n\nThis is the preferred way to normalize a long-running program before large implementation waves.\n\n## Efficiency feedback loop\n\nWhen a single change is used as a trial run, the bridge should also emit:\n\n- whether the change size was appropriate\n- whether the owned-path scope was narrow enough\n- what friction came from spec mapping versus implementation\n- what should be added back into the bridge workflow template\n\nUse this to improve bridge stability over time rather than treating every change as isolated.\n\n## Read references on demand\n\n- `references/mapping.md` for detailed field mapping\n- `references/workflow.md` for end-to-end fused workflow\n- `references/archive-gate.md` for archive readiness conditions\n- `references/adoption-priorities.md` for what to absorb first from OpenSpec\n- `references/teammate-pilot.md` for pilot acceptance on `/teammate`","tags":["openspec","ultra","bridge","orchestration","keithhegit","agent-skills","orchestration-framework","spec-coding","spec-driven-development"],"capabilities":["skill","source-keithhegit","skill-openspec-ultra-bridge","topic-agent-skills","topic-orchestration-framework","topic-spec-coding","topic-spec-driven-development"],"categories":["ultra-orchestration"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/keithhegit/ultra-orchestration/openspec-ultra-bridge","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add keithhegit/ultra-orchestration","source_repo":"https://github.com/keithhegit/ultra-orchestration","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (5,788 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:38.879Z","embedding":null,"createdAt":"2026-05-18T13:22:04.576Z","updatedAt":"2026-05-18T19:14:38.879Z","lastSeenAt":"2026-05-18T19:14:38.879Z","tsv":"'/teammate':439,886 '0':554,567 '1':109,740 '2':113,745 '3':118,752 '4':121,759 'absorb':93,877 'accept':296,306,668,884 'activ':421,711 'actual':647 'ad':829 'advantag':95,107 'affect':309 'agentresult':221 'also':801 'alway':521 'appropri':808 'architectur':103 'archiv':26,119,244,267,367,717,870 'artifact':8,14,157,162,173,198,204,218,231,342,358,637 'artifact-driven':357 'ask':352 'asset':112 'back':185,632,830 'base':116 'batch':723,758 'block':268 'blocker':722 'bridg':4,5,47,67,132,164,432,469,480,520,548,583,627,735,799,833,840 'bug':453 'bug-fix':452 'call':89 'came':820 'chang':7,115,156,205,210,237,274,406,443,475,487,511,530,532,538,559,579,591,656,660,698,733,744,755,763,791,805,848 'change-bas':114 'change-id':209,236,273 'change-to-task':697 'check':301,307,644 'classifi':746 'collaps':514 'complet':624 'compon':310 'concept':518 'condit':872 'constraint':285,287 'consum':213 'context':265 'contract':478 'control':31,64,74 'convers':363,664 'conversation-histori':362 'count':474,659 'creat':753 'criteria':297,304 'current':524,653,702 'current-status':652 'decis':376 'decomposit':126 'default':551 'delta':203,300 'demand':854 'depend':291,293 'design':23,260,284 'design.md':200,543 'detail':857 'disciplin':120 'dispatch':392 'divis':485 'driven':359 'effici':785 'emit':802 'end':863,865 'end-to-end':862 'enough':817 'enumer':741 'everi':535,847 'execut':13,28,63,145,161,176,426,501 'executionledg':223 'exist':99 'expect':191 'explicit':351,526 'face':636 'failur':264 'failure-context':263 'featur':449,473 'feedback':184,253,786 'field':584,605,858 'file':312 'first':108,124,878 'fix':454 'focus':597 'follow':19 'forc':460 'four':106 'friction':819 'frontend':384 'fuse':866 'gate':42,245,369 'generat':226,248 'git':399 'goal':282 'guard':143 'guidanc':397,428 'hand':686 'handoff':360,365 'higher':382 'higher-qu':381 'histori':364 'id':211,238,241,275,592 'implement':507,565,646,783,825 'impli':590 'improv':839 'includ':588 'initi':539,547,724,766 'input':127,190 'insid':509 'intent':631 'invok':79 'isol':850 'json':689,693 'json-readi':688,692 'judg':466 'known':608 'land':648 'larg':782 'led':44 'ledger':146,575 'let':130 'level':574 'live':496 'lock':423 'long':495,778 'long-liv':494 'long-run':777 'loop':787 'loopback':465 'machin':137 'mainlin':72 'make':522 'mani':730 'manifest':596 'manual':91 'map':171,179,242,270,272,278,283,288,294,308,701,823,859 'may':736 'metadata':206,414 'migrat':355 'mileston':593 'minimum':541 'miss':754 'mode':675,680,725 'must':165,170,481 'narrow':816 'narrowest':612 'nativ':346 'need':87 'newli':536 'next':601,705 'node':498 'normal':78,775 'note':243,247 'object':177 'omit':617 'one':192,404,442,448,451,457,517 'open':537,561,569,749,762 'opened/unopened':658 'openspec':2,6,20,45,49,94,155,168,172,187,197,251,289,319,341,378,405,486,635,683,880 'openspec-fac':634 'openspec-sid':250 'openspec-ultra-bridg':1 'option':212 'orchestr':12,35,60,83,102,160,316,330,333 'output':254,676 'own':314,417,707,812 'owned-path':416,811 'ownership':147 'packag':599 'parallel':425 'part':69 'path':315,411,418,708,813 'per':407 'persist':110 'pilot':427,883 'placehold':614 'plan':386,578,732,743 'plane':65,75 'possibl':233,256 'prefer':356,403,447,772 'preserv':318,327,482 'priorit':104 'prioriti':92 'produc':225,684 'program':573,728,780 'program-level':572 'progress':497,508 'project':436 'propos':22,279 'proposal.md':199,542 'purpos':148 'push':629 'qa':40,139,183,373,395,464,715 'qualiti':383 'rather':615,844 'read':851 'readi':246,556,563,690,694,871 'real':435 'reason':269 'record':409 'refer':852 'references/adoption-priorities.md':873 'references/archive-gate.md':868 'references/mapping.md':855 'references/teammate-pilot.md':881 'references/workflow.md':860 'refin':258 'remain':30 'replac':133,167,390 'repo':18 'requir':531,580 'review':39,138,181,372,393,462,713 'rewrit':340 'risk':41,140,375 'roadmap':650 'rule':271,317,419 'run':413,679,779,797 'runoutput':222 'safeti':142 'scaffold':533 'scope':600,814 'select':529 'set':696 'side':217,230,252 'singl':790 'size':806 'skeleton':756 'skill':151 'skill-openspec-ultra-bridge' 'slice':477,500,525,553,566,602,618,625,703,706,712,767 'sourc':54,324,335,490,503 'source-keithhegit' 'source-of-truth':53,323,334,489,502 'spec':52,111,123,202,299,322,555,822 'spec-first':122 'specif':488 'stabil':470,841 'stamp':760 'start':440 'state':136 'status':549,594,619,620,630,640,654,671,704,720,768 'status-sync':719 'storag':347 'strict':73,484,674,682 'strict-mod':673 'substitut':669 'success':303,467 'suggest':189,259,262,649 'summari':224,280 'sync':721 'synchron':621,672 'talli':655 'target':716 'task':24,125,240,257,290,295,450,455,458,595,643,700 'task-id':239 'taskmanifest':37,219,234,691 'taskmanifest.id':277 'tasks.md':201,544,642 'templat':835 'text':665 'time':446,843 'topic-agent-skills' 'topic-orchestration-framework' 'topic-spec-coding' 'topic-spec-driven-development' 'translat':153 'treat':48,366,663,846 'trial':796 'truth':56,326,337,492,505,613 'ultra':3,11,34,46,59,82,101,134,159,175,180,216,229,329,345,371,499,582 'ultra-bridg':581 'ultra-bridge.md':545,586,639 'ultra-n':344 'ultra-orchestr':10,33,58,81,100,158,328 'ultra-sid':215,228 'unless':348 'unopen':577,731,751 'updat':188,261,266,638,641 'use':15,149,377,402,415,738,793,836 'user':84,350 'valid':430 'versus':824 'vetter':141 'wave':784 'way':773 'weaken':97 'whether':803,809 'without':96 'work':598 'workflow':117,834,867 'workpackag':38,220,235,695 'worktre':396,400,408,410 'write':422,610 'yet':609","prices":[{"id":"b55d8873-691f-40f9-bf1f-1d52bff68063","listingId":"27922358-cfc0-4b19-9ef7-90c182b53894","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"keithhegit","category":"ultra-orchestration","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:04.576Z"}],"sources":[{"listingId":"27922358-cfc0-4b19-9ef7-90c182b53894","source":"github","sourceId":"keithhegit/ultra-orchestration/openspec-ultra-bridge","sourceUrl":"https://github.com/keithhegit/ultra-orchestration/tree/main/skills/openspec-ultra-bridge","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:04.576Z","lastSeenAt":"2026-05-18T19:14:38.879Z"}],"details":{"listingId":"27922358-cfc0-4b19-9ef7-90c182b53894","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"keithhegit","slug":"openspec-ultra-bridge","github":{"repo":"keithhegit/ultra-orchestration","stars":6,"topics":["agent-skills","orchestration-framework","spec-coding","spec-driven-development"],"license":"apache-2.0","html_url":"https://github.com/keithhegit/ultra-orchestration","pushed_at":"2026-04-25T14:21:59Z","description":"Ultra Orchestration 是一套开源的 AI 工程编排技能体系。它将 OpenSpec 规格主线（Program → Milestone → Change → Slice）与 Ultra-Orchestrator 执行阶段（Intake → Plan → Dispatch → Execute → Review → QA → Deliver → Retro）结合，提升交付稳定性与可审计性。","skill_md_sha":"2bf61198b8412bad04e4a1ae8348b3c7b833c1f9","skill_md_path":"skills/openspec-ultra-bridge/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/keithhegit/ultra-orchestration/tree/main/skills/openspec-ultra-bridge"},"layout":"multi","source":"github","category":"ultra-orchestration","frontmatter":{"name":"openspec-ultra-bridge","description":"Bridge OpenSpec change artifacts into Ultra-Orchestrator execution artifacts. Use when a repo follows OpenSpec for proposal, design, tasks, and archive, but execution should remain controlled by Ultra-Orchestrator through TaskManifest, WorkPackage, review, QA, risk gates, and ledger-based orchestration."},"skills_sh_url":"https://skills.sh/keithhegit/ultra-orchestration/openspec-ultra-bridge"},"updatedAt":"2026-05-18T19:14:38.879Z"}}