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.
- codemble-0.3.0/.env.example +7 -0
- codemble-0.3.0/.gitattributes +3 -0
- codemble-0.3.0/.github/ISSUE_TEMPLATE/bug_report.yml +55 -0
- codemble-0.3.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- codemble-0.3.0/.github/ISSUE_TEMPLATE/early_tester.yml +54 -0
- codemble-0.3.0/.github/ISSUE_TEMPLATE/feature_request.yml +36 -0
- codemble-0.3.0/.github/PULL_REQUEST_TEMPLATE.md +20 -0
- codemble-0.3.0/.github/dependabot.yml +11 -0
- codemble-0.3.0/.github/workflows/ci.yml +56 -0
- codemble-0.3.0/.github/workflows/pages.yml +45 -0
- codemble-0.3.0/.github/workflows/publish-pypi.yml +38 -0
- codemble-0.3.0/.gitignore +30 -0
- codemble-0.3.0/.hallmark/log.json +37 -0
- codemble-0.3.0/.hallmark/preflight.json +9 -0
- codemble-0.3.0/.remember/now.md +3 -0
- codemble-0.3.0/.remember/tmp/last-ndc.ts +1 -0
- codemble-0.3.0/.remember/tmp/last-save-ts +1 -0
- codemble-0.3.0/.remember/tmp/last-save.json +1 -0
- codemble-0.3.0/.remember/tmp/save-session.pid +1 -0
- codemble-0.3.0/.remember/today-2026-07-19.md +10 -0
- codemble-0.3.0/AGENTS.md +6 -0
- codemble-0.3.0/CHANGELOG.md +144 -0
- codemble-0.3.0/CLAUDE.md +425 -0
- codemble-0.3.0/CODE_OF_CONDUCT.md +50 -0
- codemble-0.3.0/CONTRIBUTING.md +58 -0
- codemble-0.3.0/LICENSE +202 -0
- codemble-0.3.0/NOTICE +2 -0
- codemble-0.3.0/PKG-INFO +417 -0
- codemble-0.3.0/README.md +194 -0
- codemble-0.3.0/SECURITY.md +27 -0
- codemble-0.3.0/TESTING.md +47 -0
- codemble-0.3.0/assets/demo.gif +0 -0
- codemble-0.3.0/codemble/__init__.py +4 -0
- codemble-0.3.0/codemble/adapters/__init__.py +38 -0
- codemble-0.3.0/codemble/adapters/base.py +199 -0
- codemble-0.3.0/codemble/adapters/discovery.py +190 -0
- codemble-0.3.0/codemble/adapters/project.py +206 -0
- codemble-0.3.0/codemble/adapters/python_ast.py +766 -0
- codemble-0.3.0/codemble/adapters/typescript_tree_sitter.py +1263 -0
- codemble-0.3.0/codemble/checks/__init__.py +19 -0
- codemble-0.3.0/codemble/checks/service.py +380 -0
- codemble-0.3.0/codemble/cli.py +161 -0
- codemble-0.3.0/codemble/graph/__init__.py +17 -0
- codemble-0.3.0/codemble/graph/finalize.py +91 -0
- codemble-0.3.0/codemble/graph/layout.py +132 -0
- codemble-0.3.0/codemble/lens/__init__.py +18 -0
- codemble-0.3.0/codemble/lens/javascript_typescript.py +82 -0
- codemble-0.3.0/codemble/lens/python.py +71 -0
- codemble-0.3.0/codemble/llm/__init__.py +6 -0
- codemble-0.3.0/codemble/llm/providers.py +137 -0
- codemble-0.3.0/codemble/llm/study.py +439 -0
- codemble-0.3.0/codemble/progress/__init__.py +9 -0
- codemble-0.3.0/codemble/progress/store.py +160 -0
- codemble-0.3.0/codemble/server/__init__.py +6 -0
- codemble-0.3.0/codemble/server/app.py +273 -0
- codemble-0.3.0/codemble/server/runtime.py +68 -0
- codemble-0.3.0/codemble/web_dist/assets/index-DOBVd_-M.css +1 -0
- codemble-0.3.0/codemble/web_dist/assets/index-cIG6GGIB.js +5238 -0
- codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- codemble-0.3.0/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-500-normal-C-QwvIb3.woff +0 -0
- codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-500-normal-XI1O8euf.woff2 +0 -0
- codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-700-normal-CkoCYOiI.woff +0 -0
- codemble-0.3.0/codemble/web_dist/assets/shippori-mincho-latin-700-normal-DHcmzUO5.woff2 +0 -0
- codemble-0.3.0/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-BEdayliK.woff2 +0 -0
- codemble-0.3.0/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-CPSmNJAU.woff +0 -0
- codemble-0.3.0/codemble/web_dist/index.html +18 -0
- codemble-0.3.0/docs/adr/README.md +5 -0
- codemble-0.3.0/docs/plans/2026-07-19-install-ux-folder-picker-design.md +114 -0
- codemble-0.3.0/docs/plans/2026-07-19-install-ux-folder-picker-plan.md +1678 -0
- codemble-0.3.0/docs/plans/README.md +4 -0
- codemble-0.3.0/docs/plans/phase-1.md +64 -0
- codemble-0.3.0/docs/releases/checklist.md +14 -0
- codemble-0.3.0/docs/releases/v0.1.0.md +24 -0
- codemble-0.3.0/docs/releases/v0.2.0.md +37 -0
- codemble-0.3.0/docs/research/README.md +3 -0
- codemble-0.3.0/docs-site/.gitignore +3 -0
- codemble-0.3.0/docs-site/astro.config.mjs +115 -0
- codemble-0.3.0/docs-site/design.md +134 -0
- codemble-0.3.0/docs-site/package.json +21 -0
- codemble-0.3.0/docs-site/public/brand/favicon-16.png +0 -0
- codemble-0.3.0/docs-site/public/brand/favicon-32.png +0 -0
- codemble-0.3.0/docs-site/public/brand/icon-180.png +0 -0
- codemble-0.3.0/docs-site/public/brand/icon-192.png +0 -0
- codemble-0.3.0/docs-site/public/brand/icon-512.png +0 -0
- codemble-0.3.0/docs-site/public/brand/icon.svg +87 -0
- codemble-0.3.0/docs-site/public/brand/mark-animated.svg +177 -0
- codemble-0.3.0/docs-site/public/brand/mark.svg +63 -0
- codemble-0.3.0/docs-site/public/brand/plates/hero-chart.svg +5 -0
- codemble-0.3.0/docs-site/public/brand/plates/hero-field.svg +3 -0
- codemble-0.3.0/docs-site/public/brand/plates/hero-gold.svg +6 -0
- codemble-0.3.0/docs-site/public/brand/plates/kasumi-rule.svg +4 -0
- codemble-0.3.0/docs-site/public/brand/plates/plate-galaxy.svg +17 -0
- codemble-0.3.0/docs-site/public/brand/plates/plate-study.svg +17 -0
- codemble-0.3.0/docs-site/public/brand/plates/plate-system.svg +17 -0
- codemble-0.3.0/docs-site/public/brand/plates/seal.svg +6 -0
- codemble-0.3.0/docs-site/public/favicon.svg +63 -0
- codemble-0.3.0/docs-site/scripts/build-plates.mjs +317 -0
- codemble-0.3.0/docs-site/src/assets/codemble-mark-dark.svg +87 -0
- codemble-0.3.0/docs-site/src/assets/codemble-mark-light.svg +87 -0
- codemble-0.3.0/docs-site/src/components/Search.astro +403 -0
- codemble-0.3.0/docs-site/src/components/Tatebanko.astro +191 -0
- codemble-0.3.0/docs-site/src/content/docs/architecture.md +71 -0
- codemble-0.3.0/docs-site/src/content/docs/build-from-source.md +52 -0
- codemble-0.3.0/docs-site/src/content/docs/checks-and-lighting.md +46 -0
- codemble-0.3.0/docs-site/src/content/docs/contributing.md +19 -0
- codemble-0.3.0/docs-site/src/content/docs/correctness.md +22 -0
- codemble-0.3.0/docs-site/src/content/docs/early-testing.md +41 -0
- codemble-0.3.0/docs-site/src/content/docs/installation.md +77 -0
- codemble-0.3.0/docs-site/src/content/docs/introduction.md +40 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m1-parser.md +27 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m10-polyglot-release.md +36 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m2-galaxy.md +36 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m3-study.md +34 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m4-lens.md +34 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m5-checks.md +33 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m6-release.md +33 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m8-typescript.md +30 -0
- codemble-0.3.0/docs-site/src/content/docs/progress/m9-typescript-lens.md +30 -0
- codemble-0.3.0/docs-site/src/content/docs/quickstart.md +67 -0
- codemble-0.3.0/docs-site/src/content/docs/roadmap.md +32 -0
- codemble-0.3.0/docs-site/src/content/docs/star-chart.md +40 -0
- codemble-0.3.0/docs-site/src/content/docs/the-galaxy.md +44 -0
- codemble-0.3.0/docs-site/src/content.config.ts +7 -0
- codemble-0.3.0/docs-site/src/pages/index.astro +449 -0
- codemble-0.3.0/docs-site/src/styles/custom.css +203 -0
- codemble-0.3.0/docs-site/src/styles/landing.css +847 -0
- codemble-0.3.0/docs-site/src/styles/tokens.css +140 -0
- codemble-0.3.0/pyproject.toml +38 -0
- codemble-0.3.0/scripts/dev.sh +11 -0
- codemble-0.3.0/scripts/record_demo.sh +65 -0
- codemble-0.3.0/tests/fixtures/concepts_sample.py +34 -0
- codemble-0.3.0/tests/fixtures/polyglot/python_worker.py +6 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/broken.ts +5 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/legacy.js +5 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/local.js +3 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/main.ts +11 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/reexport.ts +1 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/util.ts +29 -0
- codemble-0.3.0/tests/fixtures/polyglot/src/widget.tsx +12 -0
- codemble-0.3.0/tests/fixtures/sampleproj/.gitignore +2 -0
- codemble-0.3.0/tests/fixtures/sampleproj/ambiguous.py +2 -0
- codemble-0.3.0/tests/fixtures/sampleproj/api.py +3 -0
- codemble-0.3.0/tests/fixtures/sampleproj/app.py +17 -0
- codemble-0.3.0/tests/fixtures/sampleproj/broken.py +2 -0
- codemble-0.3.0/tests/fixtures/sampleproj/cli.py +5 -0
- codemble-0.3.0/tests/fixtures/sampleproj/pkg/__init__.py +3 -0
- codemble-0.3.0/tests/fixtures/sampleproj/pkg/helpers.py +6 -0
- codemble-0.3.0/tests/fixtures/sampleproj/pkg/service.py +13 -0
- codemble-0.3.0/tests/fixtures/sampleproj/pkg/util.py +10 -0
- codemble-0.3.0/tests/fixtures/sampleproj/runner/__main__.py +2 -0
- codemble-0.3.0/tests/fixtures/sampleproj/shared.py +6 -0
- codemble-0.3.0/tests/test_checks.py +103 -0
- codemble-0.3.0/tests/test_graph_finalization.py +82 -0
- codemble-0.3.0/tests/test_progress.py +72 -0
- codemble-0.3.0/tests/test_project_parser.py +195 -0
- codemble-0.3.0/tests/test_python_ast.py +225 -0
- codemble-0.3.0/tests/test_server.py +323 -0
- codemble-0.3.0/tests/test_smoke.py +75 -0
- codemble-0.3.0/tests/test_study.py +229 -0
- codemble-0.3.0/tests/test_typescript_tree_sitter.py +340 -0
- codemble-0.3.0/web/README.md +22 -0
- codemble-0.3.0/web/index.html +17 -0
- codemble-0.3.0/web/package-lock.json +1415 -0
- codemble-0.3.0/web/package.json +25 -0
- codemble-0.3.0/web/scripts/check_graph_data.mjs +77 -0
- codemble-0.3.0/web/scripts/check_learner_session.mjs +417 -0
- codemble-0.3.0/web/scripts/record_demo.mjs +55 -0
- codemble-0.3.0/web/src/App.jsx +689 -0
- codemble-0.3.0/web/src/GalaxyCanvas.jsx +235 -0
- codemble-0.3.0/web/src/graphData.js +187 -0
- codemble-0.3.0/web/src/learnerSession.js +681 -0
- codemble-0.3.0/web/src/main.jsx +20 -0
- codemble-0.3.0/web/src/styles.css +1411 -0
- codemble-0.3.0/web/src/tokens.css +23 -0
- 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,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 @@
|
|
|
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
|
+
```
|
codemble-0.3.0/AGENTS.md
ADDED
|
@@ -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.
|