@hybridlabor-api/aos 4.13.2 → 4.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.agents/AGENTS.md +8 -0
  2. package/.agents/nodes.json +5 -2
  3. package/.claude/hooks/conventional-commits.mjs +14 -15
  4. package/.claude/hooks/env-file-protection.mjs +14 -15
  5. package/.claude/hooks/go-gate.mjs +152 -10
  6. package/.claude/hooks/go-token.mjs +55 -0
  7. package/.claude/hooks/memb-inject.mjs +75 -62
  8. package/.claude/hooks/trail-autostart.mjs +27 -0
  9. package/.claude/settings.json +18 -0
  10. package/.claude/workflows/startcycle-dispatch.mjs +11 -4
  11. package/.opencode/plugins/bdb-aos.js +98 -121
  12. package/.opencode/plugins/lib/trail-autostart.js +38 -0
  13. package/CLAUDE.md +1 -1
  14. package/README.de.md +6 -6
  15. package/README.md +6 -6
  16. package/README.pt.md +6 -6
  17. package/THIRD_PARTY_NOTICES.md +19 -3
  18. package/assets/header-v5.png +0 -0
  19. package/bin/aos-acp.mjs +211 -0
  20. package/bin/aos-doctor.mjs +1 -1
  21. package/bin/aos-uninstall.mjs +2 -2
  22. package/docs/master-session-acp.md +51 -0
  23. package/installer.js +252 -35
  24. package/mcps/mcsc/packages/mcp/server.js +6 -7
  25. package/package.json +4 -3
  26. package/scripts/validate-skills.mjs +76 -0
  27. package/skills/basic/bdbmediastorm/SKILL.md +1 -1
  28. package/skills/basic/godmode-shipping/SKILL.md +3 -0
  29. package/skills/basic/master-session/SKILL.md +89 -0
  30. package/skills/basic/startcycle/SKILL.md +1 -1
  31. package/skills/basic/startcycle-graph/SKILL.md +2 -2
  32. package/skills/basic/startcycle-graph-user/SKILL.md +1 -1
  33. package/skills/basic/teamwork-preview/SKILL.md +1 -1
  34. package/skills/bdbrainstorm/SKILL.md +7 -1
  35. package/skills/global_config/agentic-harness-patterns/SKILL.md +257 -0
  36. package/skills/global_config/agentic-harness-patterns/metadata.json +10 -0
  37. package/skills/global_config/agentic-harness-patterns/references/agent-orchestration-pattern.md +97 -0
  38. package/skills/global_config/agentic-harness-patterns/references/bootstrap-sequence-pattern.md +106 -0
  39. package/skills/global_config/agentic-harness-patterns/references/context-engineering/compress-pattern.md +78 -0
  40. package/skills/global_config/agentic-harness-patterns/references/context-engineering/isolate-pattern.md +82 -0
  41. package/skills/global_config/agentic-harness-patterns/references/context-engineering/select-pattern.md +86 -0
  42. package/skills/global_config/agentic-harness-patterns/references/context-engineering-pattern.md +29 -0
  43. package/skills/global_config/agentic-harness-patterns/references/hook-lifecycle-pattern.md +111 -0
  44. package/skills/global_config/agentic-harness-patterns/references/memory-persistence-pattern.md +109 -0
  45. package/skills/global_config/agentic-harness-patterns/references/permission-gate-pattern.md +111 -0
  46. package/skills/global_config/agentic-harness-patterns/references/skill-runtime-pattern.md +104 -0
  47. package/skills/global_config/agentic-harness-patterns/references/task-decomposition-pattern.md +92 -0
  48. package/skills/global_config/agentic-harness-patterns/references/tool-registry-pattern.md +101 -0
  49. package/skills/global_config/agenttrail/SKILL.md +8 -0
  50. package/skills/global_config/agenttrail/bin/agenttrail.mjs +14 -0
  51. package/skills/global_config/agenttrail/bin/ensure.mjs +118 -0
  52. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
  53. package/skills/global_config/bdb-visual-edit/SKILL.md +51 -0
  54. package/skills/global_config/bdb-visual-edit/references/vite-react-source-attr.md +59 -0
  55. package/skills/global_config/bdb-visual-edit/scripts/pick-snippet.js +27 -0
  56. package/skills/global_config/bdb-visual-edit/scripts/sanitize-element.mjs +123 -0
  57. package/skills/global_config/factory-collect/SKILL.md +74 -0
  58. package/skills/global_config/factory-human-digest/SKILL.md +92 -0
  59. package/skills/global_config/factory-lookback/SKILL.md +95 -0
  60. package/skills/global_config/factory-review-prs/SKILL.md +63 -0
  61. package/skills/global_config/git-pr-review/SKILL.md +3 -0
  62. package/skills/global_config/grilling/SKILL.md +2 -0
  63. package/skills/global_config/mcsc/SKILL.md +1 -1
  64. package/skills/global_config/plan-arbiter/SKILL.md +125 -0
  65. package/skills/global_config/plan-canvas/SKILL.md +62 -5
  66. package/skills/global_config/plan-canvas/scripts/lib/loopback-guard.js +19 -3
  67. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/README.md +285 -0
  68. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/agent-trail.js +129 -0
  69. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/board-client.js +124 -0
  70. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/demo-plan/canvas.mdx +19 -0
  71. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/demo-plan/plan.mdx +18 -0
  72. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/recap-demo/plan.mdx +72 -0
  73. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/README.md +29 -0
  74. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/architecture.json +30 -0
  75. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/00_architecture.html +14950 -0
  76. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/canvas.mdx +511 -0
  77. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/plan.mdx +208 -0
  78. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/recap/plan.mdx +102 -0
  79. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/standard/plan.md +136 -0
  80. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/signup-storyboard/canvas.mdx +124 -0
  81. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/signup-storyboard/plan.mdx +37 -0
  82. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/index.js +188 -0
  83. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/kit.js +123 -0
  84. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/mdx.js +411 -0
  85. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/render.js +1291 -0
  86. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/meta.json +1 -0
  87. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/plan.mdx +195 -0
  88. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/standard.md +95 -0
  89. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/meta.json +1 -0
  90. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/plan.mdx +105 -0
  91. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/standard.md +76 -0
  92. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/canvas.mdx +81 -0
  93. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/meta.json +1 -0
  94. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/plan.mdx +145 -0
  95. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/standard.md +76 -0
  96. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/meta.json +1 -0
  97. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/plan.mdx +172 -0
  98. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/standard.md +100 -0
  99. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/meta.json +1 -0
  100. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/plan.mdx +67 -0
  101. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/standard.md +49 -0
  102. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/canvas.mdx +63 -0
  103. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/meta.json +1 -0
  104. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/plan.mdx +49 -0
  105. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/standard.md +39 -0
  106. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/meta.json +1 -0
  107. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/plan.mdx +118 -0
  108. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/standard.md +57 -0
  109. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/meta.json +1 -0
  110. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/plan.mdx +173 -0
  111. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/standard.md +96 -0
  112. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/meta.json +1 -0
  113. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/plan.mdx +91 -0
  114. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/standard.md +54 -0
  115. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/canvas.mdx +53 -0
  116. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/meta.json +1 -0
  117. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/plan.mdx +225 -0
  118. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/standard.md +111 -0
  119. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/theme.css +472 -0
  120. package/skills/global_config/plan-canvas/scripts/lib/plan-builder/trail.js +216 -0
  121. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/markdown.js +1 -1
  122. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/server.js +37 -4
  123. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +125 -29
  124. package/skills/global_config/plan-canvas/scripts/plan-canvas.js +196 -8
  125. package/skills/global_config/pr-recap/SKILL.md +47 -0
  126. package/skills/global_config/pr-recap/scripts/pr-recap.mjs +200 -0
  127. package/skills/global_config/quick-recap/SKILL.md +55 -0
  128. package/skills/global_config/stay-within-limits/SKILL.md +85 -0
  129. package/skills/global_config/triage/SKILL.md +3 -0
  130. package/skills/global_config/visual-edit/README.md +96 -0
  131. package/skills/global_config/visual-edit/SKILL.md +615 -0
  132. package/skills/global_config/visual-plan/README.md +93 -0
  133. package/skills/global_config/visual-plan/SKILL.md +544 -0
  134. package/skills/global_config/visual-plan/references/canvas.md +139 -0
  135. package/skills/global_config/visual-plan/references/connection.md +51 -0
  136. package/skills/global_config/visual-plan/references/document-quality.md +186 -0
  137. package/skills/global_config/visual-plan/references/exemplar.md +62 -0
  138. package/skills/global_config/visual-plan/references/local-files.md +99 -0
  139. package/skills/global_config/visual-plan/references/wireframe.md +319 -0
  140. package/skills/global_config/visual-recap/README.md +103 -0
  141. package/skills/global_config/visual-recap/SKILL.md +560 -0
  142. package/skills/global_config/visual-recap/references/connection.md +51 -0
  143. package/skills/global_config/visual-recap/references/local-files.md +99 -0
  144. package/skills/global_config/visual-recap/references/wireframe.md +319 -0
  145. package/skills/playbooks/pb-ci-fix/SKILL.md +49 -0
  146. package/skills/playbooks/pb-event-tracker/SKILL.md +45 -0
  147. package/skills/playbooks/pb-meeting-actions/SKILL.md +42 -0
  148. package/skills/playbooks/pb-project-new/SKILL.md +48 -0
  149. package/skills/playbooks/pb-week-plan/SKILL.md +45 -0
  150. package/assets/header-v4.jpg +0 -0
@@ -0,0 +1,91 @@
1
+ ---
2
+ title: Queue choice for Lanternfish exports
3
+ status: draft
4
+ ---
5
+
6
+ # Queue choice for Lanternfish exports
7
+
8
+ <Callout tone="note" title="How to use this template">
9
+
10
+ Replace the Lanternfish example with your own question: rewrite the question and constraints, edit the options in Compare and Decision, replace the evidence rows with what you actually measured or read (keep a source per row), and state your own recommendation. Delete sections you do not need. All names and numbers here are invented.
11
+
12
+ </Callout>
13
+
14
+ ## Question
15
+
16
+ Lanternfish is a fictional reporting service. Exports of large reports currently run inside the web request and time out for about 4 percent of customers. Which mechanism should run exports in the background?
17
+
18
+ **Constraints**
19
+
20
+ - Ship within one quarter with a team of three.
21
+ - No new managed service that needs an on-call rotation.
22
+ - Failed exports must be retried and visible to the customer.
23
+
24
+ ## Options
25
+
26
+ <Compare beforeLabel="Option A: database-backed queue" afterLabel="Option B: managed message broker">
27
+ <Before>
28
+
29
+ Jobs live in a table in the existing Postgres database; workers poll with row locks.
30
+
31
+ - Zero new infrastructure.
32
+ - Throughput tops out around a few hundred jobs per minute.
33
+ - Retries and dead jobs are plain SQL.
34
+
35
+ </Before>
36
+ <After>
37
+
38
+ Jobs are published to a hosted broker; workers subscribe.
39
+
40
+ - Scales far beyond current need.
41
+ - Adds a service, credentials and a monthly bill.
42
+ - Retries and dead letters come from the broker.
43
+
44
+ </After>
45
+ </Compare>
46
+
47
+ ## Evidence
48
+
49
+ <Table title="What we found" columns={["Claim", "Source", "Confidence", "Effect on the decision"]} rows={[
50
+ ["Peak load is 40 exports per minute", "Request log sample, last 30 days", "High", "Both options are fast enough"],
51
+ ["A table queue handled 300 jobs per minute in a spike test", "Local benchmark, 10 minute run", "Medium", "Option A has 7x headroom"],
52
+ ["Broker setup needs about 6 engineer days", "Team estimate", "Low", "Option B costs a sprint of the quarter"],
53
+ ["Managed broker costs about 90 EUR per month", "Vendor price page, invented", "Medium", "Small, but adds a vendor to review"],
54
+ ["Customers care about progress, not speed", "Five support tickets", "Low", "A status page matters more than the queue"],
55
+ ]} />
56
+
57
+ ## Recommendation
58
+
59
+ <Decision title="Which queue" question="Which mechanism should run Lanternfish exports?" options={[
60
+ { id: "table", label: "Database-backed queue", detail: "Fits current load with 7x headroom and needs no new service.", recommended: true },
61
+ { id: "broker", label: "Managed message broker", detail: "Better long-term ceiling, but costs a sprint and a vendor today." },
62
+ ]}>
63
+
64
+ Start with the table queue behind a small interface (`enqueue`, `claim`, `complete`, `fail`). If sustained load passes 150 jobs per minute, swap the implementation for a broker without touching callers.
65
+
66
+ </Decision>
67
+
68
+ <Callout tone="warn" title="Risks">
69
+
70
+ Polling workers can hold row locks too long if a job hangs; set a claim timeout of 10 minutes. The benchmark ran on a laptop, so repeat it on staging before relying on the headroom figure.
71
+
72
+ </Callout>
73
+
74
+ ## Open questions
75
+
76
+ <QuestionForm title="Open questions" questions={[
77
+ { title: "Should failed exports email the customer or only show in the app?", mode: "single", options: [
78
+ { label: "Show in the app only", recommended: true },
79
+ { label: "Also send an email" },
80
+ ] },
81
+ { title: "How long are finished export files kept?", mode: "single", options: [
82
+ { label: "7 days", recommended: true },
83
+ { label: "30 days" },
84
+ ] },
85
+ ]} />
86
+
87
+ <Checklist title="Before deciding">
88
+ - [ ] Repeat the benchmark on staging
89
+ - [ ] Confirm the 40 per minute peak with last month's logs
90
+ - [ ] Agree the interface for enqueue, claim, complete and fail
91
+ </Checklist>
@@ -0,0 +1,54 @@
1
+ # Queue choice for Lanternfish exports
2
+
3
+ > Invented example. Replace the question, options, evidence and recommendation with your own.
4
+
5
+ **Status:** draft
6
+
7
+ ## Question
8
+
9
+ Lanternfish is a fictional reporting service. Exports of large reports run inside the web request and time out for about 4 percent of customers. Which mechanism should run exports in the background?
10
+
11
+ **Constraints**
12
+
13
+ - Ship within one quarter with a team of three.
14
+ - No new managed service that needs an on-call rotation.
15
+ - Failed exports must be retried and visible to the customer.
16
+
17
+ ## Options
18
+
19
+ | Option | Summary | Upside | Downside |
20
+ |--------|---------|--------|----------|
21
+ | A: database-backed queue | Jobs in a Postgres table, workers poll with row locks | No new infrastructure, retries are plain SQL | Tops out around a few hundred jobs per minute |
22
+ | B: managed message broker | Jobs published to a hosted broker | Scales far beyond current need | New service, credentials and monthly bill |
23
+
24
+ ```mermaid
25
+ flowchart LR
26
+ Q[Export request] --> A[Option A: table queue]
27
+ Q --> B[Option B: managed broker]
28
+ A --> W[Worker]
29
+ B --> W
30
+ W --> F[Export file]
31
+ ```
32
+
33
+ ## Evidence
34
+
35
+ | Claim | Source | Confidence | Effect on the decision |
36
+ |-------|--------|------------|------------------------|
37
+ | Peak load is 40 exports per minute | Request log sample, last 30 days | High | Both options are fast enough |
38
+ | A table queue handled 300 jobs per minute in a spike test | Local benchmark, 10 minute run | Medium | Option A has 7x headroom |
39
+ | Broker setup needs about 6 engineer days | Team estimate | Low | Option B costs a sprint of the quarter |
40
+ | Managed broker costs about 90 EUR per month | Vendor price page, invented | Medium | Small, but adds a vendor to review |
41
+ | Customers care about progress, not speed | Five support tickets | Low | A status page matters more than the queue |
42
+
43
+ ## Recommendation
44
+
45
+ **Option A, the database-backed queue.** It fits current load with 7x headroom and needs no new service. Put it behind a small interface (`enqueue`, `claim`, `complete`, `fail`) and swap in a broker if sustained load passes 150 jobs per minute.
46
+
47
+ **Risks:** polling workers can hold row locks too long if a job hangs (use a 10 minute claim timeout); the benchmark ran on a laptop and must be repeated on staging.
48
+
49
+ ## Open questions
50
+
51
+ - [ ] Should failed exports email the customer or only show in the app? (recommended: app only)
52
+ - [ ] How long are finished export files kept? (recommended: 7 days)
53
+ - [ ] Repeat the benchmark on staging
54
+ - [ ] Confirm the 40 per minute peak with last month's logs
@@ -0,0 +1,53 @@
1
+ <DesignBoard title="Tidewater Night - stage and rack layout" version={1} transitions={[
2
+ { from: "foh", to: "rack", label: "fibre, 2 x 1G" },
3
+ { from: "rack", to: "stage", label: "DMX / sACN, video" },
4
+ { from: "foh", to: "video", label: "NDI and SDI" },
5
+ { from: "video", to: "stage", label: "LED wall feed" },
6
+ ]}>
7
+ <Section title="1 Layout" subtitle="Low-fidelity plan view. Positions are indicative, not a rigging drawing.">
8
+ <Artboard id="foh" label="FOH position" surface="web" x={60} y={120} width={360} height={260} order={1}>
9
+ <Screen surface="web" caption="Audio desk, lighting console and show laptop.">
10
+ <FrameScreen>
11
+ <Title text="Front of house" />
12
+ <Row>
13
+ <Box><Text value="Lighting console" weight="bold" /><Lines n={2} widths={[80,50]} /></Box>
14
+ <Box><Text value="Audio desk" weight="bold" /><Lines n={2} widths={[70,45]} /></Box>
15
+ </Row>
16
+ <Box dashed><Text value="Show laptop: timecode master, backup on UPS" tone="muted" /></Box>
17
+ </FrameScreen>
18
+ </Screen>
19
+ </Artboard>
20
+ <Artboard id="rack" label="Stage-left rack" surface="web" x={520} y={120} width={360} height={260} order={2}>
21
+ <Screen surface="web" caption="Network, DMX and power distribution.">
22
+ <FrameScreen>
23
+ <Title text="Rack A (12U)" />
24
+ <Box><Text value="Switch, VLAN 10 control, VLAN 20 video" /></Box>
25
+ <Box><Text value="Node 1 universes 1-4, Node 2 universes 5-8" /></Box>
26
+ <Chips items={[{"label":"UPS 1500 VA","active":true},{"label":"Spare node"}]} />
27
+ </FrameScreen>
28
+ </Screen>
29
+ </Artboard>
30
+ <Artboard id="video" label="Video position" surface="web" x={60} y={460} width={360} height={240} order={3}>
31
+ <Screen surface="web" caption="Media server and signal conversion.">
32
+ <FrameScreen>
33
+ <Title text="Video booth" />
34
+ <Box><Text value="Media server A (live)" weight="bold" /><Lines n={1} widths={[60]} /></Box>
35
+ <Box dashed><Text value="Media server B (hot standby, mirrored)" tone="muted" /></Box>
36
+ </FrameScreen>
37
+ </Screen>
38
+ </Artboard>
39
+ <Artboard id="stage" label="Stage" surface="web" x={520} y={460} width={360} height={240} order={4}>
40
+ <Screen surface="web" caption="Truss, LED wall and floor fixtures.">
41
+ <FrameScreen>
42
+ <Title text="Stage" />
43
+ <Row>
44
+ <Box><Text value="Truss 1: 12 spots, 8 washes" /></Box>
45
+ <Box><Text value="LED wall 6 x 3.5 m" /></Box>
46
+ </Row>
47
+ <Box dashed><Text value="Floor: 6 strobes, 4 haze units" tone="muted" /></Box>
48
+ </FrameScreen>
49
+ </Screen>
50
+ </Artboard>
51
+ </Section>
52
+ <Annotation targetId="rack" placement="right" title="Keep DMX runs under 100 m per line, use the spare node if a line fails." />
53
+ </DesignBoard>
@@ -0,0 +1 @@
1
+ {"id":"show-control","label":"Show control","description":"Live show technical plan with signal flow, cue list, patch and universe tables, failure plan and load-in checklist, plus a stage and rack layout board.","useWhen":"You plan the lighting, video, audio and network of a live show or event and need one reviewable technical document.","hasBoard":true}
@@ -0,0 +1,225 @@
1
+ ---
2
+ title: Tidewater Night - Show Control Plan
3
+ status: draft
4
+ needs-network: load-in
5
+ needs-lighting: network
6
+ needs-video: network
7
+ needs-audio: network
8
+ needs-programming: lighting, video, audio
9
+ needs-rehearsal: programming
10
+ ---
11
+
12
+ # Tidewater Night: Technical Plan for the Live Show
13
+
14
+ <Callout tone="note" title="How to use this template">
15
+
16
+ Replace the show, venue, fixture counts, universes and cues with your own. Keep the signal flow, the patch table, the cue list and the failure plan: crew reads these first. The board in the Canvas section is a rough plan view; redraw it for your stage. All names and numbers below are invented.
17
+
18
+ </Callout>
19
+
20
+ ## Goal
21
+
22
+ Run a 75 minute festival headline set with synchronised lighting, LED wall video and a two-person audio team, driven by one timecode source and with a defined fallback for every critical link.
23
+
24
+ - Show opens on timecode 01:00:00:00 and every cue is repeatable from any song start.
25
+ - A single failure in network, media or console never causes a full blackout.
26
+ - Load-in is done by 14:00, line check by 16:00, doors at 19:00.
27
+
28
+ ## Decision
29
+
30
+ <Decision title="Who is the timecode master?" question="Which device drives lighting and video cues?" options={[
31
+ { id: "audio", label: "Audio playback laptop, LTC out", detail: "Band tracks and cues share one clock, musicians can stop the show.", recommended: true },
32
+ { id: "lighting", label: "Lighting console internal clock", detail: "Simple, but video drifts if the console restarts." },
33
+ { id: "manual", label: "Manual GO from each operator", detail: "No single point of failure, but cues drift between departments." },
34
+ ]}>
35
+
36
+ LTC from the audio playback laptop is distributed to the console and the media server. Both fall back to their internal clocks if LTC drops, which is on the failure plan.
37
+
38
+ </Decision>
39
+
40
+ ## Signal flow
41
+
42
+ <Mermaid label="Control, video and audio signal flow" source={"flowchart LR\n PB[Audio playback laptop] -- LTC --> CON[Lighting console]\n PB -- LTC --> MSA[Media server A]\n PB -- LTC --> MSB[Media server B standby]\n PB -- audio --> DESK[Audio desk]\n CON -- sACN u1-8 --> SW[Network switch]\n SW --> N1[DMX node 1]\n SW --> N2[DMX node 2]\n N1 --> TR[Truss fixtures]\n N2 --> FL[Floor fixtures]\n MSA -- SDI --> PROC[LED processor]\n MSB -. SDI standby .-> PROC\n PROC --> WALL[LED wall]\n DESK --> PA[PA system]"} />
43
+
44
+ <Diagram label="Network layout" data={{
45
+ nodes: [
46
+ { id: "switch", label: "Core switch, 24 port", description: "Managed 24 port switch, 4 SFP+ uplinks, IGMP snooping on for sACN" },
47
+ { id: "console", label: "Lighting console, VLAN 10", description: "2.0.10.10 /24, one 1G port to the switch, sACN universes 1-8" },
48
+ { id: "nodes", label: "DMX nodes 1 and 2, VLAN 10", description: "2.0.10.21 and 2.0.10.22 /24, 4 DMX ports each, ports 3-4 on the switch" },
49
+ { id: "media", label: "Media servers A and B, VLAN 20", description: "2.0.20.11 and 2.0.20.12 /24, 10G fibre on SFP+ ports 23-24" },
50
+ ],
51
+ edges: [
52
+ { from: "console", to: "switch", label: "1G copper" },
53
+ { from: "switch", to: "nodes", label: "1G copper" },
54
+ { from: "media", to: "switch", label: "10G fibre" },
55
+ ],
56
+ }} />
57
+
58
+ ## Patch and universes
59
+
60
+ <Table title="Universe map (sACN)" columns={["Universe", "Node / port", "Fixtures", "Channels used", "Position"]} rows={[
61
+ ["1", "Node 1 / A", "12 moving spots", "384 of 512", "Truss 1"],
62
+ ["2", "Node 1 / B", "8 LED washes", "280 of 512", "Truss 1"],
63
+ ["3", "Node 1 / C", "6 strobes", "48 of 512", "Floor"],
64
+ ["4", "Node 1 / D", "Spare", "0", "Reserve"],
65
+ ["5", "Node 2 / A", "16 LED battens", "256 of 512", "Back truss"],
66
+ ["6", "Node 2 / B", "4 haze units, 2 fans", "24 of 512", "Floor"],
67
+ ["7-8", "Node 2 / C-D", "Pixel tape, 300 pixels", "900 of 1024", "Wall surround"],
68
+ ]} />
69
+
70
+ <DataModel entities={[
71
+ { name: "Fixture", fields: [
72
+ { name: "fixtureId", type: "int", note: "Console fixture number, unique" },
73
+ { name: "type", type: "string", note: "Spot, wash, strobe, batten, pixel" },
74
+ { name: "universe", type: "int", note: "sACN universe 1 to 8" },
75
+ { name: "address", type: "int", note: "DMX start address 1 to 512" },
76
+ { name: "mode", type: "string", note: "Personality, for example 24 channel" },
77
+ ] },
78
+ { name: "Cue", fields: [
79
+ { name: "cueNumber", type: "decimal", note: "Console cue, for example 12.5" },
80
+ { name: "timecode", type: "string", note: "HH:MM:SS:FF" },
81
+ { name: "department", type: "enum", note: "light, video, audio, fx" },
82
+ ] },
83
+ ]} />
84
+
85
+ ## Cue list
86
+
87
+ <Table title="Show cues (excerpt)" columns={["Cue", "Timecode", "Song / moment", "Lighting", "Video", "FX"]} rows={[
88
+ ["1", "01:00:00:00", "Intro tape", "Blackout then slow blue fade", "Wall: opening loop", "Haze on"],
89
+ ["10", "01:03:20:00", "Song 1 downbeat", "Full wash, spot chase", "Wall: live camera mix", "None"],
90
+ ["24", "01:18:45:12", "Song 4 drop", "Strobe burst 3 s", "Wall: white flash, then pattern", "CO2 jets"],
91
+ ["38", "01:41:10:00", "Ballad", "Warm amber, two followspots", "Wall: slow footage", "None"],
92
+ ["52", "02:02:00:00", "Encore break", "House half, wash low", "Wall: countdown", "Haze off"],
93
+ ["60", "02:15:00:00", "Closing", "Slow fade to black", "Wall: logo, then black", "None"],
94
+ ]} />
95
+
96
+ ## Build map
97
+
98
+ ### Load-in and rigging {#load-in}
99
+
100
+ <Checklist title="Load-in checklist" items={[
101
+ { label: "Truss hung, motors tested, safety signed off" },
102
+ { label: "Power distribution tested, earth and RCD checked" },
103
+ { label: "Rack A powered, UPS holding for 10 minutes" },
104
+ { label: "LED wall built, tiles counted and addressed" },
105
+ { label: "FOH cabling labelled and strain relieved" },
106
+ ]} />
107
+
108
+ <ImplementationMap files={[
109
+ { path: "venue/power-plan.pdf", change: "added", note: "Distribution and phase balance" },
110
+ { path: "venue/rigging-plan.pdf", change: "added", note: "Truss and motor loads" },
111
+ ]} />
112
+
113
+ ### Network {#network}
114
+
115
+ <Checklist title="Network tasks" items={[
116
+ { label: "VLAN 10 control and VLAN 20 video configured" },
117
+ { label: "Static addresses assigned and labelled on every device" },
118
+ { label: "sACN multicast limited to VLAN 10" },
119
+ { label: "Ping and bandwidth test between FOH and Rack A" },
120
+ ]} />
121
+
122
+ <ImplementationMap files={[
123
+ { path: "network/address-plan.csv", change: "added", note: "Device, address, VLAN, port" },
124
+ { path: "network/switch-config.txt", change: "added", note: "VLAN and multicast settings" },
125
+ ]} />
126
+
127
+ ### Lighting {#lighting}
128
+
129
+ <Checklist title="Lighting tasks" items={[
130
+ { label: "Patch fixtures to universes 1 to 8" },
131
+ { label: "Focus and colour check on every truss position" },
132
+ { label: "Program looks for all songs" },
133
+ ]} />
134
+
135
+ <ImplementationMap files={[
136
+ { path: "lighting/show-file-v3.show", change: "modified", note: "Patch, groups, palettes and cues" },
137
+ ]} />
138
+
139
+ ### Video {#video}
140
+
141
+ <Checklist title="Video tasks" items={[
142
+ { label: "Map LED wall to the media server canvas" },
143
+ { label: "Load content and verify frame rate at 50 fps" },
144
+ { label: "Mirror media server A to B and test the switch" },
145
+ ]} />
146
+
147
+ <ImplementationMap files={[
148
+ { path: "video/wall-map.json", change: "added", note: "Tile layout and processor settings" },
149
+ { path: "video/content/", change: "added", note: "Loops and song visuals, ProRes" },
150
+ ]} />
151
+
152
+ ### Audio and timecode {#audio}
153
+
154
+ <Checklist title="Audio tasks" items={[
155
+ { label: "Playback laptop outputs LTC on channel 8" },
156
+ { label: "Line check every input and monitor mix" },
157
+ { label: "Verify LTC arrives at console and both media servers" },
158
+ ]} />
159
+
160
+ <ImplementationMap files={[
161
+ { path: "audio/stage-plot.pdf", change: "added", note: "Inputs, monitors and stage layout" },
162
+ { path: "audio/playback-session.als", change: "added", note: "Tracks and LTC lane" },
163
+ ]} />
164
+
165
+ ### Programming and sync {#programming}
166
+
167
+ <Checklist title="Programming tasks" items={[
168
+ { label: "Import the cue list and attach timecode events" },
169
+ { label: "Run each song from the middle and from the start" },
170
+ { label: "Write the operator cheat sheet" },
171
+ ]} />
172
+
173
+ <ImplementationMap files={[
174
+ { path: "show/cue-list.csv", change: "added", note: "Single source for all departments" },
175
+ { path: "show/operator-notes.md", change: "added", note: "GO buttons, hold points and fallbacks" },
176
+ ]} />
177
+
178
+ ### Rehearsal and doors {#rehearsal}
179
+
180
+ <Checklist title="Rehearsal tasks" items={[
181
+ { label: "Full run with the band at 16:00" },
182
+ { label: "Failure drills: pull LTC, pull media server A, pull a DMX node" },
183
+ { label: "Final go from the production manager at 18:30" },
184
+ ]} />
185
+
186
+ ## Agent trail
187
+
188
+ <AgentTrail />
189
+
190
+ ## Failure and blackout plan
191
+
192
+ <Table title="Failure modes and responses" columns={["Failure", "Detected by", "Immediate response", "Recovery"]} rows={[
193
+ ["LTC lost", "Console timecode lamp, media server clock", "Both switch to internal clock, operators GO manually", "Re-sync at the next song start"],
194
+ ["Media server A fails", "Wall black or frozen", "Video operator flips to server B on the processor", "Reboot A, keep B live for the set"],
195
+ ["DMX node 1 fails", "Truss fixtures freeze", "Console outputs to spare node on universe 4 port", "Replace node during the next break"],
196
+ ["Network switch fails", "All sACN lost, fixtures hold last look", "Swap to the spare switch, config is on USB", "Verify addresses, resume"],
197
+ ["Power loss on stage", "Lights and wall dark", "Audio on UPS keeps playback, house lights on emergency circuit", "Hold the show until power is confirmed"],
198
+ ["Emergency stop", "Production manager call", "Console blackout, haze and CO2 off, house lights up", "No restart without a safety sign-off"],
199
+ ]} />
200
+
201
+ <Callout tone="warning" title="Blackout rule">
202
+
203
+ A deliberate blackout is a console cue (cue 1 and cue 60) and never a power switch. If any department calls "stop", all effects (strobe, CO2, haze) go off first, then lights fade to house. Only the production manager restarts the show.
204
+
205
+ </Callout>
206
+
207
+ ## Risks
208
+
209
+ <Table title="Risk register" columns={["Risk", "Likelihood", "Impact", "Mitigation"]} rows={[
210
+ ["Wireless interference from the neighbouring stage", "Medium", "High", "Frequency coordination, wired backups for key mics"],
211
+ ["Strobe bursts exceed the venue photosensitivity limit", "Low", "High", "Cap at 3 Hz, warning signs, approval in the safety plan"],
212
+ ["Rain reaches the front of house", "Medium", "Medium", "Covered FOH tent, cable ramps, tarp for the rack"],
213
+ ["Content delivered late", "Medium", "Medium", "Delivery deadline two days before, placeholder loops loaded"],
214
+ ]} />
215
+
216
+ ## Open questions
217
+
218
+ <QuestionForm title="Open Questions" questions={[
219
+ { title: "Do we run followspots from FOH or a side tower?", mode: "single", options: [
220
+ { label: "Side tower", recommended: true }, { label: "FOH" } ] },
221
+ { title: "Is a second haze unit allowed by the venue?", mode: "single", options: [
222
+ { label: "Yes, with smoke detector isolation", recommended: true }, { label: "No, one unit only" } ] },
223
+ { title: "Which extras do we want?", mode: "multi", options: [
224
+ { label: "Audience-facing blinders" }, { label: "Live camera on the wall" }, { label: "Wireless DMX backup" } ] },
225
+ ]} />
@@ -0,0 +1,111 @@
1
+ # Tidewater Night: Technical Plan for the Live Show
2
+
3
+ > Template guidance: replace the invented show, venue, fixture counts, universes and cues. Keep the signal flow, patch table, cue list and failure plan. All names and numbers are invented.
4
+
5
+ **Status:** draft
6
+
7
+ ## Goal
8
+
9
+ Run a 75 minute festival headline set with synchronised lighting, LED wall video and a two-person audio team, driven by one timecode source and with a defined fallback for every critical link.
10
+
11
+ - Show opens on timecode 01:00:00:00 and every cue is repeatable from any song start.
12
+ - A single failure in network, media or console never causes a full blackout.
13
+ - Load-in is done by 14:00, line check by 16:00, doors at 19:00.
14
+
15
+ ## Decision
16
+
17
+ | Question | Options | Recommendation | Why |
18
+ |---|---|---|---|
19
+ | Who is the timecode master? | Audio playback laptop (LTC) / console clock / manual GO | **Audio playback laptop, LTC out** | One clock for band tracks and cues; console and media server fall back to internal clocks if LTC drops |
20
+
21
+ ## Signal flow
22
+
23
+ ```mermaid
24
+ flowchart LR
25
+ PB[Audio playback laptop] -- LTC --> CON[Lighting console]
26
+ PB -- LTC --> MSA[Media server A]
27
+ PB -- LTC --> MSB[Media server B standby]
28
+ PB -- audio --> DESK[Audio desk]
29
+ CON -- sACN u1-8 --> SW[Network switch]
30
+ SW --> N1[DMX node 1]
31
+ SW --> N2[DMX node 2]
32
+ N1 --> TR[Truss fixtures]
33
+ N2 --> FL[Floor fixtures]
34
+ MSA -- SDI --> PROC[LED processor]
35
+ MSB -. SDI standby .-> PROC
36
+ PROC --> WALL[LED wall]
37
+ DESK --> PA[PA system]
38
+ ```
39
+
40
+ ## Patch and universes
41
+
42
+ | Universe | Node / port | Fixtures | Channels used | Position |
43
+ |---|---|---|---|---|
44
+ | 1 | Node 1 / A | 12 moving spots | 384 of 512 | Truss 1 |
45
+ | 2 | Node 1 / B | 8 LED washes | 280 of 512 | Truss 1 |
46
+ | 3 | Node 1 / C | 6 strobes | 48 of 512 | Floor |
47
+ | 4 | Node 1 / D | Spare | 0 | Reserve |
48
+ | 5 | Node 2 / A | 16 LED battens | 256 of 512 | Back truss |
49
+ | 6 | Node 2 / B | 4 haze units, 2 fans | 24 of 512 | Floor |
50
+ | 7-8 | Node 2 / C-D | Pixel tape, 300 pixels | 900 of 1024 | Wall surround |
51
+
52
+ ## Cue list (excerpt)
53
+
54
+ | Cue | Timecode | Song / moment | Lighting | Video | FX |
55
+ |---|---|---|---|---|---|
56
+ | 1 | 01:00:00:00 | Intro tape | Blackout then slow blue fade | Wall: opening loop | Haze on |
57
+ | 10 | 01:03:20:00 | Song 1 downbeat | Full wash, spot chase | Wall: live camera mix | None |
58
+ | 24 | 01:18:45:12 | Song 4 drop | Strobe burst 3 s | Wall: white flash, then pattern | CO2 jets |
59
+ | 38 | 01:41:10:00 | Ballad | Warm amber, two followspots | Wall: slow footage | None |
60
+ | 52 | 02:02:00:00 | Encore break | House half, wash low | Wall: countdown | Haze off |
61
+ | 60 | 02:15:00:00 | Closing | Slow fade to black | Wall: logo, then black | None |
62
+
63
+ ## Stage and rack layout
64
+
65
+ - **FOH:** lighting console, audio desk, show laptop (timecode master) on UPS.
66
+ - **Rack A, stage left:** switch (VLAN 10 control, VLAN 20 video), DMX nodes 1 and 2, spare node, UPS.
67
+ - **Video booth:** media server A live, media server B hot standby.
68
+ - **Stage:** Truss 1 with 12 spots and 8 washes, LED wall 6 x 3.5 m, floor strobes and haze.
69
+ - Keep DMX runs under 100 m per line; use the spare node if a line fails.
70
+
71
+ ## Load-in checklist
72
+
73
+ - [ ] Truss hung, motors tested, safety signed off
74
+ - [ ] Power distribution tested, earth and RCD checked
75
+ - [ ] Rack A powered, UPS holding for 10 minutes
76
+ - [ ] LED wall built, tiles counted and addressed
77
+ - [ ] FOH cabling labelled and strain relieved
78
+ - [ ] VLANs configured, static addresses labelled, sACN multicast limited to VLAN 10
79
+ - [ ] Fixtures patched to universes 1 to 8, focus and colour check done
80
+ - [ ] LED wall mapped, content at 50 fps, media server A mirrored to B
81
+ - [ ] LTC verified at console and both media servers
82
+ - [ ] Failure drills run: pull LTC, media server A, DMX node
83
+ - [ ] Final go from the production manager at 18:30
84
+
85
+ ## Failure and blackout plan
86
+
87
+ | Failure | Detected by | Immediate response | Recovery |
88
+ |---|---|---|---|
89
+ | LTC lost | Console timecode lamp, media server clock | Both switch to internal clock, operators GO manually | Re-sync at the next song start |
90
+ | Media server A fails | Wall black or frozen | Video operator flips to server B on the processor | Reboot A, keep B live for the set |
91
+ | DMX node 1 fails | Truss fixtures freeze | Console outputs to spare node | Replace node during the next break |
92
+ | Network switch fails | All sACN lost, fixtures hold last look | Swap to the spare switch, config on USB | Verify addresses, resume |
93
+ | Power loss on stage | Lights and wall dark | Audio on UPS keeps playback, house lights on emergency circuit | Hold the show until power is confirmed |
94
+ | Emergency stop | Production manager call | Console blackout, haze and CO2 off, house lights up | No restart without a safety sign-off |
95
+
96
+ **Blackout rule:** a deliberate blackout is a console cue (cue 1 and cue 60), never a power switch. On "stop", effects go off first, then lights fade to house. Only the production manager restarts the show.
97
+
98
+ ## Risks
99
+
100
+ | Risk | Likelihood | Impact | Mitigation |
101
+ |---|---|---|---|
102
+ | Wireless interference from the neighbouring stage | Medium | High | Frequency coordination, wired backups for key mics |
103
+ | Strobe bursts exceed the venue photosensitivity limit | Low | High | Cap at 3 Hz, warning signs, approval in the safety plan |
104
+ | Rain reaches the front of house | Medium | Medium | Covered FOH tent, cable ramps, tarp for the rack |
105
+ | Content delivered late | Medium | Medium | Delivery deadline two days before, placeholder loops loaded |
106
+
107
+ ## Open questions
108
+
109
+ - Followspots from FOH or a side tower? Side tower (recommended) / FOH
110
+ - Second haze unit allowed by the venue? Yes with smoke detector isolation (recommended) / no
111
+ - Extras? Audience blinders / live camera on the wall / wireless DMX backup