Skip to content

Commit 69beb8d

Browse files
feat: add Portable Living Towns (#98)
1 parent 41d48cd commit 69beb8d

15 files changed

Lines changed: 1207 additions & 66 deletions

โ€ŽAGENTS.mdโ€Ž

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ CDN import map (Three.js r0.160 via jsDelivr) plus local data, scripts, and modu
3939
| **`scripts/fork_lineage.py` + `assets/fork-lineage.js`** | Public-only fork source sanitizer plus deterministic six-color crest projection. | Changing generated fork source truth, lineage cards, or the shared crest batch. |
4040
| **`scholars.js`** | `window.SCHOLARS` roster: POLARIS ยท VEGA ยท RIGEL ยท MIRA ยท LYRA. | Adding / editing an NPC scholar. |
4141
| **`assets/world-tree/createRepolisHero.js`** | Procedural World Tree factory imported by `index.html`. | Changing the tree geometry, materials, sockets, or actions. |
42-
| **`assets/world-tree/world-tree-state.js`** | Pure projection for Chronicle, Silence Ledger, Roots, sap-flow freshness/mode, and bounded star/repo growth. | Changing how generated city state reaches the silent World Tree. |
42+
| **`assets/world-tree/world-tree-state.js`** | Pure projection for Chronicle, Silence Ledger, Roots, sap-flow freshness/mode, bounded star/repo growth, and portable public-town residents. | Changing how owner or normalized public-town state reaches the silent World Tree and local resident roster. |
4343
| **`assets/repo-portal.js`** | Pure username/repository parser, route precedence, public projection, canonical Portal URL, and owner-town expansion link. | Changing `?repo=`, accepted GitHub inputs, public traffic truth, or target share links. |
4444
| **`assets/repo-route.js`** | Pure 2โ€“3 stop route validator, current-catalog resolver, conflict policy, and canonical Repo Route URL. | Changing visitor-curated multi-repo paths or `?route=` links. |
4545
| **`assets/contribution-quests.js`** | Pure current-owner/catalog issue projector and bounded quest ranker. | Changing Open Source Quest validation, tier priority, or result diversity. |
@@ -49,6 +49,7 @@ CDN import map (Three.js r0.160 via jsDelivr) plus local data, scripts, and modu
4949
| **`scripts/build_repos.py`** | Rebuilds `repos.json` and `data/city-state.json` from `data/logs/*` traffic + `gh api`. | Refreshing the city data locally. |
5050
| **`scripts/resident_profiles.py` + `data/residents/`** | Generates sanitized public resident profiles, the boot manifest, and the Worker authority registry. Profile JSON is generated โ€” do not hand-edit. | Changing repository-bound resident identity or Shared/Bound inputs. |
5151
| **`scripts/smoke.mjs`** | Hermetic static and behavioral regression guards for the city runtime. | Any client feature, navigation, or generated-module integration change. |
52+
| **`scripts/test-portable-town.mjs`** | Deterministic fixtures for canonical, foreign, empty/archive-only, partial, missing-date, leakage, resident-cap, and zero-request portable towns. | Changing public-town projection or local resident derivation. |
5253
| **`.github/workflows/refresh.yml`** | "Refresh Repolis data" โ€” daily Action that regenerates `repos.json` and pushes `chore: refresh`. | CI / data-refresh changes. |
5354
| **`scripts/build-contribution-library.mjs` + `assets/contribution-library.json`** | Generates the in-app **Contribution Library** JSON from the sibling `Hyeonsang-AI-Contributions` README (KO/EN); `index.html` fetches it at runtime. JSON is **generated โ€” do not hand-edit.** Daily via `.github/workflows/update-contribution-library.yml`. | Changing the library landmark's data/source. |
5455
| **`cloudflare-taxi/`** | **The live AI backend** โ€” Worker `repolis-taxi` (`src/grounded.js`): grounded repo/docs Q&A + in-persona chat. | Grounding / scholar answer logic. |
@@ -126,6 +127,7 @@ zero LLM, zero cost โ€” so run them freely:
126127
node council/test.mjs # deterministic Council crosscheck
127128
node council/test-live.mjs # live guards + state machine
128129
node scripts/smoke.mjs # city/runtime static + behavioral regression guards
130+
node scripts/test-portable-town.mjs
129131
python3 scripts/test_city_state.py
130132
python3 scripts/validate_city_state.py
131133
python3 scripts/test_fork_lineage.py
@@ -172,6 +174,7 @@ Tested on Node v24. There is no linter or formatter configured โ€” match the sur
172174
|---|---|
173175
| Change how a repo becomes a building (height/size/ornaments) | `index.html` (city-build section) + score/rank in `scripts/build_repos.py`; model in [`docs/domain-model.md`](docs/domain-model.md). |
174176
| Change Repo Portal parsing, target-first loading, cache, expansion, or privacy events | `assets/repo-portal.js` + the repo data/intro/Station/Atelier blocks in `index.html` + `scripts/smoke.mjs`; preserve one repo request before Aha, `trafficKnown:false` for public API data, 15-minute/512 KiB LRU bounds, canonical `?repo=owner/repo&ref=repo-portal`, and [`docs/repo-portal-change-guide.md`](docs/repo-portal-change-guide.md). |
177+
| Change portable `?user=` / Repo Portal / Station World Tree or residents | `assets/world-tree/world-tree-state.js` + the post-load projection, World Tree, resident, service-boundary, and debug blocks in `index.html` + `scripts/test-portable-town.mjs`; preserve one existing public load, deterministic public-only state, 6/4 desktop/LOW_END resident caps, unknown traffic/memory, and local/solo service closure. |
175178
| Change Repo Route selection, ordering, share links, recipient progress, or privacy events | `assets/repo-route.js` + `/*REPO_ROUTE*/` in `index.html` + the Repo Route group in `scripts/smoke.mjs`; preserve 2โ€“3 unique current public repos, strict ordered completion, session-only drafts, identity-free telemetry, and no new scene or network work. |
176179
| Change Open Source Quest search, ranking, repo-house handoff, or privacy events | `assets/contribution-quests.js` + `/*CONTRIBUTION_QUESTS*/` in `index.html` + the Open Source Quests group in `scripts/smoke.mjs`; preserve explicit one-request search, current owner/catalog filtering, three-card/2-per-repo caps, in-memory results, identity-free telemetry, and Star eligibility only after issue handoff. |
177180
| Change districts, Village Chronicle, passport, or exploration loops | `index.html` + the matching behavioral groups in `scripts/smoke.mjs`. |
@@ -198,7 +201,7 @@ Tested on Node v24. There is no linter or formatter configured โ€” match the sur
198201
A daily Action turns the owner's **public repos + committed traffic logs** into `repos.json`; included public
199202
forks may also carry a minimal canonical source record. `index.html`
200203
turns that array into metric-shaped buildings, topic districts, routes, maps, and exploration progress.
201-
Residents add named homes, home/work commutes, moods, friendships, haunts, Shared Joy excursions, gatherings, and festivals. The oldest eligible 20% of the bounded active roster can rarely let slip a hand-authored local lore fragment; repositories younger than 90 generated-clock days receive a lightweight construction layer and newcomer voice. Landmarks include the Contribution Library, Chronopolis, Observatory, and imported procedural World Tree. Repo Portal lets one public `owner/repo` arrive before its owner catalog, then reuses the same building and Repository Atelier with truthful public-metadata boundaries. Repo Route lets a visitor hand off an ordered 2โ€“3 house path they actually explored. Open Source Quests connects an explicitly loaded current public issue to its real repo house before GitHub handoff. Every repo also rebinds one reusable Atelier where its data, impact signals, current avatar, and in-room Gitber stay inside the exhibition. Town Growth Replay turns public repo creation dates into a reversible, shareable city history without inventing historical metrics. Gitber/POLARIS and the
204+
Residents add named homes, home/work commutes, moods, friendships, haunts, Shared Joy excursions, gatherings, and festivals. Foreign `?user=` and Repo Portal towns run the same pure portable projection after their one existing public load, deriving their own era, season, Silence Ledger, Roots, and 6/4-capped local resident roster without owner traffic, memories, services, or extra requests. The oldest eligible 20% of the owner roster can rarely let slip a hand-authored local lore fragment; repositories younger than 90 reproducible-clock days receive a lightweight construction layer and newcomer voice. Landmarks include the Contribution Library, Chronopolis, Observatory, and imported procedural World Tree. Repo Portal lets one public `owner/repo` arrive before its owner catalog, then reuses the same building and Repository Atelier with truthful public-metadata boundaries. Repo Route lets a visitor hand off an ordered 2โ€“3 house path they actually explored. Open Source Quests connects an explicitly loaded current public issue to its real repo house before GitHub handoff. Every repo also rebinds one reusable Atelier where its data, impact signals, current avatar, and in-room Gitber stay inside the exhibition. Town Growth Replay turns public repo creation dates into a reversible, shareable city history without inventing historical metrics. Gitber/POLARIS and the
202205
scholars (VEGA ยท MS Learn, RIGEL ยท DeepWiki, MIRA ยท Context7, LYRA ยท Hugging Face) add natural-language
203206
navigation and grounded answers. Residents hand specialist questions to the right scholar instead of gaining
204207
their own MCP access. Gitber remains the only all-district traveler: ride observations and Shared-state answers are local, while household memory questions return to the correct repo home. The Passport's local Town Gazette makes daily public-repo changes visible on return. Everything

โ€ŽCHANGELOG.mdโ€Ž

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,27 @@ The format loosely follows [Keep a Changelog](https://keepachangelog.com/); date
66
This file keeps the current product era (`1.50.0` onward) easy to scan. Earlier releases are preserved in
77
[`docs/changelog-archive.md`](docs/changelog-archive.md).
88

9+
## [1.92.0] โ€” 2026-08-26
10+
11+
### ๐ŸŒณ Portable Living Towns โ€” public records grow their own local life
12+
13+
- One pure `repolis.portable-town` v1 projection now runs after the existing `?user=`, Repo Portal, or Station
14+
destination load. It derives a reproducible era, sparse-history season fallback, #93-compatible Silence
15+
Ledger, archived Roots, public aggregates, and a local resident directory from the normalized payload only.
16+
- Foreign towns receive deterministic names, jobs, personalities, greetings, and real repo-home bindings.
17+
Active residents are capped at six on desktop and four on mobile/LOW_END; archived and empty towns create no
18+
false resident. Houses keep their labels, silhouettes, colliders, cards, and interactions at every tier.
19+
- Visitors/views/clones, owner residents, Shared/Bound memory, daily sap, realtime, and grounded knowledge stay
20+
explicitly unavailable. Foreign dialogue is rules-based Local by default, and canonical Worker/WebSocket
21+
services are closed for the whole portable visit.
22+
- The existing public repository request remains the only feature-owned API read. No generated JSON, storage
23+
key, persistent identity, analytics event, model call, backend, dependency, build step, or binary asset was
24+
added.
25+
- Controlled cold loads keep same-origin requests unchanged (owner 31โ†’31; foreign 27โ†’27) and the foreign GitHub
26+
read unchanged at one. Decoded same-origin bytes rise by 32,975 (owner 1,693,307โ†’1,726,282; foreign
27+
1,596,458โ†’1,629,433). Portable sap adds zero draws; resident homes stay within the existing 10/6
28+
desktop/LOW_END batch ceilings.
29+
930
## [1.91.0] โ€” 2026-08-25
1031

1132
### ๐Ÿ“œ Silence Ledger โ€” factual long-idle repository records

โ€ŽREADME.ko.mdโ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,13 @@ Repolis๋Š” ๊ณต๊ฐœ GitHub ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ˆ„์  ํŠธ๋ž˜ํ”ฝ์„ ๋˜ ํ•˜๋‚˜์˜
7575
| ์Šคํƒ€ | ์ง€๋ถ• ์žฅ์‹ |
7676
| ์ตœ๊ทผ ํ™œ๋™ | ๋ฐค์— ๋น›๋‚˜๋Š” ์ฐฝ๋ฌธ |
7777

78-
๋ ˆํฌ๋Š” ์ฃผ์ œ๋ณ„ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜๊ณ  ๋„๋กœ, ํ‘œ์ง€ํŒ, ๊ตฌ์—ญ ํ—ˆ๋ธŒ, ์„ธ๊ณ„ ์ง€๋„๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์ธ ๋งˆ์„์€ ๋ˆ„์  ํŠธ๋ž˜ํ”ฝ ๊ธฐ๋ก๊ณผ GitHub API๋กœ ๋งค์ผ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. `?user=<login>`์€ ๊ฐ€๋ฒผ์šด ๊ณต๊ฐœ ๋งˆ์„์„ ๋งŒ๋“ค๊ณ , `?repo=<owner>/<repo>`๋Š” ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜๋ฅผ ๋จผ์ € ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. GitHub๋Š” ์ด ๊ณต๊ฐœ API ๋ชจ๋“œ์— ๋ฐฉ๋ฌธ์žยท์กฐํšŒยทํด๋ก  ํŠธ๋ž˜ํ”ฝ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ฑด๋ฌผ์€ ๊ฐ€์งœ ํŠธ๋ž˜ํ”ฝ ์—†์ด ์Šคํƒ€ยทํฌํฌยท์ตœ๊ทผ ์—…๋ฐ์ดํŠธ๋กœ ์ง€์–ด์ง‘๋‹ˆ๋‹ค.
78+
๋ ˆํฌ๋Š” ์ฃผ์ œ๋ณ„ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜๊ณ  ๋„๋กœ, ํ‘œ์ง€ํŒ, ๊ตฌ์—ญ ํ—ˆ๋ธŒ, ์„ธ๊ณ„ ์ง€๋„๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์ธ ๋งˆ์„์€ ๋ˆ„์  ํŠธ๋ž˜ํ”ฝ ๊ธฐ๋ก๊ณผ GitHub API๋กœ ๋งค์ผ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. `?user=<login>`์€ ๊ทธ ์‚ฌ์šฉ์ž์˜ ์„ธ๊ณ„์ˆ˜ ๊ธฐ๋ก๊ณผ ๋กœ์ปฌ ์ฃผ๋ฏผ์ด ์žˆ๋Š” ๊ฐ€๋ฒผ์šด ๊ณต๊ฐœ ๋งˆ์„์„ ๋งŒ๋“ค๊ณ , `?repo=<owner>/<repo>`๋Š” ๊ฐ™์€ projection์œผ๋กœ ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜๋ฅผ ๋จผ์ € ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. GitHub๋Š” ์ด ๊ณต๊ฐœ API ๋ชจ๋“œ์— ๋ฐฉ๋ฌธ์žยท์กฐํšŒยทํด๋ก  ํŠธ๋ž˜ํ”ฝ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ฑด๋ฌผ์€ ๊ฐ€์งœ ํŠธ๋ž˜ํ”ฝ ์—†์ด ์Šคํƒ€ยทํฌํฌยท์ตœ๊ทผ ์—…๋ฐ์ดํŠธ๋กœ ์ง€์–ด์ง‘๋‹ˆ๋‹ค.
7979
์ผ๋ฐ˜์ ์ธ ๋ณดํ–‰ ๊ฑฐ๋ฆฌ์—์„œ๋„ ํ•œ ๋ฒˆ์— ๊ทธ๋ฆฌ๋Š” ๊ฑด์ถ• LOD๊ฐ€ ๋ ˆํฌ ์ง‘์˜ ํ…์Šค์ฒ˜ ๋ฒฝ๊ณผ ์ง€๋ถ•๋ฟ ์•„๋‹ˆ๋ผ ๋Œ€์ง€, ์ƒ์šธํƒ€๋ฆฌ, ์ง„์ž…๋กœ, ์‹ค์ œ ์ฐฝ์œ ๋ฆฌ, ์…”ํ„ฐ, ์ฐฝํ„ฑ, ํ™”๋ถ„, ๋ฐฐ์ˆ˜๊ด€, ์ง‘ ๋“ฑ๊ธ‰๋ณ„ ํ˜„๊ด€ยท๋ฐœ์ฝ”๋‹ˆยทํฌํ‹ฐ์ฝ”๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
8080

8181
## ์‹ค์ œ๋กœ ์‚ด์•„๊ฐ€๋Š” ๋งˆ์„
8282

8383
- **์ฃผ๋ฏผ์€ ์ œ์ž๋ฆฌ ๋ฐ˜๋ณต ๋™์ž‘๋งŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** ์ด๋ฆ„ ์žˆ๋Š” ์ฃผ๋ฏผ๋“ค์ด ์ž๊ธฐ ๊ตฌ์—ญ์„ ๊ฑฐ๋‹๊ณ , ์‹œ๊ฐ„๋Œ€์— ๋งž์ถฐ ์ƒํ™œํ•˜๋ฉฐ, ๊ธฐ๋ถ„์ด ๋ฐ”๋€Œ๊ณ , ์•„๋ผ๋Š” ์•„์ง€ํŠธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ถ๋™์ชฝ **๋ณ„๋น› ์ฃผ๊ฑฐ๊ตฌ์—ญ**์—๋Š” ์ด๋ฆ„ํ‘œ๊ฐ€ ๋‹ฌ๋ฆฐ ์ง‘๊ณผ ์ฃผ๋ฏผ์ƒ‰ ์•ž๋งˆ๋‹น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘๋งˆ๋‹ค 3์ข… ์ง€๋ถ• ์‹ค๋ฃจ์—ฃ, ์…”ํ„ฐ, ํŠธ๋žœ์„ฌ ์ฐฝ, ์„ ํƒํ˜• ์ฐฝ๊ฐ€ ํ™”๋ถ„ยท์บ๋…ธํ”ผยท๊ตด๋šยท์ง€๋ถ• ์žฅ์‹์ด ๋‹ค๋ฅด๊ฒŒ ์กฐํ•ฉ๋˜๊ณ , ๊ณต๋™ ๊ฝƒ์ •์›ยท๋žœํ„ดยท์ƒ์šธํƒ€๋ฆฌยทํ™œ์—ฝ์ˆ˜ยท์‚ฌ์ดํ”„๋Ÿฌ์Šค๊ฐ€ ๋งˆ์„์„ ๊ฐ์Œ‰๋‹ˆ๋‹ค. ๋ฐค์ด๋ฉด ๋”ฐ๋œปํ•œ ์ฐฝ๊ณผ ํ˜„๊ด€์œผ๋กœ ๊ท€๊ฐ€ํ•˜๊ณ , ์•„์นจ์ด๋ฉด ๊ฐ์ž ๊ตฌ์—ญ์œผ๋กœ ์ถœ๊ทผํ•ฉ๋‹ˆ๋‹ค. ์นœ๊ตฌ๋ฅผ ์•Œ์•„๋ณด๊ณ  ํ•จ๊ป˜ ์‚ฐ์ฑ…ํ•˜๊ฑฐ๋‚˜ ๋‚˜๋ž€ํžˆ ์‰ฌ๋ฉฐ, ๋ชจ๋‹ฅ๋ถˆ์— ๋ชจ์ด๊ณ , ๋•Œ๋กœ๋Š” ์ƒˆ ๋ฆด๋ฆฌ์Šค ์ถ•์ œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ๋‘ ์ฃผ๋ฏผ์€ ํ”Œ๋ ˆ์ด์–ด ์ง€์‹œ๋‚˜ AI ํ˜ธ์ถœ ์—†์ด ์‹ค์ œ ๊ฝƒ๋ฐญยท๋ณ„์ด ๋ณด์ด๋Š” ๋ฐคํ•˜๋Š˜ยท์‹ค์ œ ๋ ˆํฌ ์ง‘์œผ๋กœ ์งง์€ **ํ•จ๊ป˜ํ•˜๋Š” ๊ธฐ์จ** ๋‚˜๋“ค์ด๋„ ์Šค์Šค๋กœ ๋– ๋‚ฉ๋‹ˆ๋‹ค. ์ „๋ฌธ ์งˆ๋ฌธ์„ ๋ฐ›์œผ๋ฉด ์•„๋Š” ์ฒ™ํ•˜์ง€ ์•Š๊ณ  ๋งž๋Š” ํ˜„์ž๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์นจ๋ฐ˜์„ ๋”ฐ๋ผ ๋งˆ์„ ์•ˆ์—์„œ ๊ทธ ํ˜„์ž๋ฅผ ์ง์ ‘ ์ฐพ์•„๊ฐ€์„ธ์š”.
84+
- **๊ณต๊ฐœ ๋งˆ์„๋„ ์ž๊ธฐ ๊ธฐ๋ก์œผ๋กœ ์‚ด์•„๊ฐ‘๋‹ˆ๋‹ค.** ๊ธฐ์กด ๊ณต๊ฐœ ๋ ˆํฌ ์š”์ฒญ ํ•œ ๋ฒˆ์œผ๋กœ ๋„์‹œ๋ ฅยท๊ณ„์ ˆยท๊ณ ์š” ์žฅ๋ถ€ยท์•„์นด์ด๋ธŒ๋œ The Roots์™€ ๋ฐ์Šคํฌํ†ฑ ์ตœ๋Œ€ 6๋ช…/ํœด๋Œ€ํฐยทLOW_END ์ตœ๋Œ€ 4๋ช…์˜ ์ฃผ๋ฏผ์„ ๊ฒฐ์ •์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ฃผ๋ฏผ์˜ ์ผยท์ธ์‚ฌยท์‹ค์ œ ๋ ˆํฌ ์ง‘ ์—ฐ๊ฒฐ์€ ๊ณต๊ฐœ ํ•„๋“œ๋งŒ ์“ฐ๋ฉฐ, ํŠธ๋ž˜ํ”ฝยท์ฃผ์ธ ์ฃผ๋ฏผยทShared/Bound ๊ธฐ์–ต์€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์—ฐ๊ฒฐ๊ณผ ๊ทผ๊ฑฐ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๋„ ๊บผ์ ธ ์žˆ์–ด ๋‘ ๋ฒˆ์งธ API ์š”์ฒญ์ด๋‚˜ ๋ชจ๋ธ ํ˜ธ์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค.
8485
- **ํƒํ—˜์—๋Š” ํ๋ฆ„์ด ๋‚จ์Šต๋‹ˆ๋‹ค.** ํƒํ—˜ ์—ฌ๊ถŒ์ด ์ง‘๊ณผ ๋ช…์†Œ ๋ฐฉ๋ฌธ์„ ๊ธฐ๋กํ•˜๊ณ , ๊ตฌ์—ญ ์ง„ํ–‰๋ฅ ์ด ๋‚จ์€ ๊ณณ์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, ๋งค์ผ ์—ด๋ฆฌ๋Š” **๋งˆ์„ ์ด์•ผ๊ธฐ**๊ฐ€ ํ•œ ์ฃผ๋ฏผ๊ณผ ๊ทธ ์•„์ง€ํŠธ, ์‹ค์ œ๋กœ ์ด์–ด์ง„ ๋ ˆํฌ ๋˜๋Š” ๊ตฌ์—ญ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
8586
- **๋„์‹œ๋Š” ์‹ค์ œ ๊ธฐ์—ฌ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.** **์˜คํ”ˆ์†Œ์Šค ํ€˜์ŠคํŠธ**๋Š” ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ง์ ‘ ์š”์ฒญํ•  ๋•Œ๋งŒ ์ต๋ช… GitHub ๊ณต๊ฐœ ๊ฒ€์ƒ‰์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด ํ˜„์žฌ `good first issue`, `help wanted`, ์ผ๋ฐ˜ ์—ด๋ฆฐ ์ด์Šˆ ์ค‘ ์ตœ๋Œ€ ์„ธ ๊ฐœ๋ฅผ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. ์‹ค์ œ ๋ ˆํฌ ์ง‘์„ ๊ฑฐ์นœ ๋’ค ์ •ํ™•ํ•œ ์ด์Šˆ๋กœ ์—ฐ๊ฒฐํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๋Š” ํƒญ์—๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธยทํ† ํฐยท์ด์Šˆ ์ถ”์ ยท์ƒˆ ๋ฐฑ์—”๋“œ๋Š” ์—†๊ณ , ๊ธฐ์กด Star ์ดˆ๋Œ€๋Š” ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ด์Šˆ ์—ด๊ธฐ๋ฅผ ์„ ํƒํ•œ ๋’ค์—๋งŒ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
8687
- **๋ฐฉ๋ฌธ์ž๊ฐ€ ๋„์‹œ์˜ ๊ฐ€์น˜๋ฅผ ์ฆ๋ช…ํ•œ ๋™์„ ์„ ๊ทธ๋Œ€๋กœ ๊ฑด๋„ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.** ๋ ˆํฌ ์ง‘์„ ์—ฐ ๋’ค **Repo Route**์— 2~3๊ณณ์„ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด์œผ๋ฉด, ์ˆ˜์‹  ๋งํฌ๊ฐ€ ์ž…์žฅ ์ „์— ์ •๋ฅ˜์žฅ์„ ํ™•์ธํ•ด ์ฃผ๊ณ  ์‹ค์ œ ์ง‘์„ ์ฐจ๋ก€๋กœ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ธฐ์กด Star ์ดˆ๋Œ€๋Š” ์ด ๊ธธ์„ ์™„์ฃผํ•œ ๋’ค์—๋งŒ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ดˆ์•ˆ์€ ์„ธ์…˜์—๋งŒ ์žˆ๊ณ  URL์—๋Š” ๊ณต๊ฐœ ๋ ˆํฌ ์ด๋ฆ„๋งŒ ๋“ค์–ด๊ฐ€๋ฉฐ, ๋ฐฑ์—”๋“œยท๊ณ„์ •ยท์ €์žฅ ํ‚คยท๋ Œ๋” ์ž์‚ฐ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ€ŽREADME.mdโ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,13 @@ Repolis turns public GitHub metadata and cumulative traffic into a place instead
7575
| stars | roof ornaments |
7676
| recent activity | window glow at night |
7777

78-
Repositories are grouped into topic districts with roads, signs, hubs, and a world map. The owner town refreshes daily from committed traffic history plus the GitHub API. `?user=<login>` builds a lighter public town, while `?repo=<owner>/<repo>` loads one project first. GitHub does not publish visitor, view, or clone traffic for those public API modes, so their buildings use stars, forks, and update recency without inventing traffic.
78+
Repositories are grouped into topic districts with roads, signs, hubs, and a world map. The owner town refreshes daily from committed traffic history plus the GitHub API. `?user=<login>` builds a lighter public town with that user's own World Tree record and bounded local residents, while `?repo=<owner>/<repo>` loads one project first through the same projection. GitHub does not publish visitor, view, or clone traffic for those public API modes, so their buildings use stars, forks, and update recency without inventing traffic.
7979
At ordinary walking distances, a one-draw architectural LOD keeps each repo house's textured walls and roof while preserving its plot, hedge, path, real window panes, shutters, sills, flower boxes, gutters, and tier-specific porch, balcony, or portico.
8080

8181
## A village that lives
8282

8383
- **Residents have lives, not idle loops.** Named townspeople wander their districts, keep daily rhythms, carry changing moods, visit cherished haunts, recognize friends, stroll and sit together, gather around the campfire, and sometimes celebrate a recent repository release. Their cottages form **Starlight Row** on the north-east edge, with resident-coloured gardens, three roof silhouettes, shutters, transoms, selected window boxes, canopies, chimneys, and roof finials. A shared flower bed, lanterns, hedges, and broadleaf/cypress trees care for the commons. Night brings residents home to warm windows and porch seats, while morning sends them back to their district work. Pairs also choose their own short **Shared Joy** excursions to real flower patches, visible night stars, or a real repo houseโ€”without a player prompt or AI call. Ask a specialist question and they introduce the right scholar instead of pretending to know: follow the compass and find that scholar in the world.
84+
- **A public town lives from its own record.** The one existing public-repository load deterministically supplies its era, season, Silence Ledger, archived Roots, and up to six desktop/four phone-or-LOW_END residents with local jobs, greetings, and real repo-home bindings. Traffic, owner residents, Shared/Bound memories, realtime, and grounded services stay unknown or off; no second API request or model call is made.
8485
- **Exploration has continuity.** The Explorer Passport records houses and landmarks, district progress shows what remains, and the daily **Village Chronicle** connects one resident to their cherished haunt and a truthful related repo or district.
8586
- **The city points outward to real work.** **Open Source Quests** makes one anonymous public GitHub search only when the visitor asks, ranks up to three current `good first issue`, `help wanted`, or open issues, and leads through the actual repository house before the exact issue handoff. Results stay in the tab; no login, token, issue tracking, or new backend is involved. The existing earned Star invitation can appear only after the visitor chooses to open an issue.
8687
- **A visitor can hand off the route that proved the town's value.** After opening a repository house, **Repo Route** can save it to an ordered 2โ€“3 stop walk. The recipient's link confirms the stops before entry, points to each real house in sequence, and offers the existing earned Star invitation only after completion. The draft is session-only; the URL contains public repo names and adds no backend, account, storage key, or render asset.

0 commit comments

Comments
ย (0)