@starlove/orbit 1.3.4 → 1.4.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 (130) hide show
  1. package/Dockerfile +2 -1
  2. package/README.md +10 -9
  3. package/SKILL-ORBIT.md +41 -17
  4. package/dist/full/fonts/Chakra_Petch/ChakraPetch-Bold.ttf +0 -0
  5. package/dist/full/fonts/Chakra_Petch/ChakraPetch-BoldItalic.ttf +0 -0
  6. package/dist/full/fonts/Chakra_Petch/ChakraPetch-Italic.ttf +0 -0
  7. package/dist/full/fonts/Chakra_Petch/ChakraPetch-Light.ttf +0 -0
  8. package/dist/full/fonts/Chakra_Petch/ChakraPetch-LightItalic.ttf +0 -0
  9. package/dist/full/fonts/Chakra_Petch/ChakraPetch-Medium.ttf +0 -0
  10. package/dist/full/fonts/Chakra_Petch/ChakraPetch-MediumItalic.ttf +0 -0
  11. package/dist/full/fonts/Chakra_Petch/ChakraPetch-Regular.ttf +0 -0
  12. package/dist/full/fonts/Chakra_Petch/ChakraPetch-SemiBold.ttf +0 -0
  13. package/dist/full/fonts/Chakra_Petch/ChakraPetch-SemiBoldItalic.ttf +0 -0
  14. package/dist/full/fonts/Chakra_Petch/OFL.txt +93 -0
  15. package/dist/full/fonts/Inter/Inter-Italic-VariableFont_opsz,wght.ttf +0 -0
  16. package/dist/full/fonts/Inter/Inter-VariableFont_opsz,wght.ttf +0 -0
  17. package/dist/full/fonts/Inter/OFL.txt +93 -0
  18. package/dist/full/fonts/Inter/README.txt +118 -0
  19. package/dist/full/fonts/JetBrains_Mono/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
  20. package/dist/full/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf +0 -0
  21. package/dist/full/fonts/JetBrains_Mono/OFL.txt +93 -0
  22. package/dist/full/fonts/JetBrains_Mono/README.txt +79 -0
  23. package/dist/full/fonts/OpenRing-Regular.ttf +0 -0
  24. package/dist/full/fonts/Open_Sans/OFL.txt +93 -0
  25. package/dist/full/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  26. package/dist/full/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  27. package/dist/full/fonts/Open_Sans/README.txt +100 -0
  28. package/dist/full/fonts/Orbitron/OFL.txt +93 -0
  29. package/dist/full/fonts/Orbitron/Orbitron-VariableFont_wght.ttf +0 -0
  30. package/dist/full/fonts/Orbitron/README.txt +68 -0
  31. package/dist/full/fonts/Rajdhani/OFL.txt +93 -0
  32. package/dist/full/fonts/Rajdhani/Rajdhani-Bold.ttf +0 -0
  33. package/dist/full/fonts/Rajdhani/Rajdhani-Light.ttf +0 -0
  34. package/dist/full/fonts/Rajdhani/Rajdhani-Medium.ttf +0 -0
  35. package/dist/full/fonts/Rajdhani/Rajdhani-Regular.ttf +0 -0
  36. package/dist/full/fonts/Rajdhani/Rajdhani-SemiBold.ttf +0 -0
  37. package/dist/full/fonts/runescape-uf.ttf +0 -0
  38. package/dist/full/index.html +137 -27
  39. package/dist/full/js/app.62905fcb.js +952 -0
  40. package/dist/full/js/app.62905fcb.js.map +7 -0
  41. package/dist/full/styles.4e60d824.css +1 -0
  42. package/dist/full/version.json +2 -2
  43. package/docs/AGENT_PROTOCOL.md +20 -13
  44. package/docs/ORBIT_DISPATCH.md +73 -38
  45. package/docs/UPDATING.md +114 -0
  46. package/package.json +5 -7
  47. package/public/fonts/Chakra_Petch/ChakraPetch-Bold.ttf +0 -0
  48. package/public/fonts/Chakra_Petch/ChakraPetch-BoldItalic.ttf +0 -0
  49. package/public/fonts/Chakra_Petch/ChakraPetch-Italic.ttf +0 -0
  50. package/public/fonts/Chakra_Petch/ChakraPetch-Light.ttf +0 -0
  51. package/public/fonts/Chakra_Petch/ChakraPetch-LightItalic.ttf +0 -0
  52. package/public/fonts/Chakra_Petch/ChakraPetch-Medium.ttf +0 -0
  53. package/public/fonts/Chakra_Petch/ChakraPetch-MediumItalic.ttf +0 -0
  54. package/public/fonts/Chakra_Petch/ChakraPetch-Regular.ttf +0 -0
  55. package/public/fonts/Chakra_Petch/ChakraPetch-SemiBold.ttf +0 -0
  56. package/public/fonts/Chakra_Petch/ChakraPetch-SemiBoldItalic.ttf +0 -0
  57. package/public/fonts/Chakra_Petch/OFL.txt +93 -0
  58. package/public/fonts/Inter/Inter-Italic-VariableFont_opsz,wght.ttf +0 -0
  59. package/public/fonts/Inter/Inter-VariableFont_opsz,wght.ttf +0 -0
  60. package/public/fonts/Inter/OFL.txt +93 -0
  61. package/public/fonts/Inter/README.txt +118 -0
  62. package/public/fonts/JetBrains_Mono/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
  63. package/public/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf +0 -0
  64. package/public/fonts/JetBrains_Mono/OFL.txt +93 -0
  65. package/public/fonts/JetBrains_Mono/README.txt +79 -0
  66. package/public/fonts/OpenRing-Regular.ttf +0 -0
  67. package/public/fonts/Open_Sans/OFL.txt +93 -0
  68. package/public/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  69. package/public/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  70. package/public/fonts/Open_Sans/README.txt +100 -0
  71. package/public/fonts/Orbitron/OFL.txt +93 -0
  72. package/public/fonts/Orbitron/Orbitron-VariableFont_wght.ttf +0 -0
  73. package/public/fonts/Orbitron/README.txt +68 -0
  74. package/public/fonts/Rajdhani/OFL.txt +93 -0
  75. package/public/fonts/Rajdhani/Rajdhani-Bold.ttf +0 -0
  76. package/public/fonts/Rajdhani/Rajdhani-Light.ttf +0 -0
  77. package/public/fonts/Rajdhani/Rajdhani-Medium.ttf +0 -0
  78. package/public/fonts/Rajdhani/Rajdhani-Regular.ttf +0 -0
  79. package/public/fonts/Rajdhani/Rajdhani-SemiBold.ttf +0 -0
  80. package/public/fonts/runescape-uf.ttf +0 -0
  81. package/public/index.html +135 -25
  82. package/public/js/artifact-drawer.js +79 -0
  83. package/public/js/board-export.js +161 -0
  84. package/public/js/board-menu.js +219 -17
  85. package/public/js/card-actions.js +1 -1
  86. package/public/js/create-card.js +60 -23
  87. package/public/js/drawer.js +164 -4
  88. package/public/js/font-preference.js +229 -0
  89. package/public/js/format.js +0 -10
  90. package/public/js/icons.js +16 -0
  91. package/public/js/kanban.js +123 -1
  92. package/public/js/local-backend.js +31 -4
  93. package/public/js/main.js +7 -1
  94. package/public/js/modal.js +3 -1
  95. package/public/js/panel.js +58 -0
  96. package/public/js/settings-tabs.js +1 -1
  97. package/public/js/settings.js +606 -275
  98. package/public/js/sse.js +3 -0
  99. package/public/js/state.js +1 -1
  100. package/public/js/text-editing.js +128 -0
  101. package/public/js/ticket-detail.js +377 -148
  102. package/public/js/ticket-typeahead.js +49 -0
  103. package/public/js/toast.js +19 -4
  104. package/public/js/topbar-notes.js +3 -3
  105. package/public/js/typeahead.js +206 -0
  106. package/public/js/update-check.js +58 -0
  107. package/public/styles.css +5455 -3538
  108. package/src/cli/orbit.js +9 -5
  109. package/src/core/agent.js +12 -4
  110. package/src/core/agents-md.js +3 -3
  111. package/src/core/artifacts.js +149 -0
  112. package/src/core/board.js +3 -2
  113. package/src/core/boards.js +0 -1
  114. package/src/core/css-bundle.js +1 -0
  115. package/src/core/db.js +6 -0
  116. package/src/core/dispatch.js +344 -34
  117. package/src/core/http.js +9 -2
  118. package/src/core/paths.js +26 -2
  119. package/src/core/router.js +33 -0
  120. package/src/core/search.js +3 -2
  121. package/src/core/snapshots.js +10 -5
  122. package/src/core/tickets.js +34 -3
  123. package/src/core/util.js +3 -2
  124. package/src/core/version-check.js +154 -0
  125. package/src/mcp/orbit-client.js +18 -2
  126. package/src/mcp-server.js +19 -14
  127. package/src/server.js +28 -3
  128. package/dist/full/js/app.fb7767dc.js +0 -742
  129. package/dist/full/js/app.fb7767dc.js.map +0 -7
  130. package/dist/full/styles.bbc542f5.css +0 -1
package/Dockerfile CHANGED
@@ -5,7 +5,8 @@ WORKDIR /app
5
5
 
6
6
  ENV NODE_ENV=production \
7
7
  PORT=13701 \
8
- DATA_DIR=/data
8
+ DATA_DIR=/data \
9
+ ORBIT_USE_DIST=1
9
10
 
10
11
  COPY package.json ./
11
12
  COPY SKILL-ORBIT.md ./SKILL-ORBIT.md
package/README.md CHANGED
@@ -17,11 +17,11 @@ These screenshots show Orbit in dark and light mode. They were captured before t
17
17
 
18
18
  ![Orbit app in light mode](docs/SS-Orbit-Light.png)
19
19
 
20
- ## 🛰️ Zero runtime dependencies
20
+ ## 🛰️ Zero external runtime dependencies
21
21
 
22
- **Orbit installs with zero third-party runtime dependencies.** The server, CLI, and MCP layer use Node.js built-ins: `node:sqlite`, `node:http`, `node:crypto`, and friends.
22
+ **Orbit's server, CLI, and MCP layer run with zero external runtime dependencies.** They use Node.js built-ins: `node:sqlite`, `node:http`, `node:crypto`, and friends.
23
23
 
24
- The single dev-only dependency is [`esbuild`](https://esbuild.github.io/), used to bundle the web UI at build time. It never ships and is not needed to run the server, CLI, or MCP.
24
+ Build-time packages include Starscape's own `@starlove/ui` styling and [`esbuild`](https://esbuild.github.io/) for bundling the web UI. They are not needed by initialized project boards at runtime.
25
25
 
26
26
  ## Install and use Orbit
27
27
 
@@ -35,7 +35,7 @@ pnpm add -g @starlove/orbit
35
35
  git clone git@github.com:brucestarlove/ss-orbit.git
36
36
  cd ss-orbit
37
37
  pnpm install
38
- pnpm run build:full
38
+ pnpm run build:bundle
39
39
  pnpm link --global
40
40
  ```
41
41
 
@@ -88,17 +88,18 @@ If you initialized with `--example`, ticket #12 (`Try Orbit MCP on this ticket`)
88
88
 
89
89
  ### Dispatch a local Hermes run
90
90
 
91
- For a first-class handoff to a named Hermes profile on a local board, use `orbit dispatch` instead of writing an ad-hoc prompt file:
91
+ For a first-class handoff to a named Hermes profile, use `orbit dispatch` instead of writing an ad-hoc prompt file:
92
92
 
93
93
  ```bash
94
94
  orbit dispatch --board my-app --ticket 12 --profile agent --worktree
95
+ orbit dispatch 'http://orbit.example/#/b/my-app/t/<ticket-id>' --profile agent --worktree
95
96
  orbit dispatch --board my-app --ticket 12 --dry-run # preview only; no writes or spawn
96
97
  orbit dispatch --board my-app --ticket 12 --no-spawn # prepare handoff/comment; leave lane unchanged
97
98
  ```
98
99
 
99
- Dispatch validates the local board, ticket, blockers, and Hermes availability before mutating a ticket. Normal spawn mode writes the generated handoff into the ticket's **AI Written-Plan**, moves the ticket to **In Progress**, optionally preserves a git worktree/branch for review, starts Hermes, and comments a run record back onto the card. `--no-spawn` writes the handoff/comment but does not move the ticket to In Progress. The default `agent-safe` policy allows local inspection, edits, tests, and commits while blocking Docker, pushes, deploys, package installs, destructive git commands, and common network/cloud escape hatches.
100
+ Dispatch validates the board, ticket, blockers, and Hermes availability before mutating a ticket. Normal spawn mode writes the generated handoff as a linked markdown artifact, stores only a terse plan summary in AI Plan, moves the ticket to **In Progress**, optionally preserves a git worktree/branch for review, starts Hermes, and comments a compact run record back onto the card. `--no-spawn` writes the handoff artifact/comment but does not move the ticket to In Progress. The default `agent-safe` policy allows local inspection, edits, tests, and commits while blocking Docker, pushes, deploys, package installs, destructive git commands, and common network/cloud escape hatches.
100
101
 
101
- `orbit dispatch` is intentionally not a hosted-board client yet: `--server-url` and `--remote` are refused before side effects. Use remote MCP tools for hosted/remote boards, or run dispatch on the board host. Full operator/user guide: [docs/ORBIT_DISPATCH.md](docs/ORBIT_DISPATCH.md).
102
+ `orbit dispatch` supports hosted boards through a full Orbit ticket URL or `--server-url <url> --board <slug> --ticket <id-or-number>`. In remote mode, hosted Orbit is the planning-state source of truth while `--cwd` points at the local code checkout/worktree root. Full operator/user guide: [docs/ORBIT_DISPATCH.md](docs/ORBIT_DISPATCH.md).
102
103
 
103
104
  ## Vocabulary
104
105
 
@@ -128,7 +129,7 @@ Each repo gets its own board database. Orbit keeps a small central registry that
128
129
  - **Central registry** — `registry.db` records each board's path, slug, and last-active timestamp. Host `orbit run` uses `~/.orbit`; `orbit docker` uses `<repo>/.orbit/docker-data`. Keep one mode unless you intentionally share `DATA_DIR`, re-register boards, or import snapshots.
129
130
  - **Project-root discovery** — `orbit run`, `orbit mcp`, and MCP-attached agents resolve a board from an explicit `--cwd` / `PROJECT_ROOT` first, then fall back to walking up from process cwd to find `.orbit/board.db`. Persistent MCP configs should use an explicit root so the right board attaches even when the agent launches elsewhere.
130
131
  - **Two channels for AI** — `AGENTS.md` is the auto-loaded briefing, with an Orbit-managed pointer to `SKILL-ORBIT.md`; the *MCP config* tells the agent runtime how to launch Orbit's MCP server for the right project. The briefing travels with the repo; the MCP registration is per-agent-install.
131
- - **Snapshot-portable** — Settings → Repository → Export downloads a `.orbit.json` snapshot, with an option to embed attached images. Import on another install (or in the browser preview at [orbit.starscape.app/app](https://orbit.starscape.app/app)) to restore the same board.
132
+ - **Snapshot-portable** — Settings → Data → Export downloads a `.orbit.json` snapshot, with an option to embed attached images. Import on another install (or in the browser preview at [orbit.starscape.app/app](https://orbit.starscape.app/app)) to restore the same board.
132
133
 
133
134
  ## Developing Orbit
134
135
 
@@ -230,7 +231,7 @@ orbit docker --data-dir /path/to/data
230
231
  $env:DATA_DIR="C:\path\to\data"; orbit run
231
232
  ```
232
233
 
233
- The UI exposes **Export** and **Import** from **Settings → Repository**.
234
+ The UI exposes **Export** and **Import** from **Settings → Data**.
234
235
 
235
236
  **Export** downloads a portable `.orbit.json` file you can move to another computer or import later. By default it stores image attachment records without image bytes; enable **Include attached images** to embed the images in the snapshot.
236
237
 
package/SKILL-ORBIT.md CHANGED
@@ -4,6 +4,24 @@ Read this before repo work. This board is the repo-local memory and execution la
4
4
 
5
5
  This file is managed by Orbit and may be overwritten by `orbit init` or refreshed by `orbit run`. Put repo/team-specific agent rules in `AGENTS.md` or board `agent_instructions`, not here.
6
6
 
7
+ ## Orbit Coordinates
8
+
9
+ Optional project-local hints. Explicit user instructions, MCP/API selectors, and live board metadata win.
10
+
11
+ Optional coordinates:
12
+ - orbit_api_url:
13
+ - orbit_board:
14
+
15
+ Leave unknown values blank rather than guessing. These hints are for orientation only; agents must still resolve the intended board before mutating tickets.
16
+
17
+ ## Local vs Hosted Boards
18
+
19
+ - Always resolve the intended board before reading or mutating tickets.
20
+ - Prefer Orbit API/MCP tools over direct database edits.
21
+ - If an Orbit API URL or hosted board is configured for the task, treat that board as the planning-state source of truth.
22
+ - Local `.orbit/board.db` files may be stale, absent, or unrelated when a hosted board is in use.
23
+ - Artifact paths may be repo-relative paths, local filesystem paths, or hosted-accessible paths; verify availability before citing them as readable.
24
+
7
25
  ## MCP, cwd, and this file
8
26
 
9
27
  These are separate concerns; mixing them causes confusion:
@@ -22,25 +40,30 @@ In Orbit / kanban / ticket contexts, `epic` is a ticket `type`, not an adjective
22
40
 
23
41
  - Read `agent_instructions` on the board first, then the ticket context pack.
24
42
  - Respect blockers and parent epics.
25
- - Use comments for discussion and breadcrumbs.
26
- - Use ticket fields for durable implementation records: `ai_plan`, `implementation_summary`, `implementation_updates`.
27
- - Add a project entry when the context should outlive one ticket.
43
+ - Use comments for discussion and compact breadcrumbs.
44
+ - Keep human-visible ticket fields terse and use the existing fields by intent:
45
+ - `ai_plan` / AI Plan: terse visible plan summary; full markdown handoffs live in `plan_artifact_path`.
46
+ - `implementation_summary` / Work Summary: terse visible result summary; full markdown reports/evidence live in `implementation_artifact_path`.
47
+ - `implementation_updates` / Revisions: terse later changes/corrections after initial implementation. Leave blank for normal first completion; do not store chronology, command logs, routine run receipts, or durable project lessons here.
48
+ - Use board Journal entries (`decision` / `lesson`) only for durable reusable project decisions/lessons every future board agent should load.
28
49
 
29
50
  ## Dispatching Agents
30
51
 
31
- `orbit dispatch --board <slug> --ticket <number-or-id> --profile <name> --worktree` is the preferred human/orchestrator entrypoint for starting a Hermes agent on a specific card.
52
+ `orbit dispatch --board <slug> --ticket <number-or-id> --profile <name> --worktree` is the preferred human/orchestrator entrypoint for starting an agent on a specific card.
32
53
 
33
54
  Dispatch responsibilities:
34
- - Generate the handoff and store the canonical copy in the card's `ai_plan` / AI Written-Plan field.
55
+ - Generate the full handoff as a linked markdown artifact and put only a terse summary in the existing `ai_plan` / AI Plan field.
35
56
  - Move the card to In Progress.
36
57
  - Preserve a git worktree/branch for human testing when `--worktree` is used.
37
- - Add a run-record comment with profile, policy, branch, worktree, pid, and command.
58
+ - Add a compact run-record comment with profile, policy, branch, worktree, pid, command, and artifact path.
38
59
  - Apply the default safe PATH policy wrappers unless `--policy none` is explicit.
39
60
 
40
- Agent completion responsibilities remain unchanged:
41
- - Write final work notes to `implementation_summary`.
42
- - Write pitfalls, remediation, and reusable future guidance to `implementation_updates`.
43
- - Add comments for transient breadcrumbs/run events.
61
+ Agent completion responsibilities:
62
+ - Write a terse human-readable result to the existing `implementation_summary` / Work Summary field.
63
+ - If details matter, write a markdown report and link it with `implementation_artifact_path`.
64
+ - Leave Revisions (`implementation_updates`) blank unless this is a later change/correction after initial implementation. No chronology, logs, normal run details, or durable project lessons.
65
+ - Promote project-wide code/pattern lessons and decisions to the board Journal (`lesson` / `decision`) instead of burying them on one card.
66
+ - Add compact comments for transient breadcrumbs/run events.
44
67
  - Move the card to Review unless the human explicitly asked for Done.
45
68
 
46
69
  ## Human CLI Checks
@@ -61,8 +84,9 @@ Rules:
61
84
  - Prefer fewer, clearer epics with named feature cards underneath.
62
85
  - Preserve source references in descriptions or comments.
63
86
  - Mark uncertainty with `Inferred from...` or `Source suggests...`.
64
- - Put implementation facts in `implementation_summary`.
65
- - Put chronology, pitfalls, and lessons in `implementation_updates`.
87
+ - Put only terse work-summary facts in `implementation_summary`.
88
+ - Put full historical detail in linked markdown artifacts or comments, not the visible card fields.
89
+ - Put only terse card-specific later revision notes in `implementation_updates`; promote reusable code/pattern/project lessons and decisions to board Journal entries.
66
90
  - Keep future work open unless the source clearly supports `Done`.
67
91
  - Do not invent acceptance criteria.
68
92
 
@@ -70,22 +94,22 @@ Rules:
70
94
 
71
95
  The board is the unit of organization. Each board is tied to one repo and carries:
72
96
 
73
- - `repo_url`, `system_path`, `default_branch`: where the code lives.
97
+ - `repo_url`, `system_path`, `default_branch`: where the code lives. `system_path` is the project folder linked under Settings → AI → AI Helper Files.
74
98
  - `agent_instructions`: project-level context for agents (purpose, surface area, stack, constraints, operating rules — included in ticket context packs). Edited under Settings → AI.
75
99
  - `project_notes`: Notes For You — personal reminders on the board (Settings → Notes).
76
100
 
77
101
  Use board-level memory entries for durable history:
78
102
 
79
- - `decision`: UX or architecture choices agents should follow instead of defaulting to generic codegen.
80
- - `lesson`: mistakes or discoveries distilled as "do X instead of Y when working with Z."
103
+ - `decision`: important UX, architecture, workflow, naming, or project choices every future agent on this board should follow instead of defaulting to generic codegen.
104
+ - `lesson`: important code, pattern, or project failure modes/discoveries distilled as "do X instead of Y when working with Z."
81
105
 
82
- Board entries are durable project memory, not general notes or persona guidance. Keep active entries focused on mechanisms, architectural/product boundaries, workflow invariants, public-product implications, and reusable pitfalls. Prefer ticket comments/implementation fields for one-run chronology, and strike or consolidate stale overlapping entries once a doctrine stabilizes.
106
+ Board Journal entries are durable project memory loaded for agents working this board, not general notes or persona guidance. Keep active decisions/lessons focused on the most important mechanisms, architectural/product boundaries, workflow invariants, public-product implications, and reusable pitfalls. Prefer ticket comments/implementation fields for one-run chronology, and strike or consolidate stale overlapping entries once a doctrine stabilizes.
83
107
 
84
108
  ## Ticket Relationships
85
109
 
86
110
  Two distinct, non-overlapping mechanisms:
87
111
 
88
- - **Hierarchy** — `parent_ticket_id` on the ticket row. One epic owns many features/tasks/bugs. Set on create or via `PATCH /api/tickets/:id`. Only epics can have children; pass `null` to detach. Do not duplicate this link in `relations`.
112
+ - **Hierarchy** — `parent_ticket_id` on the ticket row. One epic owns many features/tasks/bugs. Set on create or via `PATCH /api/tickets/:id`. Only epics can have children; pass `null` to detach. An epic itself cannot have a parent (`parent_ticket_id` must be `null`). Do not duplicate this link in `relations`.
89
113
  - **Relations** — rows in the `relations` table with `type` of `relates_to`, `blocks`, or `blocked_by`. Use these for cross-cutting connections that aren't ownership: another team's ticket relates to mine, ticket A blocks ticket B, etc. The board rejects relations between a ticket and its direct parent epic (`relation_redundant_with_parent`) and self-relations (`relation_self`).
90
114
 
91
115
  Before working a ticket, check blockers. A ticket is **not workable** while it has any `blocked_by` relation row. The relation row is the source of truth — it gets removed when the blocking ticket moves into the Done lane (state role `done`, server auto-deletes) or when a user removes the link manually in the UI. If a `blocked_by` target is an epic, the rule expands to *the epic's open children* — the ticket only becomes workable once every child sits in a Done-role lane (or is archived). The `claim-next` scheduler skips blocked tickets automatically; for ad-hoc checks call `GET /api/tickets/:id/blockers` (returns `can_start` + the unresolved blockers list, with `via_epic_id` on entries that came from epic expansion).
@@ -0,0 +1,93 @@
1
+ Copyright 2018 The Chakra Petch Project Authors (https://github.com/m4rc1e/Chakra-Petch.git)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,118 @@
1
+ Inter Variable Font
2
+ ===================
3
+
4
+ This download contains Inter as both variable fonts and static fonts.
5
+
6
+ Inter is a variable font with these axes:
7
+ opsz
8
+ wght
9
+
10
+ This means all the styles are contained in these files:
11
+ Inter/Inter-VariableFont_opsz,wght.ttf
12
+ Inter/Inter-Italic-VariableFont_opsz,wght.ttf
13
+
14
+ If your app fully supports variable fonts, you can now pick intermediate styles
15
+ that aren’t available as static fonts. Not all apps support variable fonts, and
16
+ in those cases you can use the static font files for Inter:
17
+ Inter/static/Inter_18pt-Thin.ttf
18
+ Inter/static/Inter_18pt-ExtraLight.ttf
19
+ Inter/static/Inter_18pt-Light.ttf
20
+ Inter/static/Inter_18pt-Regular.ttf
21
+ Inter/static/Inter_18pt-Medium.ttf
22
+ Inter/static/Inter_18pt-SemiBold.ttf
23
+ Inter/static/Inter_18pt-Bold.ttf
24
+ Inter/static/Inter_18pt-ExtraBold.ttf
25
+ Inter/static/Inter_18pt-Black.ttf
26
+ Inter/static/Inter_24pt-Thin.ttf
27
+ Inter/static/Inter_24pt-ExtraLight.ttf
28
+ Inter/static/Inter_24pt-Light.ttf
29
+ Inter/static/Inter_24pt-Regular.ttf
30
+ Inter/static/Inter_24pt-Medium.ttf
31
+ Inter/static/Inter_24pt-SemiBold.ttf
32
+ Inter/static/Inter_24pt-Bold.ttf
33
+ Inter/static/Inter_24pt-ExtraBold.ttf
34
+ Inter/static/Inter_24pt-Black.ttf
35
+ Inter/static/Inter_28pt-Thin.ttf
36
+ Inter/static/Inter_28pt-ExtraLight.ttf
37
+ Inter/static/Inter_28pt-Light.ttf
38
+ Inter/static/Inter_28pt-Regular.ttf
39
+ Inter/static/Inter_28pt-Medium.ttf
40
+ Inter/static/Inter_28pt-SemiBold.ttf
41
+ Inter/static/Inter_28pt-Bold.ttf
42
+ Inter/static/Inter_28pt-ExtraBold.ttf
43
+ Inter/static/Inter_28pt-Black.ttf
44
+ Inter/static/Inter_18pt-ThinItalic.ttf
45
+ Inter/static/Inter_18pt-ExtraLightItalic.ttf
46
+ Inter/static/Inter_18pt-LightItalic.ttf
47
+ Inter/static/Inter_18pt-Italic.ttf
48
+ Inter/static/Inter_18pt-MediumItalic.ttf
49
+ Inter/static/Inter_18pt-SemiBoldItalic.ttf
50
+ Inter/static/Inter_18pt-BoldItalic.ttf
51
+ Inter/static/Inter_18pt-ExtraBoldItalic.ttf
52
+ Inter/static/Inter_18pt-BlackItalic.ttf
53
+ Inter/static/Inter_24pt-ThinItalic.ttf
54
+ Inter/static/Inter_24pt-ExtraLightItalic.ttf
55
+ Inter/static/Inter_24pt-LightItalic.ttf
56
+ Inter/static/Inter_24pt-Italic.ttf
57
+ Inter/static/Inter_24pt-MediumItalic.ttf
58
+ Inter/static/Inter_24pt-SemiBoldItalic.ttf
59
+ Inter/static/Inter_24pt-BoldItalic.ttf
60
+ Inter/static/Inter_24pt-ExtraBoldItalic.ttf
61
+ Inter/static/Inter_24pt-BlackItalic.ttf
62
+ Inter/static/Inter_28pt-ThinItalic.ttf
63
+ Inter/static/Inter_28pt-ExtraLightItalic.ttf
64
+ Inter/static/Inter_28pt-LightItalic.ttf
65
+ Inter/static/Inter_28pt-Italic.ttf
66
+ Inter/static/Inter_28pt-MediumItalic.ttf
67
+ Inter/static/Inter_28pt-SemiBoldItalic.ttf
68
+ Inter/static/Inter_28pt-BoldItalic.ttf
69
+ Inter/static/Inter_28pt-ExtraBoldItalic.ttf
70
+ Inter/static/Inter_28pt-BlackItalic.ttf
71
+
72
+ Get started
73
+ -----------
74
+
75
+ 1. Install the font files you want to use
76
+
77
+ 2. Use your app's font picker to view the font family and all the
78
+ available styles
79
+
80
+ Learn more about variable fonts
81
+ -------------------------------
82
+
83
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
84
+ https://variablefonts.typenetwork.com
85
+ https://medium.com/variable-fonts
86
+
87
+ In desktop apps
88
+
89
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
90
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
91
+
92
+ Online
93
+
94
+ https://developers.google.com/fonts/docs/getting_started
95
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
96
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
97
+
98
+ Installing fonts
99
+
100
+ MacOS: https://support.apple.com/en-us/HT201749
101
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
102
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
103
+
104
+ Android Apps
105
+
106
+ https://developers.google.com/fonts/docs/android
107
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
108
+
109
+ License
110
+ -------
111
+ Please read the full license text (OFL.txt) to understand the permissions,
112
+ restrictions and requirements for usage, redistribution, and modification.
113
+
114
+ You can use them in your products & projects – print or digital,
115
+ commercial or otherwise.
116
+
117
+ This isn't legal advice, please consider consulting a lawyer and see the full
118
+ license for all details.
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.