Skip to content

Commit 736bb9f

Browse files
committed
Astryx 학습 경험과 공용 디자인 시스템 구축
1 parent 527e0e2 commit 736bb9f

2,150 files changed

Lines changed: 512859 additions & 27683 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,39 @@ jobs:
4545
- name: Run docs gate
4646
run: uv run python -X utf8 tests/run.py gate docs
4747

48+
- name: Run architecture boundary gate
49+
run: uv run python -X utf8 tests/run.py gate architecture-boundary
50+
51+
- name: Observe plan quality bootstrap
52+
if: matrix.python-version == '3.12'
53+
continue-on-error: true
54+
run: uv run python -X utf8 tests/run.py gate plan-quality
55+
4856
- name: Run backend gate
4957
run: uv run python -X utf8 tests/run.py gate backend
5058

59+
- name: Run learning evidence contract
60+
if: matrix.python-version == '3.12'
61+
run: uv run python -X utf8 tests/run.py gate learning-evidence-contract
62+
63+
- name: Verify removed learning concepts
64+
if: matrix.python-version == '3.12'
65+
run: uv run python -X utf8 tests/run.py gate removed-learning-concepts
66+
67+
- name: Run learning efficacy report contract
68+
if: matrix.python-version == '3.12'
69+
run: uv run python -X utf8 tests/run.py gate learning-efficacy-report
70+
71+
- name: Run curriculum quality matrix
72+
if: matrix.python-version == '3.12'
73+
timeout-minutes: 20
74+
run: uv run python -X utf8 tests/run.py gate curriculum-quality-matrix
75+
76+
- name: Verify repository simplification
77+
if: matrix.python-version == '3.12'
78+
timeout-minutes: 10
79+
run: uv run python -X utf8 tests/run.py gate repository-simplification
80+
5181
- name: Run widget-bridge gate
5282
run: uv run python -X utf8 tests/run.py gate widget-bridge
5383

@@ -95,11 +125,77 @@ jobs:
95125

96126
- name: Install
97127
working-directory: landing
98-
run: npm install
128+
run: npm ci
99129

100130
- name: Build
101131
run: python -X utf8 tests/run.py gate landing-build
102132

133+
experience:
134+
runs-on: ubuntu-latest
135+
timeout-minutes: 120
136+
steps:
137+
- uses: actions/checkout@v4
138+
139+
- name: Install uv
140+
uses: astral-sh/setup-uv@v6
141+
with:
142+
enable-cache: true
143+
144+
- name: Set up Python
145+
run: uv python install 3.12
146+
147+
- name: Install Python dependencies
148+
run: uv sync --extra dev --python 3.12
149+
150+
- name: Setup Node
151+
uses: actions/setup-node@v4
152+
with:
153+
node-version: "22"
154+
cache: "npm"
155+
cache-dependency-path: |
156+
editor/package-lock.json
157+
landing/package-lock.json
158+
159+
- name: Install editor
160+
working-directory: editor
161+
run: npm ci
162+
163+
- name: Install landing
164+
working-directory: landing
165+
run: npm ci
166+
167+
- name: Install Chromium
168+
timeout-minutes: 15
169+
run: uv run --with playwright python -m playwright install --with-deps chromium
170+
171+
- name: Verify visual assets
172+
timeout-minutes: 15
173+
run: uv run python -X utf8 tests/run.py gate visual-assets
174+
175+
- name: Verify Astryx design system
176+
timeout-minutes: 15
177+
run: uv run python -X utf8 tests/run.py gate design-system-contract
178+
179+
- name: Verify direct learning method
180+
timeout-minutes: 15
181+
run: uv run python -X utf8 tests/run.py gate learning-method
182+
183+
- name: Verify Web learning
184+
timeout-minutes: 25
185+
run: uv run python -X utf8 tests/run.py gate web-learning
186+
187+
- name: Verify public landing
188+
timeout-minutes: 25
189+
run: uv run python -X utf8 tests/run.py gate landing-public
190+
191+
- name: Verify Local Studio
192+
timeout-minutes: 30
193+
run: uv run python -X utf8 tests/run.py gate local-studio-browser
194+
195+
- name: Verify full product experience
196+
timeout-minutes: 30
197+
run: uv run python -X utf8 tests/run.py gate product-experience-browser
198+
103199
launcher:
104200
# 다운로드 엔진(타임아웃/재시도/resume mock 테스트)과 provision 경로를 실제 배포 타깃인
105201
# Windows를 포함한 3개 OS에서 검증한다. "내 로컬은 되는데 다른 환경은 터진다"를 CI에서 막는다.

‎.github/workflows/pages.yml‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,16 @@ jobs:
3535

3636
- name: Install Editor
3737
working-directory: editor
38-
run: npm install
38+
run: npm ci
3939

40-
- name: Build Editor Web Variant
40+
- name: Build Primary Web Run
41+
working-directory: editor
42+
env:
43+
CODARO_WEB_BASE: codaro/run
44+
CODARO_WEB_OUT: ../landing/static/run
45+
run: npm run build
46+
47+
- name: Build App Compatibility Tree
4148
working-directory: editor
4249
env:
4350
CODARO_WEB_BASE: codaro/app
@@ -46,7 +53,7 @@ jobs:
4653

4754
- name: Install
4855
working-directory: landing
49-
run: npm install
56+
run: npm ci
5057

5158
- name: Build
5259
working-directory: landing

‎.github/workflows/product-release.yml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ jobs:
101101
raise SystemExit("codaro/webBuild/_app/ assets missing from wheel")
102102
if "codaro/curricula/python/__init__.py" not in names:
103103
raise SystemExit("codaro/curricula/python/__init__.py missing from wheel")
104+
if "codaro/generatedContracts/artifactOwnership.py" not in names:
105+
raise SystemExit("generated product contract type missing from wheel")
106+
if "codaro/generatedContracts/artifactOwnership.schema.json" not in names:
107+
raise SystemExit("generated product contract schema missing from wheel")
104108
lessonCount = sum(
105109
1 for name in names
106110
if name.startswith("codaro/curricula/python/") and name.endswith(".yaml")

‎.github/workflows/publish.yaml‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ jobs:
105105
required_wheel_entries = {
106106
"codaro/webBuild/index.html",
107107
"codaro/curricula/python/__init__.py",
108+
"codaro/generatedContracts/artifactOwnership.py",
109+
"codaro/generatedContracts/artifactOwnership.schema.json",
108110
}
109111
missing = sorted(required_wheel_entries - wheel_names)
110112
if missing:
@@ -120,6 +122,8 @@ jobs:
120122
raise SystemExit("sdist missing src/codaro/webBuild/index.html")
121123
if not any(name.endswith("/src/codaro/curricula/python/__init__.py") for name in sdist_names):
122124
raise SystemExit("sdist missing built-in curriculum package")
125+
if not any(name.endswith("/src/codaro/generatedContracts/artifactOwnership.schema.json") for name in sdist_names):
126+
raise SystemExit("sdist missing generated product contract schema")
123127
PY
124128
125129
- name: Verify wheel install
@@ -166,6 +170,7 @@ jobs:
166170
assert callable(codaro.main)
167171
assert (files("codaro") / "webBuild" / "index.html").is_file()
168172
assert (files("codaro") / "curricula" / "python" / "__init__.py").is_file()
173+
assert (files("codaro") / "generatedContracts" / "artifactOwnership.schema.json").is_file()
169174
assert any((files("codaro") / "curricula" / "python").glob("*.yaml"))
170175
print(f"codaro {version} uv add resources ok")
171176
PY

‎.github/workflows/publish.yml‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ jobs:
105105
required_wheel_entries = {
106106
"codaro/webBuild/index.html",
107107
"codaro/curricula/python/__init__.py",
108+
"codaro/generatedContracts/artifactOwnership.py",
109+
"codaro/generatedContracts/artifactOwnership.schema.json",
108110
}
109111
missing = sorted(required_wheel_entries - wheel_names)
110112
if missing:
@@ -120,6 +122,8 @@ jobs:
120122
raise SystemExit("sdist missing src/codaro/webBuild/index.html")
121123
if not any(name.endswith("/src/codaro/curricula/python/__init__.py") for name in sdist_names):
122124
raise SystemExit("sdist missing built-in curriculum package")
125+
if not any(name.endswith("/src/codaro/generatedContracts/artifactOwnership.schema.json") for name in sdist_names):
126+
raise SystemExit("sdist missing generated product contract schema")
123127
PY
124128
125129
- name: Verify wheel install
@@ -166,6 +170,7 @@ jobs:
166170
assert callable(codaro.main)
167171
assert (files("codaro") / "webBuild" / "index.html").is_file()
168172
assert (files("codaro") / "curricula" / "python" / "__init__.py").is_file()
173+
assert (files("codaro") / "generatedContracts" / "artifactOwnership.schema.json").is_file()
169174
assert any((files("codaro") / "curricula" / "python").glob("*.yaml"))
170175
print(f"codaro {version} uv add resources ok")
171176
PY
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: Release Quality
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: read
8+
9+
env:
10+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
11+
12+
jobs:
13+
product-release:
14+
runs-on: ubuntu-latest
15+
timeout-minutes: 120
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Install Linux launcher dependencies
20+
run: |
21+
sudo apt-get update
22+
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev
23+
24+
- name: Install Rust toolchain
25+
uses: dtolnay/rust-toolchain@stable
26+
27+
- name: Install uv
28+
uses: astral-sh/setup-uv@v6
29+
with:
30+
enable-cache: true
31+
32+
- name: Set up Python
33+
run: uv python install 3.12
34+
35+
- name: Install Python dependencies
36+
run: uv sync --extra dev --python 3.12
37+
38+
- name: Setup Node
39+
uses: actions/setup-node@v4
40+
with:
41+
node-version: "22"
42+
cache: "npm"
43+
cache-dependency-path: |
44+
editor/package-lock.json
45+
landing/package-lock.json
46+
47+
- name: Install editor
48+
working-directory: editor
49+
run: npm ci
50+
51+
- name: Install landing
52+
working-directory: landing
53+
run: npm ci
54+
55+
- name: Install Chromium
56+
timeout-minutes: 15
57+
run: uv run --with playwright python -m playwright install --with-deps chromium
58+
59+
- name: Run product release sequence
60+
timeout-minutes: 90
61+
run: uv run python -X utf8 tests/run.py product-release
62+
63+
- name: Upload release quality evidence
64+
if: always()
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: product-release-evidence
68+
path: output/test-runner/
69+
70+
confirmatory-efficacy:
71+
runs-on: ubuntu-latest
72+
steps:
73+
- uses: actions/checkout@v4
74+
75+
- name: Install uv
76+
uses: astral-sh/setup-uv@v6
77+
with:
78+
enable-cache: true
79+
80+
- name: Set up Python
81+
run: uv python install 3.12
82+
83+
- name: Install Python dependencies
84+
run: uv sync --extra dev --python 3.12
85+
86+
- name: Verify featured-path E3 evidence
87+
run: uv run python -X utf8 tests/run.py gate path-efficacy-confirmatory
88+
89+
- name: Upload confirmatory evidence report
90+
if: always()
91+
uses: actions/upload-artifact@v4
92+
with:
93+
name: path-efficacy-confirmatory
94+
path: output/test-runner/path-efficacy-confirmatory/

‎.gitignore‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ CLAUDE.md
1717
AGENTS.md
1818
.agents/
1919
.claude/
20+
.vscode/
2021
# Data (available via gh release)
2122
data/
2223

@@ -55,6 +56,16 @@ landing/static/blog/assets/
5556
landing/static/docs/blog/assets/
5657
landing/static/app/
5758

59+
# Landing modules generated by npm lifecycle hooks
60+
/landing/src/lib/generated/curriculum.js
61+
/landing/src/lib/generated/curriculumLessons/
62+
/landing/src/lib/generated/docsNav.js
63+
/landing/src/lib/generated/docsPages/
64+
/landing/src/lib/generated/posts.js
65+
/landing/src/lib/generated/searchIndex.js
66+
/landing/src/lib/generated/visualAssetManifest.js
67+
/editor/src/lib/generated/visualAssetManifest.ts
68+
5869
# MkDocs build
5970
site/
6071

0 commit comments

Comments
 (0)