boost-skill-cli 1.0.16__tar.gz → 1.0.18__tar.gz
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.
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- boost_skill_cli-1.0.18/docs/design-roadmap.html +520 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/index.html +51 -29
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/.gitignore +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/LICENSE +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/Makefile +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/README.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/setup.cfg +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/style/README.md +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/style/boost.css +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/style/boost.js +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/style/demo.html +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/unit/test_version.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.18'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 18)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>boost — Design & CLI Experience Roadmap</title>
|
|
7
|
+
<meta name="description" content="boost design roadmap — a designer-engineer backlog for bringing the Aurora living-glass system into the terminal: truecolor palette, gradient headings, glass panels, motion & snappy feedback, each scored by complexity, impact and wow-factor.">
|
|
8
|
+
<!-- Canonical Aurora tokens live in the repo-root style/boost.css (same sheet the
|
|
9
|
+
Engineering Roadmap links). Recolour everything by editing that one file. -->
|
|
10
|
+
<link rel="stylesheet" href="../style/boost.css">
|
|
11
|
+
<style>
|
|
12
|
+
/* ---------- roadmap-specific chrome (built on style/boost.css tokens) ---------- */
|
|
13
|
+
.hero { padding: 88px 0 20px; }
|
|
14
|
+
.hero h1 { font-size: clamp(40px, 6.4vw, 74px); font-weight: 800; letter-spacing: -.035em; line-height: 1.03; max-width: 860px; text-wrap: balance; }
|
|
15
|
+
.hero h1 .grad { background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
|
|
16
|
+
.hero p.lede { max-width: 700px; margin-top: 28px; font-size: 19px; color: var(--text-2); }
|
|
17
|
+
.hero p.lede b { color: var(--text); font-weight: 650; }
|
|
18
|
+
.hero p.lede code { color: var(--yellow); background: rgba(251,191,36,.09); padding: 1px 7px; border-radius: 6px; font-size: .86em; }
|
|
19
|
+
|
|
20
|
+
.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-top: 56px; }
|
|
21
|
+
.stat { background: var(--panel); border: 1px solid var(--line); border-radius: 16px; padding: 24px 20px; text-align: center; }
|
|
22
|
+
.stat b {
|
|
23
|
+
display: block; font-size: clamp(26px, 3.2vw, 40px); font-weight: 800; letter-spacing: -.02em;
|
|
24
|
+
background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent;
|
|
25
|
+
font-variant-numeric: tabular-nums;
|
|
26
|
+
}
|
|
27
|
+
.stat span { display: block; margin-top: 8px; font-size: 11px; font-weight: 650; letter-spacing: .16em; text-transform: uppercase; color: var(--text-2); }
|
|
28
|
+
|
|
29
|
+
/* ---------- Aurora → ANSI palette bridge ---------- */
|
|
30
|
+
.palette { max-width: 940px; margin: 46px auto 0; }
|
|
31
|
+
.palette h3 { text-align: center; font-size: 12px; font-weight: 700; font-family: var(--mono); letter-spacing: .18em; text-transform: uppercase; color: var(--text-3); margin-bottom: 20px; }
|
|
32
|
+
.swatches { display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: 12px; }
|
|
33
|
+
.sw { border: 1px solid var(--line); border-radius: 13px; overflow: hidden; background: var(--panel-solid); }
|
|
34
|
+
.sw .chip { height: 46px; }
|
|
35
|
+
.sw .lab { padding: 9px 12px 11px; }
|
|
36
|
+
.sw .lab b { display: block; font-size: 12.5px; font-weight: 700; }
|
|
37
|
+
.sw .lab span { display: block; font-family: var(--mono); font-size: 10.5px; color: var(--text-3); margin-top: 3px; }
|
|
38
|
+
|
|
39
|
+
/* ---------- legend ---------- */
|
|
40
|
+
.legend { max-width: 900px; margin: 60px auto 0; border: 1px solid var(--line); border-radius: 16px; background: var(--panel); padding: 26px 28px; }
|
|
41
|
+
.legend h3 { font-size: 14px; font-weight: 700; font-family: var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--text-2); margin-bottom: 18px; }
|
|
42
|
+
.legend-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 18px 28px; }
|
|
43
|
+
.legend-grid dt { font-family: var(--mono); font-size: 12.5px; font-weight: 700; color: var(--yellow); margin-bottom: 5px; }
|
|
44
|
+
.legend-grid dd { font-size: 13.5px; color: var(--text-2); line-height: 1.5; }
|
|
45
|
+
.legend-grid dd code { color: var(--text); background: rgba(255,255,255,.06); border: 1px solid var(--line-soft); border-radius: 5px; padding: 1px 6px; font-size: .9em; }
|
|
46
|
+
|
|
47
|
+
/* ---------- filter bar ---------- */
|
|
48
|
+
.filterbar { max-width: 940px; margin: 40px auto 0; }
|
|
49
|
+
.filter-row { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 9px; margin-top: 14px; }
|
|
50
|
+
.filter-row .flabel { font-family: var(--mono); font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: var(--text-3); margin-right: 4px; }
|
|
51
|
+
.pill {
|
|
52
|
+
font-size: 13px; font-weight: 600; color: var(--text-2);
|
|
53
|
+
background: var(--panel); border: 1px solid var(--line); border-radius: 999px;
|
|
54
|
+
padding: 8px 15px; cursor: pointer; font-family: var(--sans);
|
|
55
|
+
transition: color .15s, background .15s, border-color .15s;
|
|
56
|
+
}
|
|
57
|
+
.pill:hover { color: var(--text); border-color: rgba(255,255,255,.2); }
|
|
58
|
+
.pill.on { background: var(--yellow); border-color: var(--yellow); color: #201705; }
|
|
59
|
+
.roadmap-count { text-align: center; margin: 34px 0 4px; font-size: 14.5px; color: var(--text-2); }
|
|
60
|
+
.roadmap-count b { color: var(--text); font-variant-numeric: tabular-nums; }
|
|
61
|
+
|
|
62
|
+
/* ---------- track groups ---------- */
|
|
63
|
+
.track { margin-top: 52px; }
|
|
64
|
+
.track-head { display: flex; align-items: center; gap: 14px; }
|
|
65
|
+
.track-icon { width: 12px; height: 34px; border-radius: 5px; background: var(--tk, var(--yellow)); box-shadow: 0 0 22px -2px var(--tk, var(--yellow)); }
|
|
66
|
+
.track-head h3 { font-size: 22px; font-weight: 780; letter-spacing: -.015em; }
|
|
67
|
+
.track-head p { font-size: 14px; color: var(--text-2); margin-top: 1px; }
|
|
68
|
+
.track-head .n { margin-left: auto; font-family: var(--mono); font-size: 12px; color: var(--text-2); border: 1px solid var(--line); border-radius: 999px; padding: 5px 13px; white-space: nowrap; }
|
|
69
|
+
|
|
70
|
+
.rcards { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-top: 22px; }
|
|
71
|
+
.ritem {
|
|
72
|
+
position: relative; background: var(--panel-solid); border: 1px solid var(--line-soft);
|
|
73
|
+
border-radius: 14px; padding: 20px 22px 18px; overflow: hidden;
|
|
74
|
+
transition: border-color .15s, transform .15s;
|
|
75
|
+
}
|
|
76
|
+
.ritem::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--tk, var(--yellow)); opacity: .85; }
|
|
77
|
+
.ritem:hover { border-color: var(--line); transform: translateY(-2px); }
|
|
78
|
+
.ritem-top { display: flex; align-items: center; gap: 10px; margin-bottom: 11px; }
|
|
79
|
+
.rid { font-family: var(--mono); font-size: 11.5px; font-weight: 700; color: var(--text-3); letter-spacing: .04em; }
|
|
80
|
+
.rstatus { margin-left: auto; font-family: var(--mono); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; }
|
|
81
|
+
.rstatus.proposed { color: var(--sky); background: rgba(125,211,252,.1); border: 1px solid rgba(125,211,252,.32); }
|
|
82
|
+
.rstatus.next { color: var(--yellow); background: rgba(251,191,36,.1); border: 1px solid rgba(251,191,36,.35); }
|
|
83
|
+
.rstatus.progress { color: var(--green); background: rgba(74,222,128,.1); border: 1px solid rgba(74,222,128,.35); }
|
|
84
|
+
.rstatus.done { color: var(--text-3); background: var(--panel); border: 1px solid var(--line); text-decoration: line-through; }
|
|
85
|
+
|
|
86
|
+
.ritem h4 { font-size: 16.5px; font-weight: 720; letter-spacing: -.01em; line-height: 1.28; }
|
|
87
|
+
.ritem h4 code { font-family: var(--mono); font-size: .82em; color: var(--sky); background: rgba(125,211,252,.07); border-radius: 5px; padding: 1px 6px; }
|
|
88
|
+
.ritem > p { font-size: 13.5px; color: var(--text-2); margin-top: 8px; line-height: 1.55; }
|
|
89
|
+
.ritem > p b { color: var(--text); font-weight: 640; }
|
|
90
|
+
.ritem > p code { font-family: var(--mono); font-size: .86em; color: var(--text); background: rgba(255,255,255,.05); border-radius: 5px; padding: 1px 5px; }
|
|
91
|
+
|
|
92
|
+
.rmeta { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 15px; }
|
|
93
|
+
.rmeta span { font-family: var(--mono); font-size: 11px; font-weight: 600; padding: 4px 9px; border-radius: 7px; border: 1px solid var(--line-soft); color: var(--text-2); background: rgba(255,255,255,.03); white-space: nowrap; }
|
|
94
|
+
.rmeta .m-imp.high { color: #fca5a5; border-color: rgba(248,113,113,.4); background: rgba(248,113,113,.08); }
|
|
95
|
+
.rmeta .m-imp.med { color: var(--yellow); border-color: rgba(251,191,36,.35); background: rgba(251,191,36,.07); }
|
|
96
|
+
.rmeta .m-imp.low { color: var(--text-2); }
|
|
97
|
+
.rmeta .m-wow { color: var(--yellow); letter-spacing: 1px; }
|
|
98
|
+
.rref { margin-top: 13px; font-family: var(--mono); font-size: 11.5px; color: var(--text-3); }
|
|
99
|
+
.rref code { color: var(--sky); background: rgba(125,211,252,.06); border: 1px solid var(--line-soft); border-radius: 6px; padding: 2px 7px; }
|
|
100
|
+
|
|
101
|
+
.no-results { text-align: center; color: var(--text-2); padding: 70px 0 30px; display: none; }
|
|
102
|
+
|
|
103
|
+
.foot-note { max-width: 780px; margin: 70px auto 0; text-align: center; font-size: 13.5px; color: var(--text-3); line-height: 1.6; }
|
|
104
|
+
.foot-note code { color: var(--yellow); }
|
|
105
|
+
|
|
106
|
+
@media (max-width: 860px) {
|
|
107
|
+
.stats { grid-template-columns: repeat(2, 1fr); }
|
|
108
|
+
.rcards { grid-template-columns: 1fr; }
|
|
109
|
+
}
|
|
110
|
+
</style>
|
|
111
|
+
</head>
|
|
112
|
+
<body>
|
|
113
|
+
|
|
114
|
+
<header>
|
|
115
|
+
<div class="wrap nav">
|
|
116
|
+
<a class="logo" href="./index.html"><b>boost</b><span>Design Roadmap</span></a>
|
|
117
|
+
<ul>
|
|
118
|
+
<li><a href="#color">Color</a></li>
|
|
119
|
+
<li><a href="#layout">Layout</a></li>
|
|
120
|
+
<li><a href="#motion">Motion</a></li>
|
|
121
|
+
<li><a href="#commands">Commands</a></li>
|
|
122
|
+
<li><a href="#system">System</a></li>
|
|
123
|
+
<li><a href="./roadmap.html">Engineering →</a></li>
|
|
124
|
+
<li><a class="cta" href="./index.html">← Visual Guide</a></li>
|
|
125
|
+
</ul>
|
|
126
|
+
</div>
|
|
127
|
+
</header>
|
|
128
|
+
|
|
129
|
+
<main id="top">
|
|
130
|
+
|
|
131
|
+
<!-- ================= HERO ================= -->
|
|
132
|
+
<div class="wrap hero">
|
|
133
|
+
<span class="badge">Designer × engineer backlog · living document</span>
|
|
134
|
+
<h1><span class="grad">Aurora in the terminal.</span> A CLI as beautiful as the brand.</h1>
|
|
135
|
+
<p class="lede">
|
|
136
|
+
boost ships a stunning <b>Aurora living-glass</b> web system — yet the CLI still
|
|
137
|
+
renders in <b>plain 8-color ANSI</b>: no gradient, no glass, no motion. This roadmap
|
|
138
|
+
closes that gap. Every item was found by driving the real CLI
|
|
139
|
+
(<code>boost</code>, <code>doctor</code>, <code>search</code>, <code>list</code>) and
|
|
140
|
+
grading its output against <code>style/boost.css</code> — then scored by
|
|
141
|
+
<b>category, complexity, impact and wow-factor</b>. Zero new dependencies;
|
|
142
|
+
<code>NO_COLOR</code> and non-TTY are always respected.
|
|
143
|
+
</p>
|
|
144
|
+
<div class="stats">
|
|
145
|
+
<div class="stat reveal"><b>22</b><span>Design opportunities</span></div>
|
|
146
|
+
<div class="stat reveal"><b>5</b><span>Design tracks</span></div>
|
|
147
|
+
<div class="stat reveal"><b>0</b><span>New dependencies</span></div>
|
|
148
|
+
<div class="stat reveal"><b>1:1</b><span>Web ↔ CLI parity goal</span></div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<!-- ================= PALETTE BRIDGE ================= -->
|
|
153
|
+
<div class="wrap palette">
|
|
154
|
+
<h3>The bridge — Aurora web tokens → 24-bit ANSI</h3>
|
|
155
|
+
<div class="swatches">
|
|
156
|
+
<div class="sw"><div class="chip" style="background:#22d3ee"></div><div class="lab"><b>Cyan</b><span>#22d3ee · accent</span></div></div>
|
|
157
|
+
<div class="sw"><div class="chip" style="background:#a855f7"></div><div class="lab"><b>Violet</b><span>#a855f7 · brand</span></div></div>
|
|
158
|
+
<div class="sw"><div class="chip" style="background:#f472d0"></div><div class="lab"><b>Pink</b><span>#f472d0 · brand</span></div></div>
|
|
159
|
+
<div class="sw"><div class="chip" style="background:#4ade80"></div><div class="lab"><b>Green</b><span>#4ade80 · success</span></div></div>
|
|
160
|
+
<div class="sw"><div class="chip" style="background:#facc15"></div><div class="lab"><b>Yellow</b><span>#facc15 · warn</span></div></div>
|
|
161
|
+
<div class="sw"><div class="chip" style="background:linear-gradient(96deg,#22d3ee,#a855f7 52%,#f472d0)"></div><div class="lab"><b>Gradient</b><span>--grad · headings</span></div></div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<!-- ================= LEGEND ================= -->
|
|
166
|
+
<div class="wrap">
|
|
167
|
+
<div class="legend reveal">
|
|
168
|
+
<h3>How to read this roadmap</h3>
|
|
169
|
+
<dl class="legend-grid">
|
|
170
|
+
<div>
|
|
171
|
+
<dt>Status</dt>
|
|
172
|
+
<dd><code>Proposed</code> logged & triaged · <code>Next</code> queued · <code>In progress</code> being built · <code>Shipped</code> done.</dd>
|
|
173
|
+
</div>
|
|
174
|
+
<div>
|
|
175
|
+
<dt>Category</dt>
|
|
176
|
+
<dd>The discipline: <code>color</code>, <code>layout</code>, <code>motion</code>, <code>typography</code>, <code>ux</code>, <code>system</code>, <code>tooling</code>.</dd>
|
|
177
|
+
</div>
|
|
178
|
+
<div>
|
|
179
|
+
<dt>Complexity</dt>
|
|
180
|
+
<dd><code>S</code> a focused change · <code>M</code> a module-sized effort · <code>L</code> a multi-file refactor.</dd>
|
|
181
|
+
</div>
|
|
182
|
+
<div>
|
|
183
|
+
<dt>Impact</dt>
|
|
184
|
+
<dd>How much it lifts the everyday experience: <code>High</code> every session · <code>Med</code> real polish · <code>Low</code> finishing touch.</dd>
|
|
185
|
+
</div>
|
|
186
|
+
<div>
|
|
187
|
+
<dt>Wow-factor</dt>
|
|
188
|
+
<dd>★ to ★★★★★ — how much delight the win buys relative to the effort spent.</dd>
|
|
189
|
+
</div>
|
|
190
|
+
<div>
|
|
191
|
+
<dt>Constraints</dt>
|
|
192
|
+
<dd>Every proposal stays <code>zero-dependency</code>, degrades on <code>NO_COLOR</code> / non-TTY, and targets <code>Python ≥ 3.9</code>.</dd>
|
|
193
|
+
</div>
|
|
194
|
+
</dl>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<!-- ================= FILTERS ================= -->
|
|
199
|
+
<div class="wrap filterbar">
|
|
200
|
+
<div class="filter-row">
|
|
201
|
+
<span class="flabel">Track</span>
|
|
202
|
+
<button class="pill on" data-filter="track" data-val="all">All</button>
|
|
203
|
+
<button class="pill" data-filter="track" data-val="color">Color</button>
|
|
204
|
+
<button class="pill" data-filter="track" data-val="layout">Layout</button>
|
|
205
|
+
<button class="pill" data-filter="track" data-val="motion">Motion</button>
|
|
206
|
+
<button class="pill" data-filter="track" data-val="commands">Commands</button>
|
|
207
|
+
<button class="pill" data-filter="track" data-val="system">System</button>
|
|
208
|
+
</div>
|
|
209
|
+
<div class="filter-row">
|
|
210
|
+
<span class="flabel">Impact</span>
|
|
211
|
+
<button class="pill on" data-filter="impact" data-val="all">All</button>
|
|
212
|
+
<button class="pill" data-filter="impact" data-val="high">High</button>
|
|
213
|
+
<button class="pill" data-filter="impact" data-val="med">Med</button>
|
|
214
|
+
<button class="pill" data-filter="impact" data-val="low">Low</button>
|
|
215
|
+
</div>
|
|
216
|
+
<p class="roadmap-count"><b id="shown">22</b> of <b>22</b> opportunities shown</p>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<div class="wrap" id="board">
|
|
220
|
+
|
|
221
|
+
<!-- ===== COLOR ENGINE ===== -->
|
|
222
|
+
<section class="track" id="color" style="--tk: var(--cyan); padding-top: 40px;">
|
|
223
|
+
<div class="track-head">
|
|
224
|
+
<div class="track-icon"></div>
|
|
225
|
+
<div>
|
|
226
|
+
<h3>Aurora Color Engine</h3>
|
|
227
|
+
<p>Bring the brand palette and gradient into the terminal — with graceful fallbacks.</p>
|
|
228
|
+
</div>
|
|
229
|
+
<span class="n">4 items</span>
|
|
230
|
+
</div>
|
|
231
|
+
<div class="rcards">
|
|
232
|
+
|
|
233
|
+
<article class="ritem" data-track="color" data-impact="high">
|
|
234
|
+
<div class="ritem-top"><span class="rid">BOOST-D01</span><span class="rstatus next">Next</span></div>
|
|
235
|
+
<h4>24-bit Aurora palette in <code>output.py</code></h4>
|
|
236
|
+
<p>The whole CLI runs on eight legacy SGR codes (<code>RED</code>…<code>CYAN</code>) that don't match the brand at all — the front door paints section headers in generic <code>[33m</code> yellow. Add truecolor <code>rgb()</code> helpers mapping the exact web tokens: cyan <b>#22d3ee</b>, violet <b>#a855f7</b>, pink <b>#f472d0</b>, green <b>#4ade80</b>, yellow <b>#facc15</b>, plus <code>--text</code>/<code>--text-3</code> greys. One map recolors everything.</p>
|
|
237
|
+
<div class="rmeta"><span class="m-cat">color</span><span>Complexity S</span><span class="m-imp high">Impact High</span><span class="m-wow">★★★★☆</span></div>
|
|
238
|
+
<div class="rref"><code>core/output.py:15–38</code></div>
|
|
239
|
+
</article>
|
|
240
|
+
|
|
241
|
+
<article class="ritem" data-track="color" data-impact="high">
|
|
242
|
+
<div class="ritem-top"><span class="rid">BOOST-D02</span><span class="rstatus next">Next</span></div>
|
|
243
|
+
<h4>Terminal capability detection & graceful degradation</h4>
|
|
244
|
+
<p><code>use_color()</code> is binary — color or nothing. Add a tier ladder: <b>truecolor</b> (<code>COLORTERM=truecolor/24bit</code>) → <b>256</b> → <b>16</b> → <b>none</b>, so the Aurora tokens snap to the nearest available color instead of vanishing. Keep the existing <code>NO_COLOR</code> honor, add a <code>BOOST_COLOR=always/auto/never</code> override, and treat <code>TERM=dumb</code> as none.</p>
|
|
245
|
+
<div class="rmeta"><span class="m-cat">color</span><span>Complexity M</span><span class="m-imp high">Impact High</span><span class="m-wow">★★★☆☆</span></div>
|
|
246
|
+
<div class="rref"><code>core/output.py:26–38</code></div>
|
|
247
|
+
</article>
|
|
248
|
+
|
|
249
|
+
<article class="ritem" data-track="color" data-impact="med">
|
|
250
|
+
<div class="ritem-top"><span class="rid">BOOST-D03</span><span class="rstatus proposed">Proposed</span></div>
|
|
251
|
+
<h4>Gradient text renderer — the signature move</h4>
|
|
252
|
+
<p>The brand <em>is</em> the cyan→violet→pink <code>--grad</code>. Interpolate it per-character across a string so headings, the <code>boost</code> wordmark and hero counts shimmer in the terminal exactly like the web hero. A pure-Python lerp over the three stops; falls back to a single accent color when truecolor is unavailable.</p>
|
|
253
|
+
<div class="rmeta"><span class="m-cat">color</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★★</span></div>
|
|
254
|
+
<div class="rref"><code>core/output.py · new gradient()</code></div>
|
|
255
|
+
</article>
|
|
256
|
+
|
|
257
|
+
<article class="ritem" data-track="color" data-impact="med">
|
|
258
|
+
<div class="ritem-top"><span class="rid">BOOST-D04</span><span class="rstatus proposed">Proposed</span></div>
|
|
259
|
+
<h4>Semantic color roles, not raw codes</h4>
|
|
260
|
+
<p>Commands scatter <code>out.c(x, out.YELLOW)</code> and <code>out.GREEN</code> literally throughout the command layer, so a palette change means a repo-wide sweep. Introduce named roles — <code>accent</code>, <code>brand</code>, <code>success</code>, <code>warn</code>, <code>danger</code>, <code>muted</code> — resolved through the palette. Re-theming becomes a one-file edit, and intent reads clearly at every call site.</p>
|
|
261
|
+
<div class="rmeta"><span class="m-cat">color</span><span>Complexity S</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★☆☆☆</span></div>
|
|
262
|
+
<div class="rref"><code>core/output.py · commands/*.py</code></div>
|
|
263
|
+
</article>
|
|
264
|
+
|
|
265
|
+
</div>
|
|
266
|
+
</section>
|
|
267
|
+
|
|
268
|
+
<!-- ===== STRUCTURE & LAYOUT ===== -->
|
|
269
|
+
<section class="track" id="layout" style="--tk: var(--violet); padding-top: 40px;">
|
|
270
|
+
<div class="track-head">
|
|
271
|
+
<div class="track-icon"></div>
|
|
272
|
+
<div>
|
|
273
|
+
<h3>Structure & Layout</h3>
|
|
274
|
+
<p>Width-aware output, glass panels, and results that never blow up the pane.</p>
|
|
275
|
+
</div>
|
|
276
|
+
<span class="n">5 items</span>
|
|
277
|
+
</div>
|
|
278
|
+
<div class="rcards">
|
|
279
|
+
|
|
280
|
+
<article class="ritem" data-track="layout" data-impact="high">
|
|
281
|
+
<div class="ritem-top"><span class="rid">BOOST-D05</span><span class="rstatus next">Next</span></div>
|
|
282
|
+
<h4>Fix <code>search</code>: truncate & width-clamp results</h4>
|
|
283
|
+
<p>Today <code>boost search</code> is the worst screen in the app: a single result can dump a <b>2,000-character description with literal, unrendered <code>\\n\\n</code> escapes</b>, while names are padded to a fixed 30 columns that waste half the row. Clamp each row to the live terminal width, collapse whitespace/escape artifacts, and ellipsize. This one fix turns a wall of noise into a scannable list.</p>
|
|
284
|
+
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp high">Impact High</span><span class="m-wow">★★★★★</span></div>
|
|
285
|
+
<div class="rref"><code>commands/discovery.py · search</code></div>
|
|
286
|
+
</article>
|
|
287
|
+
|
|
288
|
+
<article class="ritem" data-track="layout" data-impact="med">
|
|
289
|
+
<div class="ritem-top"><span class="rid">BOOST-D06</span><span class="rstatus proposed">Proposed</span></div>
|
|
290
|
+
<h4>Glass-panel box primitives</h4>
|
|
291
|
+
<p>The web system frames everything in rounded glass; the CLI frames nothing. Add rounded box-drawing primitives (<code>╭─╮ │ ╰─╯</code>) with dim <code>--line</code> borders and an optional title, mirroring the web <code>.glass</code>/<code>.window</code> surfaces. Reusable chrome for <code>doctor</code>, <code>info</code>, <code>snapshot</code> and success summaries.</p>
|
|
292
|
+
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
293
|
+
<div class="rref"><code>core/output.py · new panel()</code></div>
|
|
294
|
+
</article>
|
|
295
|
+
|
|
296
|
+
<article class="ritem" data-track="layout" data-impact="med">
|
|
297
|
+
<div class="ritem-top"><span class="rid">BOOST-D07</span><span class="rstatus proposed">Proposed</span></div>
|
|
298
|
+
<h4>Relevance visualization in search</h4>
|
|
299
|
+
<p>Results are "ranked by heuristic relevance" but the ranking is invisible — every row looks equal. Render a tiny gradient relevance bar or score glyph per hit and visually separate <b>curated</b> from GitHub-wide matches, so the eye lands on the best result first.</p>
|
|
300
|
+
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
301
|
+
<div class="rref"><code>commands/discovery.py · search</code></div>
|
|
302
|
+
</article>
|
|
303
|
+
|
|
304
|
+
<article class="ritem" data-track="layout" data-impact="med">
|
|
305
|
+
<div class="ritem-top"><span class="rid">BOOST-D08</span><span class="rstatus proposed">Proposed</span></div>
|
|
306
|
+
<h4>Width-aware, right-aligned tables</h4>
|
|
307
|
+
<p><code>table()</code> is a naive <code>ljust</code> that ignores terminal width and left-aligns numeric columns. Make it width-aware (shrink the widest text column to fit), right-align counts with tabular figures, and add dim column separators — matching the web's <code>font-variant-numeric: tabular-nums</code> stat blocks.</p>
|
|
308
|
+
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★☆☆</span></div>
|
|
309
|
+
<div class="rref"><code>core/output.py:71–83</code></div>
|
|
310
|
+
</article>
|
|
311
|
+
|
|
312
|
+
<article class="ritem" data-track="layout" data-impact="med">
|
|
313
|
+
<div class="ritem-top"><span class="rid">BOOST-D09</span><span class="rstatus proposed">Proposed</span></div>
|
|
314
|
+
<h4>Terminal-window chrome for <code>preview</code> / <code>cat</code></h4>
|
|
315
|
+
<p>The web guide renders skills inside a titled window with traffic-light dots (<code>.window .dots</code>). Give <code>preview</code>/<code>cat</code> the same treatment: a titled frame with the skill name in the bar, so a rendered <code>SKILL.md</code> in the terminal matches the screenshots on the site.</p>
|
|
316
|
+
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
317
|
+
<div class="rref"><code>commands/info.py · preview/cat</code></div>
|
|
318
|
+
</article>
|
|
319
|
+
|
|
320
|
+
</div>
|
|
321
|
+
</section>
|
|
322
|
+
|
|
323
|
+
<!-- ===== MOTION & FEEDBACK ===== -->
|
|
324
|
+
<section class="track" id="motion" style="--tk: var(--green); padding-top: 40px;">
|
|
325
|
+
<div class="track-head">
|
|
326
|
+
<div class="track-icon"></div>
|
|
327
|
+
<div>
|
|
328
|
+
<h3>Motion & Feedback</h3>
|
|
329
|
+
<p>Make it feel <em>snappy</em> — spinners, progress, and instant first paint.</p>
|
|
330
|
+
</div>
|
|
331
|
+
<span class="n">4 items</span>
|
|
332
|
+
</div>
|
|
333
|
+
<div class="rcards">
|
|
334
|
+
|
|
335
|
+
<article class="ritem" data-track="motion" data-impact="high">
|
|
336
|
+
<div class="ritem-top"><span class="rid">BOOST-D10</span><span class="rstatus next">Next</span></div>
|
|
337
|
+
<h4>Braille spinner for network waits</h4>
|
|
338
|
+
<p>Network-bound commands — <code>search</code> (AI rank), <code>tap</code> clone, <code>discover</code>, <code>index</code> — currently freeze silently while they work. Add a lightweight braille-dot spinner (<code>⠋⠙⠹⠸…</code>) tinted with the Aurora accent, auto-suppressed on non-TTY and under <code>NO_COLOR</code>. The single biggest "feels fast" upgrade.</p>
|
|
339
|
+
<div class="rmeta"><span class="m-cat">motion</span><span>Complexity S</span><span class="m-imp high">Impact High</span><span class="m-wow">★★★★☆</span></div>
|
|
340
|
+
<div class="rref"><code>core/output.py · new spinner()</code></div>
|
|
341
|
+
</article>
|
|
342
|
+
|
|
343
|
+
<article class="ritem" data-track="motion" data-impact="med">
|
|
344
|
+
<div class="ritem-top"><span class="rid">BOOST-D11</span><span class="rstatus proposed">Proposed</span></div>
|
|
345
|
+
<h4>Determinate progress bars for batch ops</h4>
|
|
346
|
+
<p>Multi-item commands — <code>reindex</code>, <code>update</code>, <code>sync</code>, <code>snapshot</code> restore — give no sense of "how far in." Add a gradient-filled progress bar (<code>N/total</code> + ETA) for anything looping over a known count, so long operations read as intentional rather than hung.</p>
|
|
347
|
+
<div class="rmeta"><span class="m-cat">motion</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
348
|
+
<div class="rref"><code>core/output.py · new progress()</code></div>
|
|
349
|
+
</article>
|
|
350
|
+
|
|
351
|
+
<article class="ritem" data-track="motion" data-impact="med">
|
|
352
|
+
<div class="ritem-top"><span class="rid">BOOST-D12</span><span class="rstatus proposed">Proposed</span></div>
|
|
353
|
+
<h4>Stream search hits as they rank</h4>
|
|
354
|
+
<p><code>search</code> computes the full ranking, then prints the whole list at once — the terminal sits blank, then floods. Stream the top hits as they're scored so the first result paints almost immediately. Perceived latency drops even when total time is unchanged.</p>
|
|
355
|
+
<div class="rmeta"><span class="m-cat">motion</span><span>Complexity L</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★☆☆</span></div>
|
|
356
|
+
<div class="rref"><code>commands/discovery.py · search</code></div>
|
|
357
|
+
</article>
|
|
358
|
+
|
|
359
|
+
<article class="ritem" data-track="motion" data-impact="low">
|
|
360
|
+
<div class="ritem-top"><span class="rid">BOOST-D13</span><span class="rstatus proposed">Proposed</span></div>
|
|
361
|
+
<h4>Framed success summary with next step</h4>
|
|
362
|
+
<p><code>ok()</code> prints a lone green check, then the command just ends. After <code>install</code>/<code>uninstall</code>, close with a small framed confirmation — what changed, where it landed, and the obvious next step (<code>boost info <skill></code>) — so a completed action feels finished, not dropped.</p>
|
|
363
|
+
<div class="rmeta"><span class="m-cat">ux</span><span>Complexity S</span><span class="m-imp low">Impact Low</span><span class="m-wow">★★★☆☆</span></div>
|
|
364
|
+
<div class="rref"><code>core/output.py:41 · commands/pkg.py</code></div>
|
|
365
|
+
</article>
|
|
366
|
+
|
|
367
|
+
</div>
|
|
368
|
+
</section>
|
|
369
|
+
|
|
370
|
+
<!-- ===== COMMAND-BY-COMMAND POLISH ===== -->
|
|
371
|
+
<section class="track" id="commands" style="--tk: var(--pink); padding-top: 40px;">
|
|
372
|
+
<div class="track-head">
|
|
373
|
+
<div class="track-icon"></div>
|
|
374
|
+
<div>
|
|
375
|
+
<h3>Command-by-command Polish</h3>
|
|
376
|
+
<p>The screens users actually stare at — front door, doctor, list, info.</p>
|
|
377
|
+
</div>
|
|
378
|
+
<span class="n">5 items</span>
|
|
379
|
+
</div>
|
|
380
|
+
<div class="rcards">
|
|
381
|
+
|
|
382
|
+
<article class="ritem" data-track="commands" data-impact="med">
|
|
383
|
+
<div class="ritem-top"><span class="rid">BOOST-D14</span><span class="rstatus next">Next</span></div>
|
|
384
|
+
<h4>Front door: gradient wordmark + section glyphs</h4>
|
|
385
|
+
<p>The <code>boost</code> home screen is the first thing everyone sees. Today the wordmark is plain bold and every group header is the same generic yellow. Paint the <code>boost</code> wordmark with the Aurora gradient and give each command group a colored bullet/glyph keyed to a brand hue — turning a flat list into a branded index.</p>
|
|
386
|
+
<div class="rmeta"><span class="m-cat">commands</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★★</span></div>
|
|
387
|
+
<div class="rref"><code>commands/info.py · help renderer</code></div>
|
|
388
|
+
</article>
|
|
389
|
+
|
|
390
|
+
<article class="ritem" data-track="commands" data-impact="med">
|
|
391
|
+
<div class="ritem-top"><span class="rid">BOOST-D15</span><span class="rstatus proposed">Proposed</span></div>
|
|
392
|
+
<h4><code>doctor</code> as a health dashboard</h4>
|
|
393
|
+
<p><code>doctor</code> is an undifferentiated wall of green checks — no hierarchy, no headline. Reframe it as a panel with a verdict line (<code>● Healthy</code> in green / <code>● Attention</code> in amber), grouped checks, dim sub-detail, and severity color so a problem actually stands out instead of hiding among the ✓s.</p>
|
|
394
|
+
<div class="rmeta"><span class="m-cat">commands</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
395
|
+
<div class="rref"><code>commands/quality.py · doctor</code></div>
|
|
396
|
+
</article>
|
|
397
|
+
|
|
398
|
+
<article class="ritem" data-track="commands" data-impact="med">
|
|
399
|
+
<div class="ritem-top"><span class="rid">BOOST-D16</span><span class="rstatus proposed">Proposed</span></div>
|
|
400
|
+
<h4><code>info</code> skill identity card</h4>
|
|
401
|
+
<p><code>info</code> lists <code>kv()</code> pairs as flat dim labels. Promote it to a framed identity card: gradient skill name, status badges (<b>installed</b> / <b>pinned</b> / tap origin) styled like the web <code>.badge</code> pills, then the metadata — a real "detail view," not a key-value dump.</p>
|
|
402
|
+
<div class="rmeta"><span class="m-cat">commands</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
403
|
+
<div class="rref"><code>commands/info.py:177+</code></div>
|
|
404
|
+
</article>
|
|
405
|
+
|
|
406
|
+
<article class="ritem" data-track="commands" data-impact="low">
|
|
407
|
+
<div class="ritem-top"><span class="rid">BOOST-D17</span><span class="rstatus proposed">Proposed</span></div>
|
|
408
|
+
<h4><code>list</code> polish — chips & aligned counts</h4>
|
|
409
|
+
<p><code>list</code> already uses a nice <code>·</code> agent separator; take it further. Color the agent names as small chips, right-align the count footer with tabular figures, and add a dim header rule so the table reads as a designed object rather than raw columns.</p>
|
|
410
|
+
<div class="rmeta"><span class="m-cat">commands</span><span>Complexity S</span><span class="m-imp low">Impact Low</span><span class="m-wow">★★★☆☆</span></div>
|
|
411
|
+
<div class="rref"><code>commands/info.py:130–131</code></div>
|
|
412
|
+
</article>
|
|
413
|
+
|
|
414
|
+
<article class="ritem" data-track="commands" data-impact="low">
|
|
415
|
+
<div class="ritem-top"><span class="rid">BOOST-D18</span><span class="rstatus proposed">Proposed</span></div>
|
|
416
|
+
<h4>Consistent empty-states & hint styling</h4>
|
|
417
|
+
<p>Empty and hint lines are ad-hoc — <code>info</code>'s "no skills installed" hint is a hand-rolled <code>DIM</code> string. Standardize a single empty-state affordance (muted icon + one-line guidance + suggested command) and a single hint style, applied everywhere, so guidance always looks the same.</p>
|
|
418
|
+
<div class="rmeta"><span class="m-cat">ux</span><span>Complexity S</span><span class="m-imp low">Impact Low</span><span class="m-wow">★★☆☆☆</span></div>
|
|
419
|
+
<div class="rref"><code>commands/info.py:117–119 · core/output.py</code></div>
|
|
420
|
+
</article>
|
|
421
|
+
|
|
422
|
+
</div>
|
|
423
|
+
</section>
|
|
424
|
+
|
|
425
|
+
<!-- ===== DESIGN SYSTEM & TOOLING ===== -->
|
|
426
|
+
<section class="track" id="system" style="--tk: var(--yellow); padding-top: 40px;">
|
|
427
|
+
<div class="track-head">
|
|
428
|
+
<div class="track-icon"></div>
|
|
429
|
+
<div>
|
|
430
|
+
<h3>Design System & Tooling</h3>
|
|
431
|
+
<p>One source of truth for the brand — and the tools to show it off.</p>
|
|
432
|
+
</div>
|
|
433
|
+
<span class="n">4 items</span>
|
|
434
|
+
</div>
|
|
435
|
+
<div class="rcards">
|
|
436
|
+
|
|
437
|
+
<article class="ritem" data-track="system" data-impact="med">
|
|
438
|
+
<div class="ritem-top"><span class="rid">BOOST-D19</span><span class="rstatus next">Next</span></div>
|
|
439
|
+
<h4>Resolve theme drift: <code>style/</code> vs <code>docs/style/</code></h4>
|
|
440
|
+
<p>Two copies of <code>boost.css</code> have <b>diverged</b>: the root <code>style/</code> uses a cyan→violet→pink gradient (<code>--violet #a855f7</code>), while <code>docs/style/</code> uses an orange→pink→violet one (<code>--violet #a78bfa</code>). Same brand, two looks. Pick <code>style/</code> as canonical and make <code>docs/style/</code> a generated copy or symlink so the portfolio, roadmaps and CLI can't drift again.</p>
|
|
441
|
+
<div class="rmeta"><span class="m-cat">system</span><span>Complexity S</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★☆☆</span></div>
|
|
442
|
+
<div class="rref"><code>style/boost.css · docs/style/boost.css</code></div>
|
|
443
|
+
</article>
|
|
444
|
+
|
|
445
|
+
<article class="ritem" data-track="system" data-impact="med">
|
|
446
|
+
<div class="ritem-top"><span class="rid">BOOST-D20</span><span class="rstatus proposed">Proposed</span></div>
|
|
447
|
+
<h4>Single source of design tokens (web ↔ CLI)</h4>
|
|
448
|
+
<p>The palette lives only in CSS; the CLI would hard-code its own copy of the same hexes — guaranteeing drift. Emit both from one <code>tokens.json</code>: generate the CSS custom properties <em>and</em> the Python ANSI map from it, so a brand change updates the site and the terminal in lockstep. Fits the repo's existing "generate, never hand-edit" pattern (cf. <code>build_registries.py</code>).</p>
|
|
449
|
+
<div class="rmeta"><span class="m-cat">system</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
450
|
+
<div class="rref"><code>scripts/ · new build_tokens.py</code></div>
|
|
451
|
+
</article>
|
|
452
|
+
|
|
453
|
+
<article class="ritem" data-track="system" data-impact="med">
|
|
454
|
+
<div class="ritem-top"><span class="rid">BOOST-D21</span><span class="rstatus proposed">Proposed</span></div>
|
|
455
|
+
<h4>Scripted demo recording (VHS / asciinema)</h4>
|
|
456
|
+
<p>There's a <code>docs/demo.tape</code> + <code>demo.gif</code>, but no repeatable way to re-record once the aesthetic changes — and <code>tmux</code> isn't even installed in the dev box. Add a <code>make demo</code> that drives a scripted session (VHS tape or asciinema, optionally split-pane via tmux) and refreshes the GIF, so the README and portfolio always show the current look.</p>
|
|
457
|
+
<div class="rmeta"><span class="m-cat">tooling</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
458
|
+
<div class="rref"><code>docs/demo.tape · Makefile</code></div>
|
|
459
|
+
</article>
|
|
460
|
+
|
|
461
|
+
<article class="ritem" data-track="system" data-impact="med">
|
|
462
|
+
<div class="ritem-top"><span class="rid">BOOST-D22</span><span class="rstatus proposed">Proposed</span></div>
|
|
463
|
+
<h4>README / portfolio terminal parity</h4>
|
|
464
|
+
<p>The web <code>.window</code> mock shows an <em>idealized</em> boost session — gradient prompt, clean checks — that the real CLI doesn't yet produce. Once D01–D15 land, update the mock (and README code blocks) to mirror the true output 1:1, so every screenshot is honest and the brand reads identically across web, README and terminal.</p>
|
|
465
|
+
<div class="rmeta"><span class="m-cat">system</span><span>Complexity S</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
466
|
+
<div class="rref"><code>docs/index.html · README.md · style/demo.html</code></div>
|
|
467
|
+
</article>
|
|
468
|
+
|
|
469
|
+
</div>
|
|
470
|
+
</section>
|
|
471
|
+
|
|
472
|
+
<div class="no-results" id="noResults">No opportunities match these filters.</div>
|
|
473
|
+
|
|
474
|
+
</div>
|
|
475
|
+
|
|
476
|
+
<p class="foot-note">
|
|
477
|
+
A living document — each loop iteration drives the real CLI, grades it against
|
|
478
|
+
<code>style/boost.css</code>, and files what it finds here. Sibling to the
|
|
479
|
+
<a href="./roadmap.html" style="color:var(--sky)">Engineering Roadmap</a>.
|
|
480
|
+
Everything stays zero-dependency and honors <code>NO_COLOR</code> & non-TTY.
|
|
481
|
+
</p>
|
|
482
|
+
|
|
483
|
+
</main>
|
|
484
|
+
|
|
485
|
+
<script>
|
|
486
|
+
// Filter board by track + impact (mirrors roadmap.html behavior)
|
|
487
|
+
var state = { track: "all", impact: "all" };
|
|
488
|
+
function apply() {
|
|
489
|
+
var shown = 0;
|
|
490
|
+
document.querySelectorAll(".ritem").forEach(function (el) {
|
|
491
|
+
var okTrack = state.track === "all" || el.dataset.track === state.track;
|
|
492
|
+
var okImpact = state.impact === "all" || el.dataset.impact === state.impact;
|
|
493
|
+
var vis = okTrack && okImpact;
|
|
494
|
+
el.style.display = vis ? "" : "none";
|
|
495
|
+
if (vis) shown++;
|
|
496
|
+
});
|
|
497
|
+
document.querySelectorAll(".track").forEach(function (sec) {
|
|
498
|
+
var any = sec.querySelector('.ritem:not([style*="display: none"])');
|
|
499
|
+
var visible = Array.prototype.some.call(sec.querySelectorAll(".ritem"), function (el) { return el.style.display !== "none"; });
|
|
500
|
+
sec.style.display = visible ? "" : "none";
|
|
501
|
+
});
|
|
502
|
+
var shownEl = document.getElementById("shown");
|
|
503
|
+
if (shownEl) shownEl.textContent = shown;
|
|
504
|
+
var nr = document.getElementById("noResults");
|
|
505
|
+
if (nr) nr.style.display = shown === 0 ? "block" : "none";
|
|
506
|
+
}
|
|
507
|
+
document.querySelectorAll(".pill").forEach(function (btn) {
|
|
508
|
+
btn.addEventListener("click", function () {
|
|
509
|
+
var dim = btn.dataset.filter, val = btn.dataset.val;
|
|
510
|
+
document.querySelectorAll('.pill[data-filter="' + dim + '"]').forEach(function (b) { b.classList.remove("on"); });
|
|
511
|
+
btn.classList.add("on");
|
|
512
|
+
state[dim] = val;
|
|
513
|
+
apply();
|
|
514
|
+
});
|
|
515
|
+
});
|
|
516
|
+
apply();
|
|
517
|
+
</script>
|
|
518
|
+
|
|
519
|
+
</body>
|
|
520
|
+
</html>
|
|
@@ -6,25 +6,28 @@
|
|
|
6
6
|
<title>boost — Homebrew for AI coding skills</title>
|
|
7
7
|
<style>
|
|
8
8
|
:root {
|
|
9
|
-
|
|
9
|
+
/* ---- Aurora reskin: neon-tech living glass (matches style/ + portfolio) ---- */
|
|
10
|
+
--bg: #07080f;
|
|
10
11
|
--panel: rgba(255,255,255,.035);
|
|
11
|
-
--panel-solid: #
|
|
12
|
+
--panel-solid: #0f1120;
|
|
12
13
|
--line: rgba(255,255,255,.09);
|
|
13
14
|
--line-soft: rgba(255,255,255,.05);
|
|
14
|
-
--
|
|
15
|
-
--text
|
|
16
|
-
--text-
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
--
|
|
21
|
-
--
|
|
15
|
+
--line-hi: rgba(255,255,255,.22);
|
|
16
|
+
--text: #e9ebf5;
|
|
17
|
+
--text-2: #9298b0;
|
|
18
|
+
--text-3: #676d86;
|
|
19
|
+
--amber: #22d3ee; /* primary accent → cyan */
|
|
20
|
+
--orange: #38bdf8; /* cyan-blue */
|
|
21
|
+
--pink: #f472d0;
|
|
22
|
+
--violet: #a855f7;
|
|
23
|
+
--blue: #38bdf8;
|
|
22
24
|
--sky: #7dd3fc;
|
|
23
25
|
--green: #4ade80;
|
|
24
26
|
--yellow: #facc15;
|
|
25
|
-
--term-bg: #
|
|
26
|
-
--term-bar: #
|
|
27
|
-
--
|
|
27
|
+
--term-bg: #0d1024;
|
|
28
|
+
--term-bar: #171a33;
|
|
29
|
+
--cyan: #22d3ee;
|
|
30
|
+
--grad: linear-gradient(96deg, #22d3ee 0%, #a855f7 52%, #f472d0 100%);
|
|
28
31
|
--mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
|
|
29
32
|
--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
30
33
|
}
|
|
@@ -33,6 +36,7 @@
|
|
|
33
36
|
@media (prefers-reduced-motion: reduce) {
|
|
34
37
|
html { scroll-behavior: auto; }
|
|
35
38
|
.reveal { transition: none !important; transform: none !important; opacity: 1 !important; }
|
|
39
|
+
body::before { animation: none !important; }
|
|
36
40
|
}
|
|
37
41
|
body {
|
|
38
42
|
background: var(--bg);
|
|
@@ -42,15 +46,32 @@
|
|
|
42
46
|
line-height: 1.6;
|
|
43
47
|
-webkit-font-smoothing: antialiased;
|
|
44
48
|
}
|
|
49
|
+
/* ambient aurora drift — slow, low, "alive but not distracting" */
|
|
45
50
|
body::before {
|
|
51
|
+
content: "";
|
|
52
|
+
position: fixed; inset: -25vmax; z-index: 0; pointer-events: none;
|
|
53
|
+
background:
|
|
54
|
+
radial-gradient(38vmax 38vmax at 12% 6%, rgba(34,211,238,.20), transparent 60%),
|
|
55
|
+
radial-gradient(34vmax 34vmax at 90% 16%, rgba(168,85,247,.18), transparent 60%),
|
|
56
|
+
radial-gradient(30vmax 30vmax at 62% 104%, rgba(244,114,208,.14), transparent 62%);
|
|
57
|
+
filter: blur(34px) saturate(135%);
|
|
58
|
+
animation: aurora-drift 42s ease-in-out infinite;
|
|
59
|
+
will-change: transform;
|
|
60
|
+
}
|
|
61
|
+
/* faint tech grid, layered over the aurora and masked to the top */
|
|
62
|
+
body::after {
|
|
46
63
|
content: "";
|
|
47
64
|
position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
|
48
65
|
background-image:
|
|
49
|
-
linear-gradient(rgba(255,255,255,.
|
|
50
|
-
linear-gradient(90deg, rgba(255,255,255,.
|
|
51
|
-
background-size:
|
|
52
|
-
-webkit-mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgba(0,0,0,.
|
|
53
|
-
mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgba(0,0,0,.
|
|
66
|
+
linear-gradient(rgba(255,255,255,.028) 1px, transparent 1px),
|
|
67
|
+
linear-gradient(90deg, rgba(255,255,255,.028) 1px, transparent 1px);
|
|
68
|
+
background-size: 46px 46px;
|
|
69
|
+
-webkit-mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgba(0,0,0,.3) 60%, rgba(0,0,0,.1) 100%);
|
|
70
|
+
mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgba(0,0,0,.3) 60%, rgba(0,0,0,.1) 100%);
|
|
71
|
+
}
|
|
72
|
+
@keyframes aurora-drift {
|
|
73
|
+
0%,100% { transform: translate3d(0,0,0) scale(1); }
|
|
74
|
+
50% { transform: translate3d(2.5vmax,-2vmax,0) scale(1.08); }
|
|
54
75
|
}
|
|
55
76
|
.wrap { max-width: 1120px; margin: 0 auto; padding: 0 24px; position: relative; z-index: 1; }
|
|
56
77
|
a { color: inherit; }
|
|
@@ -98,7 +119,7 @@
|
|
|
98
119
|
color: var(--text-2); font-size: 17.5px; text-wrap: balance;
|
|
99
120
|
}
|
|
100
121
|
.sec-sub code {
|
|
101
|
-
color: var(--amber); background: rgba(
|
|
122
|
+
color: var(--amber); background: rgba(34,211,238,.09);
|
|
102
123
|
padding: 1px 7px; border-radius: 6px; font-size: .88em;
|
|
103
124
|
}
|
|
104
125
|
.reveal { opacity: 0; transform: translateY(16px); transition: opacity .6s ease, transform .6s ease; }
|
|
@@ -130,7 +151,7 @@
|
|
|
130
151
|
}
|
|
131
152
|
.btn:hover { transform: translateY(-1px); }
|
|
132
153
|
.btn-grad {
|
|
133
|
-
color: #
|
|
154
|
+
color: #05141a;
|
|
134
155
|
background: linear-gradient(92deg, var(--orange), var(--pink));
|
|
135
156
|
box-shadow: 0 8px 30px rgba(236,72,153,.28);
|
|
136
157
|
}
|
|
@@ -158,7 +179,7 @@
|
|
|
158
179
|
.concept-copy p b { color: var(--text); font-weight: 650; }
|
|
159
180
|
.concept-copy .chip-code {
|
|
160
181
|
font-family: var(--mono); font-size: .86em; color: var(--amber);
|
|
161
|
-
background: rgba(
|
|
182
|
+
background: rgba(34,211,238,.09); padding: 1px 7px; border-radius: 6px;
|
|
162
183
|
}
|
|
163
184
|
.analogy { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; }
|
|
164
185
|
.analogy span {
|
|
@@ -223,8 +244,8 @@
|
|
|
223
244
|
.node p { font-size: 13.5px; color: var(--text-2); margin-top: 6px; }
|
|
224
245
|
.node.src { border-color: rgba(96,165,250,.5); box-shadow: 0 0 32px rgba(96,165,250,.07); }
|
|
225
246
|
.node.mid { border-color: rgba(255,255,255,.14); }
|
|
226
|
-
.node.store { border-color: rgba(
|
|
227
|
-
.node.lock { border-color: rgba(
|
|
247
|
+
.node.store { border-color: rgba(34,211,238,.55); box-shadow: 0 0 32px rgba(34,211,238,.07); }
|
|
248
|
+
.node.lock { border-color: rgba(56,189,248,.55); }
|
|
228
249
|
.node.agent { border-color: rgba(74,222,128,.5); box-shadow: 0 0 32px rgba(74,222,128,.06); }
|
|
229
250
|
.node.agent h4 { color: #d9fbe5; }
|
|
230
251
|
.flow-arrow {
|
|
@@ -282,7 +303,7 @@
|
|
|
282
303
|
.cmd .name .v { color: #85859c; }
|
|
283
304
|
.cmd .name b { color: var(--amber); font-weight: 700; }
|
|
284
305
|
.cmd p { font-size: 13.5px; color: var(--text-2); margin-top: 6px; line-height: 1.5; }
|
|
285
|
-
.cmd mark { background: rgba(
|
|
306
|
+
.cmd mark { background: rgba(34,211,238,.25); color: var(--text); border-radius: 3px; padding: 0 1px; }
|
|
286
307
|
.no-results { text-align: center; color: var(--text-2); padding: 60px 0 30px; display: none; }
|
|
287
308
|
.no-results code { color: var(--amber); }
|
|
288
309
|
|
|
@@ -320,13 +341,13 @@
|
|
|
320
341
|
.reg tbody tr:last-child td { border-bottom: none; }
|
|
321
342
|
.reg .tapname {
|
|
322
343
|
font-family: var(--mono); font-size: 13px; font-weight: 700; color: var(--amber);
|
|
323
|
-
background: rgba(
|
|
344
|
+
background: rgba(34,211,238,.09); border: 1px solid rgba(34,211,238,.25);
|
|
324
345
|
border-radius: 8px; padding: 4px 11px; white-space: nowrap;
|
|
325
346
|
}
|
|
326
347
|
.reg .repo { font-family: var(--mono); font-size: 13px; color: var(--text-2); }
|
|
327
348
|
.reg .cnt {
|
|
328
349
|
font-family: var(--mono); font-size: 13px; font-weight: 700; color: var(--amber);
|
|
329
|
-
border: 1px solid rgba(
|
|
350
|
+
border: 1px solid rgba(34,211,238,.35); border-radius: 999px; padding: 4px 12px;
|
|
330
351
|
font-variant-numeric: tabular-nums; white-space: nowrap;
|
|
331
352
|
}
|
|
332
353
|
.reg .focus { color: var(--text-2); font-size: 14px; }
|
|
@@ -401,6 +422,7 @@
|
|
|
401
422
|
<li><a href="#commands">Commands</a></li>
|
|
402
423
|
<li><a href="#capabilities">Capabilities</a></li>
|
|
403
424
|
<li><a href="#registries">Registries</a></li>
|
|
425
|
+
<li><a href="roadmap.html">Roadmap ↗</a></li>
|
|
404
426
|
<li><a class="cta" href="#start">Get started</a></li>
|
|
405
427
|
</ul>
|
|
406
428
|
</div>
|
|
@@ -647,7 +669,7 @@ facilitate structured divergent thinking:
|
|
|
647
669
|
protocol, serve a catalog over HTTP, or auto-sync on a schedule.</p>
|
|
648
670
|
<div class="tags"><code>migrate</code><code>mcp</code><code>protocol</code><code>serve</code><code>schedule</code></div>
|
|
649
671
|
</div>
|
|
650
|
-
<div class="cap reveal" style="--ic-bg: rgba(
|
|
672
|
+
<div class="cap reveal" style="--ic-bg: rgba(34,211,238,.12); --ic-fg: #7dd3fc;">
|
|
651
673
|
<div class="ic">∿</div>
|
|
652
674
|
<h3>Reproducible & recoverable</h3>
|
|
653
675
|
<p>A v3 lock file pins exact state. Preview diffs before syncing,
|
|
@@ -757,7 +779,7 @@ ln -s ~/.boost-src/boost ~/bin/boost
|
|
|
757
779
|
<script>
|
|
758
780
|
// ---------- command data (mirrors boost_cli/cli.py exactly) ----------
|
|
759
781
|
const GROUPS = {
|
|
760
|
-
pkg: { icon: "pkg", color: "#
|
|
782
|
+
pkg: { icon: "pkg", color: "#22d3ee", title: "Package Management",
|
|
761
783
|
desc: "Install, remove, update & move skills across agents" },
|
|
762
784
|
find: { icon: "find", color: "#60a5fa", title: "Discovery & Search",
|
|
763
785
|
desc: "Find the right skill across taps and all of GitHub" },
|
|
@@ -769,7 +791,7 @@ const GROUPS = {
|
|
|
769
791
|
desc: "AI-powered authoring, merging & behavior preview" },
|
|
770
792
|
chk: { icon: "chk", color: "#4ade80", title: "Quality & Health",
|
|
771
793
|
desc: "Validate, audit, and keep your setup healthy" },
|
|
772
|
-
cfg: { icon: "cfg", color: "#
|
|
794
|
+
cfg: { icon: "cfg", color: "#5eead4", title: "Configuration",
|
|
773
795
|
desc: "Config, scaffolding, policy & integrations" },
|
|
774
796
|
team: { icon: "team", color: "#a78bfa", title: "Team & Collaboration",
|
|
775
797
|
desc: "Roll out, profile & coordinate skills across a team" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.16 → boost_skill_cli-1.0.18}/tests/functional/test_cli_configuration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|