Skip to content

Commit e5b4040

Browse files
committed
chore: sync main into frontend control plane prototype
2 parents e678401 + 0213cc5 commit e5b4040

485 files changed

Lines changed: 60929 additions & 9936 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/dependabot.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
version: 2
2+
3+
updates:
4+
- package-ecosystem: pip
5+
directories:
6+
- "/"
7+
- "/docs"
8+
- "/packages/loopx-finance-value-discovery"
9+
schedule:
10+
interval: weekly
11+
open-pull-requests-limit: 0
12+
groups:
13+
python-security:
14+
applies-to: security-updates
15+
patterns:
16+
- "*"
17+
18+
- package-ecosystem: npm
19+
directory: "/apps/presentation/dashboard"
20+
schedule:
21+
interval: weekly
22+
open-pull-requests-limit: 0
23+
groups:
24+
dashboard-security:
25+
applies-to: security-updates
26+
patterns:
27+
- "*"
28+
29+
- package-ecosystem: github-actions
30+
directory: "/"
31+
schedule:
32+
interval: weekly
33+
open-pull-requests-limit: 0
34+
groups:
35+
actions-security:
36+
applies-to: security-updates
37+
patterns:
38+
- "*"

.github/workflows/frontstage-pages.yml

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@ on:
1313
- "apps/presentation/site/**"
1414
- "docs/**"
1515
- "mkdocs.yaml"
16+
- "mkdocs.book.zh.yaml"
17+
- "mkdocs.book.en.yaml"
1618
- "docs/showcases/**"
1719
- "docs/assets/long-running-loop-openviking-trajectory.png"
1820
- "docs/assets/long-running-loop-ml-experiment-trajectory.png"
1921
- "examples/export-frontstage-share-bundle.mjs"
2022
- "examples/frontstage-share-bundle-smoke.mjs"
2123
- "examples/readme-star-history-smoke.py"
24+
- "examples/dev-book-publication-smoke.py"
2225
- "examples/goal-channel-frontstage-fixture.py"
2326
- "examples/showcase-catalog-smoke.py"
2427
- "examples/status.example.json"
2528
- "scripts/render-star-history.py"
29+
- "scripts/install-from-github.sh"
2630
push:
2731
branches:
2832
- main
@@ -34,16 +38,20 @@ on:
3438
- "apps/presentation/site/**"
3539
- "docs/**"
3640
- "mkdocs.yaml"
41+
- "mkdocs.book.zh.yaml"
42+
- "mkdocs.book.en.yaml"
3743
- "docs/showcases/**"
3844
- "docs/assets/long-running-loop-openviking-trajectory.png"
3945
- "docs/assets/long-running-loop-ml-experiment-trajectory.png"
4046
- "examples/export-frontstage-share-bundle.mjs"
4147
- "examples/frontstage-share-bundle-smoke.mjs"
4248
- "examples/readme-star-history-smoke.py"
49+
- "examples/dev-book-publication-smoke.py"
4350
- "examples/goal-channel-frontstage-fixture.py"
4451
- "examples/showcase-catalog-smoke.py"
4552
- "examples/status.example.json"
4653
- "scripts/render-star-history.py"
54+
- "scripts/install-from-github.sh"
4755

4856
permissions:
4957
actions: read
@@ -88,9 +96,12 @@ jobs:
8896
- name: Validate public showcase catalog
8997
run: python3 examples/showcase-catalog-smoke.py
9098

91-
- name: Validate README star history
99+
- name: Validate README star history
92100
run: python3 examples/readme-star-history-smoke.py
93101

102+
- name: Validate Developer Book publication
103+
run: python3 examples/dev-book-publication-smoke.py
104+
94105
- name: Validate public-safe frontstage bundle
95106
working-directory: apps/presentation/dashboard
96107
run: npm run smoke:frontstage-share-bundle
@@ -102,18 +113,40 @@ jobs:
102113
- name: Fetch complete GitHub stargazer history
103114
if: github.event_name != 'pull_request'
104115
env:
105-
GH_TOKEN: ${{ github.token }}
116+
# Since July 2026, GitHub restricts this endpoint to repository
117+
# collaborators. Keep this credential read-only and repo-scoped.
118+
GH_TOKEN: ${{ secrets.STAR_HISTORY_READ_TOKEN }}
106119
run: |
107120
set -euo pipefail
121+
if [[ -z "${GH_TOKEN:-}" ]]; then
122+
echo "::error title=Missing star-history credential::Set STAR_HISTORY_READ_TOKEN to a fine-grained PAT limited to this repository with Metadata: read." >&2
123+
exit 1
124+
fi
125+
owner="${GITHUB_REPOSITORY%%/*}"
126+
repo="${GITHUB_REPOSITORY#*/}"
127+
count_query='query($owner: String!, $repo: String!) {
128+
repository(owner: $owner, name: $repo) { stargazerCount }
129+
}'
130+
history_query='query($owner: String!, $repo: String!, $endCursor: String) {
131+
repository(owner: $owner, name: $repo) {
132+
stargazers(first: 100, after: $endCursor, orderBy: {field: STARRED_AT, direction: ASC}) {
133+
edges { starredAt }
134+
pageInfo { hasNextPage endCursor }
135+
}
136+
}
137+
}'
108138
for attempt in 1 2 3; do
109-
count_before="$(gh api "/repos/$GITHUB_REPOSITORY" --jq .stargazers_count)"
110-
gh api --paginate --slurp \
111-
--header "Accept: application/vnd.github.star+json" \
112-
--header "X-GitHub-Api-Version: 2026-03-10" \
113-
"/repos/$GITHUB_REPOSITORY/stargazers?per_page=100" \
139+
count_before="$(gh api graphql -f query="$count_query" -F owner="$owner" -F repo="$repo" --jq .data.repository.stargazerCount)"
140+
gh api graphql --paginate --slurp \
141+
-f query="$history_query" \
142+
-F owner="$owner" \
143+
-F repo="$repo" \
144+
> "$RUNNER_TEMP/loopx-stargazer-pages.json"
145+
jq '[.[].data.repository.stargazers.edges[] | {starred_at: .starredAt}]' \
146+
"$RUNNER_TEMP/loopx-stargazer-pages.json" \
114147
> "$RUNNER_TEMP/loopx-stargazers.json"
115-
count_after="$(gh api "/repos/$GITHUB_REPOSITORY" --jq .stargazers_count)"
116-
fetched_count="$(jq '[.[][]] | length' "$RUNNER_TEMP/loopx-stargazers.json")"
148+
count_after="$(gh api graphql -f query="$count_query" -F owner="$owner" -F repo="$repo" --jq .data.repository.stargazerCount)"
149+
fetched_count="$(jq 'length' "$RUNNER_TEMP/loopx-stargazers.json")"
117150
if [[ "$count_before" == "$count_after" && "$fetched_count" == "$count_after" ]]; then
118151
printf '%s\n' "$count_after" > "$RUNNER_TEMP/loopx-stargazers-count"
119152
break
@@ -137,6 +170,15 @@ jobs:
137170
- name: Build documentation site
138171
run: mkdocs build --strict --site-dir output/frontstage-pages/site/docs
139172

173+
- name: Build Chinese Developer Book
174+
run: mkdocs build --strict --config-file mkdocs.book.zh.yaml --site-dir output/frontstage-pages/site/docs/book
175+
176+
- name: Build English Developer Book
177+
run: mkdocs build --strict --config-file mkdocs.book.en.yaml --site-dir output/frontstage-pages/site/docs/book/en
178+
179+
- name: Validate rendered Developer Book
180+
run: python3 examples/dev-book-publication-smoke.py --site-dir output/frontstage-pages/site/docs/book
181+
140182
- name: Configure Pages
141183
if: github.event_name != 'pull_request'
142184
uses: actions/configure-pages@v6

.github/workflows/python-tests.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
- ".github/workflows/python-tests.yml"
77
- "loopx/**"
88
- "tests/**"
9+
- "examples/**"
910
- "pyproject.toml"
1011
push:
1112
branches:
@@ -14,6 +15,7 @@ on:
1415
- ".github/workflows/python-tests.yml"
1516
- "loopx/**"
1617
- "tests/**"
18+
- "examples/**"
1719
- "pyproject.toml"
1820

1921
permissions:

CONTRIBUTING.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ Use the [developer guide](docs/development/README.md) as the stable entry point.
5050
Before changing scheduler, quota, todo/gate, onboarding, agent-facing output,
5151
or release behavior, read the bilingual
5252
[testing and quality guide](docs/development/testing-and-quality.md).
53+
Before adding or consolidating a public smoke, use the bilingual
54+
[good smoke guide](docs/development/good-smokes.md) to define its durable
55+
invariant, independent oracle, cadence, and public-safe fixture boundary.
5356

5457
Install and verify the checkout:
5558

GOVERNANCE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ as a maintainer or grant release, security, or governance authority.
2929
| [`@Hoey041`](https://github.com/Hoey041) | Write | Active |
3030
| [`@maxliux5`](https://github.com/maxliux5) | Write | Invitation pending |
3131
| [`@JackyCSer`](https://github.com/JackyCSer) | Write | Invitation pending |
32+
| [`@steven-kid`](https://github.com/steven-kid) | Write | Invitation pending |
3233

3334
GitHub's repository settings are the operational source of truth for access.
3435
This public snapshot should be updated through a pull request when a write-role

0 commit comments

Comments
 (0)