codemble 0.3.0__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.
Files changed (178) hide show
  1. codemble-0.3.0/.env.example +7 -0
  2. codemble-0.3.0/.gitattributes +3 -0
  3. codemble-0.3.0/.github/ISSUE_TEMPLATE/bug_report.yml +55 -0
  4. codemble-0.3.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. codemble-0.3.0/.github/ISSUE_TEMPLATE/early_tester.yml +54 -0
  6. codemble-0.3.0/.github/ISSUE_TEMPLATE/feature_request.yml +36 -0
  7. codemble-0.3.0/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  8. codemble-0.3.0/.github/dependabot.yml +11 -0
  9. codemble-0.3.0/.github/workflows/ci.yml +56 -0
  10. codemble-0.3.0/.github/workflows/pages.yml +45 -0
  11. codemble-0.3.0/.github/workflows/publish-pypi.yml +38 -0
  12. codemble-0.3.0/.gitignore +30 -0
  13. codemble-0.3.0/.hallmark/log.json +37 -0
  14. codemble-0.3.0/.hallmark/preflight.json +9 -0
  15. codemble-0.3.0/.remember/now.md +3 -0
  16. codemble-0.3.0/.remember/tmp/last-ndc.ts +1 -0
  17. codemble-0.3.0/.remember/tmp/last-save-ts +1 -0
  18. codemble-0.3.0/.remember/tmp/last-save.json +1 -0
  19. codemble-0.3.0/.remember/tmp/save-session.pid +1 -0
  20. codemble-0.3.0/.remember/today-2026-07-19.md +10 -0
  21. codemble-0.3.0/AGENTS.md +6 -0
  22. codemble-0.3.0/CHANGELOG.md +144 -0
  23. codemble-0.3.0/CLAUDE.md +425 -0
  24. codemble-0.3.0/CODE_OF_CONDUCT.md +50 -0
  25. codemble-0.3.0/CONTRIBUTING.md +58 -0
  26. codemble-0.3.0/LICENSE +202 -0
  27. codemble-0.3.0/NOTICE +2 -0
  28. codemble-0.3.0/PKG-INFO +417 -0
  29. codemble-0.3.0/README.md +194 -0
  30. codemble-0.3.0/SECURITY.md +27 -0
  31. codemble-0.3.0/TESTING.md +47 -0
  32. codemble-0.3.0/assets/demo.gif +0 -0
  33. codemble-0.3.0/codemble/__init__.py +4 -0
  34. codemble-0.3.0/codemble/adapters/__init__.py +38 -0
  35. codemble-0.3.0/codemble/adapters/base.py +199 -0
  36. codemble-0.3.0/codemble/adapters/discovery.py +190 -0
  37. codemble-0.3.0/codemble/adapters/project.py +206 -0
  38. codemble-0.3.0/codemble/adapters/python_ast.py +766 -0
  39. codemble-0.3.0/codemble/adapters/typescript_tree_sitter.py +1263 -0
  40. codemble-0.3.0/codemble/checks/__init__.py +19 -0
  41. codemble-0.3.0/codemble/checks/service.py +380 -0
  42. codemble-0.3.0/codemble/cli.py +161 -0
  43. codemble-0.3.0/codemble/graph/__init__.py +17 -0
  44. codemble-0.3.0/codemble/graph/finalize.py +91 -0
  45. codemble-0.3.0/codemble/graph/layout.py +132 -0
  46. codemble-0.3.0/codemble/lens/__init__.py +18 -0
  47. codemble-0.3.0/codemble/lens/javascript_typescript.py +82 -0
  48. codemble-0.3.0/codemble/lens/python.py +71 -0
  49. codemble-0.3.0/codemble/llm/__init__.py +6 -0
  50. codemble-0.3.0/codemble/llm/providers.py +137 -0
  51. codemble-0.3.0/codemble/llm/study.py +439 -0
  52. codemble-0.3.0/codemble/progress/__init__.py +9 -0
  53. codemble-0.3.0/codemble/progress/store.py +160 -0
  54. codemble-0.3.0/codemble/server/__init__.py +6 -0
  55. codemble-0.3.0/codemble/server/app.py +273 -0
  56. codemble-0.3.0/codemble/server/runtime.py +68 -0
  57. codemble-0.3.0/codemble/web_dist/assets/index-DOBVd_-M.css +1 -0
  58. codemble-0.3.0/codemble/web_dist/assets/index-cIG6GGIB.js +5238 -0
  59. codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  60. codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  61. codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  62. codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  63. codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-500-normal-C-QwvIb3.woff +0 -0
  64. codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-500-normal-XI1O8euf.woff2 +0 -0
  65. codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-700-normal-CkoCYOiI.woff +0 -0
  66. codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-700-normal-DHcmzUO5.woff2 +0 -0
  67. codemble-0.3.0/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-BEdayliK.woff2 +0 -0
  68. codemble-0.3.0/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-CPSmNJAU.woff +0 -0
  69. codemble-0.3.0/codemble/web_dist/index.html +18 -0
  70. codemble-0.3.0/docs/adr/README.md +5 -0
  71. codemble-0.3.0/docs/plans/2026-07-19-install-ux-folder-picker-design.md +114 -0
  72. codemble-0.3.0/docs/plans/2026-07-19-install-ux-folder-picker-plan.md +1678 -0
  73. codemble-0.3.0/docs/plans/README.md +4 -0
  74. codemble-0.3.0/docs/plans/phase-1.md +64 -0
  75. codemble-0.3.0/docs/releases/checklist.md +14 -0
  76. codemble-0.3.0/docs/releases/v0.1.0.md +24 -0
  77. codemble-0.3.0/docs/releases/v0.2.0.md +37 -0
  78. codemble-0.3.0/docs/research/README.md +3 -0
  79. codemble-0.3.0/docs-site/.gitignore +3 -0
  80. codemble-0.3.0/docs-site/astro.config.mjs +115 -0
  81. codemble-0.3.0/docs-site/design.md +134 -0
  82. codemble-0.3.0/docs-site/package.json +21 -0
  83. codemble-0.3.0/docs-site/public/brand/favicon-16.png +0 -0
  84. codemble-0.3.0/docs-site/public/brand/favicon-32.png +0 -0
  85. codemble-0.3.0/docs-site/public/brand/icon-180.png +0 -0
  86. codemble-0.3.0/docs-site/public/brand/icon-192.png +0 -0
  87. codemble-0.3.0/docs-site/public/brand/icon-512.png +0 -0
  88. codemble-0.3.0/docs-site/public/brand/icon.svg +87 -0
  89. codemble-0.3.0/docs-site/public/brand/mark-animated.svg +177 -0
  90. codemble-0.3.0/docs-site/public/brand/mark.svg +63 -0
  91. codemble-0.3.0/docs-site/public/brand/plates/hero-chart.svg +5 -0
  92. codemble-0.3.0/docs-site/public/brand/plates/hero-field.svg +3 -0
  93. codemble-0.3.0/docs-site/public/brand/plates/hero-gold.svg +6 -0
  94. codemble-0.3.0/docs-site/public/brand/plates/kasumi-rule.svg +4 -0
  95. codemble-0.3.0/docs-site/public/brand/plates/plate-galaxy.svg +17 -0
  96. codemble-0.3.0/docs-site/public/brand/plates/plate-study.svg +17 -0
  97. codemble-0.3.0/docs-site/public/brand/plates/plate-system.svg +17 -0
  98. codemble-0.3.0/docs-site/public/brand/plates/seal.svg +6 -0
  99. codemble-0.3.0/docs-site/public/favicon.svg +63 -0
  100. codemble-0.3.0/docs-site/scripts/build-plates.mjs +317 -0
  101. codemble-0.3.0/docs-site/src/assets/codemble-mark-dark.svg +87 -0
  102. codemble-0.3.0/docs-site/src/assets/codemble-mark-light.svg +87 -0
  103. codemble-0.3.0/docs-site/src/components/Search.astro +403 -0
  104. codemble-0.3.0/docs-site/src/components/Tatebanko.astro +191 -0
  105. codemble-0.3.0/docs-site/src/content/docs/architecture.md +71 -0
  106. codemble-0.3.0/docs-site/src/content/docs/build-from-source.md +52 -0
  107. codemble-0.3.0/docs-site/src/content/docs/checks-and-lighting.md +46 -0
  108. codemble-0.3.0/docs-site/src/content/docs/contributing.md +19 -0
  109. codemble-0.3.0/docs-site/src/content/docs/correctness.md +22 -0
  110. codemble-0.3.0/docs-site/src/content/docs/early-testing.md +41 -0
  111. codemble-0.3.0/docs-site/src/content/docs/installation.md +77 -0
  112. codemble-0.3.0/docs-site/src/content/docs/introduction.md +40 -0
  113. codemble-0.3.0/docs-site/src/content/docs/progress/m1-parser.md +27 -0
  114. codemble-0.3.0/docs-site/src/content/docs/progress/m10-polyglot-release.md +36 -0
  115. codemble-0.3.0/docs-site/src/content/docs/progress/m2-galaxy.md +36 -0
  116. codemble-0.3.0/docs-site/src/content/docs/progress/m3-study.md +34 -0
  117. codemble-0.3.0/docs-site/src/content/docs/progress/m4-lens.md +34 -0
  118. codemble-0.3.0/docs-site/src/content/docs/progress/m5-checks.md +33 -0
  119. codemble-0.3.0/docs-site/src/content/docs/progress/m6-release.md +33 -0
  120. codemble-0.3.0/docs-site/src/content/docs/progress/m8-typescript.md +30 -0
  121. codemble-0.3.0/docs-site/src/content/docs/progress/m9-typescript-lens.md +30 -0
  122. codemble-0.3.0/docs-site/src/content/docs/quickstart.md +67 -0
  123. codemble-0.3.0/docs-site/src/content/docs/roadmap.md +32 -0
  124. codemble-0.3.0/docs-site/src/content/docs/star-chart.md +40 -0
  125. codemble-0.3.0/docs-site/src/content/docs/the-galaxy.md +44 -0
  126. codemble-0.3.0/docs-site/src/content.config.ts +7 -0
  127. codemble-0.3.0/docs-site/src/pages/index.astro +449 -0
  128. codemble-0.3.0/docs-site/src/styles/custom.css +203 -0
  129. codemble-0.3.0/docs-site/src/styles/landing.css +847 -0
  130. codemble-0.3.0/docs-site/src/styles/tokens.css +140 -0
  131. codemble-0.3.0/pyproject.toml +38 -0
  132. codemble-0.3.0/scripts/dev.sh +11 -0
  133. codemble-0.3.0/scripts/record_demo.sh +65 -0
  134. codemble-0.3.0/tests/fixtures/concepts_sample.py +34 -0
  135. codemble-0.3.0/tests/fixtures/polyglot/python_worker.py +6 -0
  136. codemble-0.3.0/tests/fixtures/polyglot/src/broken.ts +5 -0
  137. codemble-0.3.0/tests/fixtures/polyglot/src/legacy.js +5 -0
  138. codemble-0.3.0/tests/fixtures/polyglot/src/local.js +3 -0
  139. codemble-0.3.0/tests/fixtures/polyglot/src/main.ts +11 -0
  140. codemble-0.3.0/tests/fixtures/polyglot/src/reexport.ts +1 -0
  141. codemble-0.3.0/tests/fixtures/polyglot/src/util.ts +29 -0
  142. codemble-0.3.0/tests/fixtures/polyglot/src/widget.tsx +12 -0
  143. codemble-0.3.0/tests/fixtures/sampleproj/.gitignore +2 -0
  144. codemble-0.3.0/tests/fixtures/sampleproj/ambiguous.py +2 -0
  145. codemble-0.3.0/tests/fixtures/sampleproj/api.py +3 -0
  146. codemble-0.3.0/tests/fixtures/sampleproj/app.py +17 -0
  147. codemble-0.3.0/tests/fixtures/sampleproj/broken.py +2 -0
  148. codemble-0.3.0/tests/fixtures/sampleproj/cli.py +5 -0
  149. codemble-0.3.0/tests/fixtures/sampleproj/pkg/__init__.py +3 -0
  150. codemble-0.3.0/tests/fixtures/sampleproj/pkg/helpers.py +6 -0
  151. codemble-0.3.0/tests/fixtures/sampleproj/pkg/service.py +13 -0
  152. codemble-0.3.0/tests/fixtures/sampleproj/pkg/util.py +10 -0
  153. codemble-0.3.0/tests/fixtures/sampleproj/runner/__main__.py +2 -0
  154. codemble-0.3.0/tests/fixtures/sampleproj/shared.py +6 -0
  155. codemble-0.3.0/tests/test_checks.py +103 -0
  156. codemble-0.3.0/tests/test_graph_finalization.py +82 -0
  157. codemble-0.3.0/tests/test_progress.py +72 -0
  158. codemble-0.3.0/tests/test_project_parser.py +195 -0
  159. codemble-0.3.0/tests/test_python_ast.py +225 -0
  160. codemble-0.3.0/tests/test_server.py +323 -0
  161. codemble-0.3.0/tests/test_smoke.py +75 -0
  162. codemble-0.3.0/tests/test_study.py +229 -0
  163. codemble-0.3.0/tests/test_typescript_tree_sitter.py +340 -0
  164. codemble-0.3.0/web/README.md +22 -0
  165. codemble-0.3.0/web/index.html +17 -0
  166. codemble-0.3.0/web/package-lock.json +1415 -0
  167. codemble-0.3.0/web/package.json +25 -0
  168. codemble-0.3.0/web/scripts/check_graph_data.mjs +77 -0
  169. codemble-0.3.0/web/scripts/check_learner_session.mjs +417 -0
  170. codemble-0.3.0/web/scripts/record_demo.mjs +55 -0
  171. codemble-0.3.0/web/src/App.jsx +689 -0
  172. codemble-0.3.0/web/src/GalaxyCanvas.jsx +235 -0
  173. codemble-0.3.0/web/src/graphData.js +187 -0
  174. codemble-0.3.0/web/src/learnerSession.js +681 -0
  175. codemble-0.3.0/web/src/main.jsx +20 -0
  176. codemble-0.3.0/web/src/styles.css +1411 -0
  177. codemble-0.3.0/web/src/tokens.css +23 -0
  178. codemble-0.3.0/web/vite.config.js +17 -0
@@ -0,0 +1,7 @@
1
+ # Codemble — bring your own key (pick one provider; never commit real keys).
2
+ # Keys can also live in ~/.codemble/config — see docs: https://udhawan97.github.io/Codemble/installation/
3
+ ANTHROPIC_API_KEY=
4
+ OPENAI_API_KEY=
5
+ CODEMBLE_PROVIDER=
6
+ CODEMBLE_ANTHROPIC_MODEL=claude-sonnet-5
7
+ CODEMBLE_OPENAI_MODEL=gpt-5.4-mini
@@ -0,0 +1,3 @@
1
+ # Generated Vite bundles embed shader/source strings whose intentional spaces
2
+ # should not make repository-wide `git diff --check` fail.
3
+ codemble/web_dist/** -whitespace
@@ -0,0 +1,55 @@
1
+ name: Bug report
2
+ description: Something broke, rendered wrong, or taught wrong.
3
+ labels: ["bug", "triage"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Security problems? Use [SECURITY.md](../../SECURITY.md), not a public issue.
9
+ **A wrong explanation or wrong check answer is a bug** — report it! Accuracy is the product.
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: Version / commit
14
+ placeholder: codemble 0.2.0 / abc1234
15
+ validations:
16
+ required: true
17
+ - type: dropdown
18
+ id: area
19
+ attributes:
20
+ label: Where did it go wrong?
21
+ options:
22
+ - Parser / graph (wrong structure)
23
+ - Galaxy UI (rendering, zoom, camera)
24
+ - Explanation (wrong or ungrounded)
25
+ - Language lens (wrong idiom claim)
26
+ - Checks (wrong answer or unfair question)
27
+ - Install / CLI
28
+ - Docs / website
29
+ validations:
30
+ required: true
31
+ - type: textarea
32
+ id: what
33
+ attributes:
34
+ label: What happened
35
+ validations:
36
+ required: true
37
+ - type: textarea
38
+ id: steps
39
+ attributes:
40
+ label: Steps to reproduce
41
+ description: A minimal code snippet that reproduces a wrong parse/explanation is gold.
42
+ validations:
43
+ required: true
44
+ - type: textarea
45
+ id: env
46
+ attributes:
47
+ label: Environment
48
+ placeholder: OS, Python version, browser
49
+ - type: checkboxes
50
+ id: confirm
51
+ attributes:
52
+ label: Confirmations
53
+ options:
54
+ - label: I am not pasting any API keys or private code I can't share.
55
+ required: true
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Questions & ideas
4
+ url: https://github.com/udhawan97/Codemble/discussions
5
+ about: Ask anything, share what your galaxy looks like.
6
+ - name: Security report (private)
7
+ url: https://github.com/udhawan97/Codemble/security/advisories/new
8
+ about: Never report security issues in public issues.
@@ -0,0 +1,54 @@
1
+ name: v0.2.0 early-tester report
2
+ description: Report your first unaided run without sharing private code.
3
+ labels: ["feedback"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thank you. Do not paste source, private project names, credentials, or API keys.
9
+ Quote your confusion in your own words—the rough edges are the evidence we need.
10
+ - type: dropdown
11
+ id: install
12
+ attributes:
13
+ label: Install route
14
+ options:
15
+ - pipx from v0.2.0 Git tag
16
+ - uvx from v0.2.0 Git tag
17
+ - source checkout
18
+ validations:
19
+ required: true
20
+ - type: input
21
+ id: environment
22
+ attributes:
23
+ label: Environment
24
+ placeholder: macOS / Linux / Windows, Python version, browser
25
+ validations:
26
+ required: true
27
+ - type: textarea
28
+ id: confusion
29
+ attributes:
30
+ label: First confusing moment, verbatim
31
+ description: What did you expect, and what did you see instead?
32
+ validations:
33
+ required: true
34
+ - type: dropdown
35
+ id: lit
36
+ attributes:
37
+ label: Did you light one system without help?
38
+ options:
39
+ - "Yes"
40
+ - "No"
41
+ validations:
42
+ required: true
43
+ - type: textarea
44
+ id: correctness
45
+ attributes:
46
+ label: Anything structurally or educationally wrong?
47
+ description: Describe identifiers and line numbers only when safe; never paste private source.
48
+ - type: checkboxes
49
+ id: privacy
50
+ attributes:
51
+ label: Privacy check
52
+ options:
53
+ - label: I removed private code, project names, credentials, and API keys.
54
+ required: true
@@ -0,0 +1,36 @@
1
+ name: Feature request
2
+ description: Propose something that helps a learner understand their code.
3
+ labels: ["enhancement", "triage"]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Problem
9
+ description: What can't a learner do or understand today?
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: solution
14
+ attributes:
15
+ label: Proposed solution
16
+ - type: dropdown
17
+ id: area
18
+ attributes:
19
+ label: Area
20
+ options:
21
+ - Parser / adapters (new language?)
22
+ - Galaxy / rendering
23
+ - Explanations / language lens
24
+ - Checks / game loop
25
+ - CLI / install
26
+ - Docs / website
27
+ validations:
28
+ required: true
29
+ - type: checkboxes
30
+ id: fit
31
+ attributes:
32
+ label: Fit with Codemble's principles
33
+ options:
34
+ - label: This helps a learner understand their code (not just decorate the galaxy).
35
+ required: true
36
+ - label: This keeps explanations grounded — no invented structure.
@@ -0,0 +1,20 @@
1
+ <!-- Thanks! Keep it small and runnable. Link the CLAUDE.md milestone this serves. -->
2
+
3
+ ## What & why
4
+
5
+ ## Type
6
+ - [ ] feat - [ ] fix - [ ] docs - [ ] refactor - [ ] test - [ ] chore
7
+
8
+ ## Checklist
9
+ - [ ] `pytest` and `ruff check .` pass
10
+ - [ ] Conventional Commit(s), signed off (`-s`)
11
+ - [ ] No API keys, no proprietary code samples
12
+ - [ ] Project runs end-to-end after this change
13
+
14
+ ## If this touches the parser / graph
15
+ - [ ] Unit tests cover the new structure
16
+ - [ ] Unresolved calls are flagged, not dropped or invented
17
+
18
+ ## If this touches explanations (LLM)
19
+ - [ ] Output remains grounded (real identifiers, `file:line` links)
20
+ - [ ] Check answers still come from the graph, never the model
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: "/"
5
+ schedule: { interval: monthly }
6
+ - package-ecosystem: npm
7
+ directory: "/docs-site"
8
+ schedule: { interval: monthly }
9
+ - package-ecosystem: github-actions
10
+ directory: "/"
11
+ schedule: { interval: monthly }
@@ -0,0 +1,56 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v7
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: "3.11"
16
+ - name: Install
17
+ run: pip install -e ".[dev]"
18
+ - name: Lint
19
+ run: ruff check .
20
+ - name: Test
21
+ run: pytest
22
+ docs-check:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: actions/checkout@v7
26
+ - uses: actions/setup-node@v4
27
+ with:
28
+ node-version: "22"
29
+ - name: astro check
30
+ run: |
31
+ cd docs-site
32
+ npm install
33
+ npm run check
34
+ web-check:
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v7
38
+ - uses: actions/setup-node@v4
39
+ with:
40
+ node-version: "22"
41
+ - name: build web app
42
+ run: |
43
+ cd web
44
+ npm install
45
+ npm run check
46
+ package-check:
47
+ runs-on: ubuntu-latest
48
+ steps:
49
+ - uses: actions/checkout@v7
50
+ - uses: actions/setup-python@v5
51
+ with:
52
+ python-version: "3.11"
53
+ - name: Build wheel and verify packaged SPA
54
+ run: |
55
+ python -m pip wheel . --no-deps --wheel-dir /tmp/codemble-wheel
56
+ python -c 'import pathlib, zipfile; wheel = next(pathlib.Path("/tmp/codemble-wheel").glob("*.whl")); names = zipfile.ZipFile(wheel).namelist(); assert "codemble/web_dist/index.html" in names; assert any(name.startswith("codemble/web_dist/assets/") for name in names)'
@@ -0,0 +1,45 @@
1
+ name: Docs (GitHub Pages)
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs-site/**"
8
+ - ".github/workflows/pages.yml"
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ concurrency:
17
+ group: pages
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ build:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v7
25
+ - uses: actions/setup-node@v4
26
+ with:
27
+ node-version: "22"
28
+ - uses: actions/configure-pages@v5
29
+ - name: Build Astro site
30
+ run: |
31
+ cd docs-site
32
+ npm install
33
+ npm run build
34
+ - uses: actions/upload-pages-artifact@v3
35
+ with:
36
+ path: docs-site/dist
37
+ deploy:
38
+ needs: build
39
+ runs-on: ubuntu-latest
40
+ environment:
41
+ name: github-pages
42
+ url: ${{ steps.deployment.outputs.page_url }}
43
+ steps:
44
+ - id: deployment
45
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,38 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v7
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: "3.11"
16
+ - name: Build sdist and wheel
17
+ run: |
18
+ python -m pip install build
19
+ python -m build
20
+ - name: Verify the wheel carries the packaged SPA
21
+ run: python -c 'import pathlib, zipfile; wheel = next(pathlib.Path("dist").glob("*.whl")); names = zipfile.ZipFile(wheel).namelist(); assert "codemble/web_dist/index.html" in names; assert any(name.startswith("codemble/web_dist/assets/") for name in names)'
22
+ - uses: actions/upload-artifact@v4
23
+ with:
24
+ name: dist
25
+ path: dist/
26
+
27
+ publish:
28
+ needs: build
29
+ runs-on: ubuntu-latest
30
+ environment: pypi
31
+ permissions:
32
+ id-token: write
33
+ steps:
34
+ - uses: actions/download-artifact@v4
35
+ with:
36
+ name: dist
37
+ path: dist/
38
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,30 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+ .pytest_cache/
11
+ .ruff_cache/
12
+ .coverage
13
+ htmlcov/
14
+
15
+ # Node / docs-site & web
16
+ node_modules/
17
+ docs-site/dist/
18
+ docs-site/.astro/
19
+ web/dist/
20
+
21
+ # Env & local state
22
+ .env
23
+ .DS_Store
24
+ logs/
25
+ *.log
26
+
27
+ # Editors
28
+ .idea/
29
+ .vscode/
30
+ _to_delete/
@@ -0,0 +1,37 @@
1
+ [
2
+ {
3
+ "date": "2026-07-19",
4
+ "macrostructure": "Map / Diagram",
5
+ "theme": "Observatory Instrument",
6
+ "enrichment": "none",
7
+ "brief": "Codemble deterministic galaxy renderer",
8
+ "critique": "P5 H5 E5 S5 R5 V5",
9
+ "slop_test": "pass (1-57, including 38a)"
10
+ },
11
+ {
12
+ "date": "2026-07-19",
13
+ "macrostructure": "Progress Ledger",
14
+ "theme": "Observatory Instrument",
15
+ "enrichment": "none",
16
+ "brief": "Codemble language star chart",
17
+ "variation": "syntax inventory rows with graph-derived progress"
18
+ },
19
+ {
20
+ "date": "2026-07-19",
21
+ "macrostructure": "Focused Readout",
22
+ "theme": "Observatory Instrument",
23
+ "enrichment": "none",
24
+ "brief": "Codemble graph-only active recall",
25
+ "variation": "one-question system overlay with a single illumination payoff",
26
+ "slop_test": "pass (plain controls, complete states, 320 px verified)"
27
+ },
28
+ {
29
+ "date": "2026-07-19",
30
+ "macrostructure": "Calibration Readout",
31
+ "theme": "Observatory Instrument",
32
+ "enrichment": "real product demo GIF",
33
+ "brief": "Codemble ambiguous Home and Unchartable states",
34
+ "variation": "ranked evidence rows, raw-source failure state, one 420ms glow pulse",
35
+ "slop_test": "pass (desktop and 320 px, reduced motion, no new visual language)"
36
+ }
37
+ ]
@@ -0,0 +1,9 @@
1
+ {
2
+ "date": "2026-07-19",
3
+ "design_system": "docs-site/design.md",
4
+ "font_stack": ["Sora", "Inter", "JetBrains Mono"],
5
+ "framework": "Vite + React",
6
+ "motion": "custom house easing; no motion library",
7
+ "palette": "locked Observatory Instrument tokens",
8
+ "spacing": "4-point scale"
9
+ }
@@ -0,0 +1,3 @@
1
+
2
+ ## 07:08 | friendly-wizard-claude/work-planning-f2e933
3
+ Committed modes & Ollama spec (3-tier: struct + Gemma 4 12B + cloud), reversed Non-Goal, fixed cache & endpoint bugs, phases 1-3 (backend) queued.
@@ -0,0 +1 @@
1
+ 1784461401
@@ -0,0 +1 @@
1
+ 1784462904
@@ -0,0 +1 @@
1
+ {"session": "391dcaa8-2bc2-4cf0-b18d-6a3dca5df88e", "line": 354}
@@ -0,0 +1 @@
1
+ 77217
@@ -0,0 +1,10 @@
1
+ ## 01:49 | friendly-helper-claude/codemble-website-redesign-235ec9
2
+ Codemble: hero→Edo atlas+tatebanko parallax (Tatebanko.astro, build-plates.mjs); expandable search+docs/nav (Search.astro); landing→numbered plates.
3
+ ## 01:50 | friendly-helper-claude/codemble-website-redesign-235ec9
4
+ Redesigned Codemble website (Edo star atlas); SVG plates; Tatebanko parallax hero; expandable Search; Starlight docs
5
+ ## 04:35 | friendly-wizard-claude/what-to-work-on-next-c1f75f
6
+ Dogfood learner loop; fixed checks/service.py (4+ ans → 0 distract); verified 5 TESTING.md steps; began UI palette
7
+ ```
8
+ ## 06:42 | friendly-wizard-claude/work-planning-f2e933
9
+ Reopened #13; defer v0.2.1 pending web-app-install-ux merge; scope coverage: 4 streams (HTML/CSS adapters, deepen langs, lens enrichment, easy/expert modes)
10
+ ```
@@ -0,0 +1,6 @@
1
+ # Codemble — agent instructions
2
+ Read CLAUDE.md in this directory in full before doing anything.
3
+ It is the operating guide: follow its Session Protocol, maintain its
4
+ Current State checkboxes and Decision Log, respect its Non-Goals and
5
+ Correctness Contract. CLAUDE.md is the single source of truth; this file
6
+ only points to it. Keep the two in sync by editing CLAUDE.md only.
@@ -0,0 +1,144 @@
1
+ # Changelog
2
+
3
+ All notable changes to Codemble are documented here.
4
+ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning: [SemVer](https://semver.org/).
5
+
6
+ ## [Unreleased]
7
+
8
+ ## [0.3.0] - 2026-07-19
9
+
10
+ ### Added
11
+ - Bare `codemble` now opens the browser to an in-app project picker: browse
12
+ home folders, reopen recent projects, and re-scope over-cap projects without
13
+ touching the terminal.
14
+ - The local server rejects foreign `Host` headers, keeping the picker API
15
+ reachable only from the learner's own machine.
16
+ - Codemble is published to PyPI, so installing is `uvx codemble` or
17
+ `pipx install codemble` with no git URL or tag.
18
+
19
+ ### Changed
20
+ - `codemble` with flags but no path serves the picker instead of the current
21
+ directory; pass a path (or `--path`) for the previous behaviour.
22
+ - Rebuilt the packaged app on the Formal Edo palette, so the galaxy and the
23
+ public site finally share one set of values. The app's tokens already imported
24
+ the site's, but `codemble/web_dist` had not been rebuilt since before the
25
+ redesign, so every shipped build still rendered the retired palette.
26
+ - Self-hosted Shippori Mincho and Zen Kaku Gothic New in the app and dropped
27
+ Sora and Inter. The site loads these faces from the Google Fonts CDN; the app
28
+ must not, because it runs locally and offline. Net bundle change is smaller.
29
+ - Illumination now owns the top of the brightness range: the unlit centrality
30
+ ramp stops at `--cm-ink-2` (8.2:1) and a lit star uses `--cm-star-high`
31
+ (12.1:1). Previously a busy un-understood module outshone an understood one
32
+ 17.4:1 to 8.5:1, which inverted the meaning of lighting a region.
33
+
34
+ ### Fixed
35
+ - Canvas colours authored as `color-mix()` reached WebGL as unparsed text and
36
+ rendered black, because a custom property returns its authored value rather
37
+ than a resolved colour. Affected unchartable nodes and every "possible call"
38
+ edge — exactly the uncertainty the Correctness Contract requires to stay
39
+ visible. Palette values are now resolved to plain `rgb()` before rendering.
40
+ - The partial-parse notice said "its language parser" when reporting more than
41
+ one file.
42
+ - Multi-answer checks offered no wrong option once a question had four or more
43
+ correct answers, so selecting every option lit the region without proving
44
+ anything. Checks now always offer wrong options alongside their answers, and a
45
+ question the graph cannot supply a wrong option for is dropped rather than
46
+ asked. On this repository the change removed all 17 such questions out of 107
47
+ while leaving every region's check count unchanged.
48
+
49
+ ### Added
50
+ - Expanding site search in the header of both the landing page and every docs
51
+ page, backed by Pagefind with keyboard shortcut, arrow-key navigation, and an
52
+ explicit message when the index has not been built yet.
53
+ - Generated Edo star-atlas plate artwork (`docs-site/scripts/build-plates.mjs`),
54
+ emitted from a fixed seed so the same script always produces the same sky.
55
+ - A standalone landing page at `docs-site/src/pages/index.astro`, structured as
56
+ four numbered plates in 起承転結 order with a layered tatebanko hero.
57
+
58
+ ### Changed
59
+ - Centralized graph canonicalization, Home selection, centrality, annotation
60
+ normalization, edge deduplication, and deterministic layout behind one graph
61
+ finalization interface shared by every language adapter and project composition.
62
+ - Moved scale guarding and scope selection into `ProjectParser`, with one
63
+ reusable project intake that preserves adapter file ownership through parsing
64
+ instead of rediscovering the same scope in each adapter.
65
+ - Moved learner navigation, language focus, study/check/Home requests, progress
66
+ refresh, and illumination sequencing behind one testable learner-session
67
+ interface with HTTP and in-memory adapters, leaving React to render snapshots.
68
+ - Reused one internal JavaScript/TypeScript syntax-evidence index across
69
+ entrypoint, concept, call, binding, and imported-symbol resolution passes,
70
+ eliminating repeated ownership maps and whole-graph symbol scans.
71
+ - Rebuilt the public site on the Formal Edo palette (kachi indigo, ruri lapis,
72
+ kohaku amber, gofun white) with Shippori Mincho and Zen Kaku Gothic New. The
73
+ accent contracts are unchanged: kohaku still means understanding, ruri still
74
+ means interaction.
75
+
76
+ ### Fixed
77
+ - The current docs page was marked with a filled kohaku pill, which claimed
78
+ "understood" about a navigation state; it now uses ruri, the interaction accent.
79
+ - The landing hero overflowed a 320px viewport, putting a call to action and the
80
+ install command outside the clipped area where they could not be reached.
81
+
82
+ ### Removed
83
+ - `docs-site/src/content/docs/index.mdx`, replaced by the standalone landing
84
+ page; its content moved there.
85
+
86
+ ## [0.2.0] - 2026-07-19
87
+
88
+ ### Added
89
+ - Language-neutral `ProjectParser` discovery and graph composition with global
90
+ Home selection, adapter collision checks, and Python graph-byte compatibility.
91
+ - Official tree-sitter JavaScript/TypeScript adapter for JS, JSX, MJS, CJS, TS,
92
+ TSX, MTS, and CTS modules, definitions, imports, calls, entrypoint ranking,
93
+ exact source spans, file hashes, and honest partial-parse recovery.
94
+ - Language-tagged graph schema 4 concept annotations plus deterministic
95
+ JavaScript/TypeScript Lens notes for async/await, arrows, destructuring,
96
+ optional chaining, nullish coalescing, modules, types, interfaces, generics,
97
+ and JSX.
98
+ - Accessible language focus for mixed galaxies, systems, Study navigation, and
99
+ the star chart. It filters a view of the graph without changing coordinates,
100
+ progress, source truth, uncertainty, or cross-language navigation.
101
+ - Phase 1 mixed-project fixtures, pure frontend focus/chart contracts, packaged
102
+ production SPA, public documentation, and a versioned `v0.2.0` wheel.
103
+
104
+ ## [0.1.0] - 2026-07-19
105
+
106
+ ### Added
107
+ - Repository scaffold: README, CLAUDE.md agent brief, docs, docs-site (Astro + Starlight), CI, community files.
108
+ - Deterministic Python AST parser with language-neutral graph models, source spans,
109
+ imports and calls with explicit certainty, entrypoint ranking, render metadata,
110
+ file hashes, partial-parse reporting, and schema-versioned JSON.
111
+ - `codemble parse <path> --out graph.json` CLI command.
112
+ - Parser fixture suite covering exact resolution, ambiguity, external calls,
113
+ ignored files, syntax errors, entrypoints, centrality, and byte determinism.
114
+ - Deterministic galaxy and system coordinates with one source module per region,
115
+ aggregated import routes, LOC sizing, centrality brightness, and Home markers.
116
+ - `codemble <path>` local FastAPI server with graph/source APIs, production SPA
117
+ serving, scripted three-level semantic zoom, keyboard navigation, responsive
118
+ observatory UI, WebGL failure handling, and a 1,000-node renderer probe.
119
+ - Web build gate in CI and `scripts/dev.sh` for the backend/Vite development loop.
120
+ - Study payloads with exact source lines, parser-proven neighbor evidence, and
121
+ clickable `file:line` citations in the responsive study panel.
122
+ - Deep narration module with direct Anthropic Messages and OpenAI Responses
123
+ adapters, environment/TOML BYO-key configuration, file-hash disk caching,
124
+ response grounding validation, and explicit no-key/error states.
125
+ - Parser-proven Python concept annotations for decorators, comprehensions,
126
+ generators, context managers, async/await, dunder methods, exception handling,
127
+ and type hints, serialized in graph schema 2.
128
+ - Python Lens notes anchored to exact source lines plus a language star chart
129
+ that separates concepts encountered, structures studied this session, and
130
+ graph-derived understanding without inventing progress.
131
+ - Four deterministic active-check families derived and scored only from call
132
+ edges, import edges, direct callers, and parser-ranked entrypoints.
133
+ - Region illumination persisted atomically under `~/.codemble/progress`, with
134
+ per-region file signatures so editing one file re-dims only its own system.
135
+ - Responsive System check flow with explicit wrong-answer evidence, suite
136
+ progress, restart-safe completion, and star-chart understanding updates.
137
+ - Honest Home calibration when top-ranked entrypoints are ambiguous, plus a
138
+ parser-validated `--entrypoint` override.
139
+ - A 300-file Phase 0 guard with interactive subdirectory selection and an
140
+ explicit non-interactive `--path` route.
141
+ - Unchartable syntax-error nodes, raw-source access, and model narration
142
+ suppression for partial parses.
143
+ - Production SPA assets inside the Python wheel, versioned `pipx`/`uvx` Git
144
+ install routes, an automated real-app demo recorder, and the v0.1.0 GIF.