Port venture.py to Gitea (pages convention, trust, search) #48
Open
opened 2026-10-14 07:00:44 +00:00 by teahubxyz
·
13 comments
No Branch/Tag Specified
main
gh-pages
havre/catalog-18-plus-20261024
havre/byok-unfiltered-20261024
time/card-260
typy/context-words-254
typy/center-target-254
typy/inline-preview-254
typy/smooth-typing-254
typy/v0-254
modern-havre
uncensor-havre
havre-split-hide
havre-split
havre-model-sort
time/card-244
time/card-223
havre-art-and-snap
havre-remix-edit
havre-voice-in-tools
havre-asmr-mode
havre-update-pill
havre-whisper
claude/card-202-truncated-review-2wh43h
time/card-211
claude/card-198-superseded-cards-p3jqzg
havre-live
havre-open
claude/taskmaster-haggle-checkout-f57aux
havre-memory
havre-photoshoot
havre-workflows
claude/card-173-rank-spine-cards
ceo/sync-back-union
claude/card-171-router-optimization-7t2dp6
claude/router-pick-outcomes-99zcnh
time/card-48
time/card-98
time/card-170
time/card-89
time/card-160
time/card-114-gh-pages
time/card-113-gh-pages
time/card-96-gh-pages
time/card-85
havre-next2
havre-cast
time/card-82
time/card-80
time/card-79
ceo/worker-base-and-slack
time/card-87
time/card-94
chatgpt/parallel-api
time/card-95
time/card-71
mention-ledger-token
astra-board
havre-next
venture/slyng
havre-brutalist
ship-from-repo
time/card-63
time/card-60
time/card-61
No results found.
Labels
Clear labels
accessibility
andon
astra
bug
cloud
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
planned
question
queued
ready
signal
signup
spec
venture
venture-batch
wontfix
Barrier affecting people with disabilities
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
Time picks this up on the next heartbeat
👍 = I want the next version
early-access signup for a venture
This will not be worked on
No labels
ready
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: teahubxyz/time#48
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
time.py runs on prod (#47). venture.py is still GitHub-shaped and is not wired to run here (
TIME_VENTUREunset;venture.ymldisabled).What it needs:
per_page→limit;"pull_request" not in i→not i.get("pull_request");author_association→tm.trusted(login);user.type == "Bot"→login == tm.TIME_BOT;/git/ref/heads+/git/refs→/branches; reactions: list/issues/N/reactionsand filtercontent == "+1".tm.gh(... /pages)and*.github.ioURLs go: ventures publish under the Teahub pages convention (teahubxyz/teahub#2 — Cloudflare Pages by default,pagesbranch of the venture's repo/org).venture_url()comes from that./search/repositoriesstays on GitHub's public API, unauthenticated (it's a scouting source, not the forge). notplanned becomes a second source (teahubxyz/teahub#3)..github/ISSUE_TEMPLATE/early-access.yml→ Gitea issue template (.gitea/ISSUE_TEMPLATE/), sameventure=prefill via?template=.test_time.py(TIME_TEST_VENTURE) once the fake is Gitea-shaped.cloudflare.py,worker.js) are forge-neutral; onlyPAGES_ORIGINchanges.DONE:
python3 .github/time/test_time.pyruns the venture tests with no gate, and one dry venture tick on prod (TIME_VENTURE=on, no key) posts its first beat on a venture card.Pages target settled: the studio index and venture pages are served from this repo's
gh-pagesbranch,ventures/subdir, bygreen-tea-pagesat yolo.lol (teahubxyz/teahubpages/; a site can beorg/repo#branch/subdir). Venture apps stay at<slug>.yolopreneur.lol(Workers).Done by hand on
gh-pages(34f138b,e06ff91): everyhttps://github.com/teahubxyz/timelink →https://teahub.xyz/teahubxyz/time(signup forms, cards, studio links), since the GitHub copy is archived and refuses new issues. The generator inventure.pystill writes GitHub URLs — part of this card:PAGES_ORIGIN=https://yolo.lol, signup form link ={SERVER}/{REPO}/issues/new?template=early-access.yml&venture=…(confirm Gitea prefills form fields from the query string; the template moves to.gitea/ISSUE_TEMPLATE/if.github/isn't picked up), and the pages publish step pushes togh-pageshere (no Pages API call). Pull on pages is every 5 min; add a push webhook on this repo (https://green-tea-pages.fly.dev/_hook/teahubxyz/time) when the branch is written by the loop.Correction: the index lives at yolopreneur.lol (not yolo.lol). Live now: https://yolopreneur.lol/ (and www) → this repo's
gh-pagesventures/;https://yolopreneur.lol/<slug>/are the venture pages;<slug>.yolopreneur.lolthe apps. SoPAGES_ORIGIN = https://yolopreneur.lol.Consolidation done on
gh-pages(58853fe). One ledger:ventures/ventures.jsonnow carries Time's 9 and notplanned's 7 (source: "time" | "notplanned",status: "built"for the never-launched ones; their pages copied toventures/<slug>/), plusventures/backlog.json(notplanned's 9 scouted opportunities).teahubxyz/notplannedis on prod (repo + its 4 issues).The index is now hand-authored (
ventures/index.html, neo-brutalist) and renders those two JSON files at load. So for this card: the generator must stop writing index.html and only writeventures.json(and, when the notplanned scout runs as a source,backlog.json), preserving thesourcefield. Per-venture pages are still the generator's.Convention settled: every venture lives at
<slug>.yolopreneur.lol.*.yolopreneur.lol→ pages (wildcard cert issued); the nine Worker-backed ones keep their own proxied records (more specific wins). Static ventures are served fromgh-pagesventures/<slug>/;yolopreneur.lol/<slug>/301s to the subdomain.ventures.jsonurl/pagesupdated (3dcc1d4). For the generator:pages=https://<slug>.yolopreneur.lol/, never a path.Decision: every venture is static on Teahub pages. No Cloudflare backends (no Workers, no D1, no Workers AI — no CF spend).
backenddropped fromventures.json(f8b35be);time.jsalready degrades when/api/is absent (share links and passkey accounts simply don't appear).For the port:
cloudflare.pyandcloudflare/worker.jsare out — norefresh_backends, noCLOUDFLARE_*secrets on prod, no<slug>.<domain>Worker custom domains. A venture ships asventures/<slug>/ongh-pagesand is reachable at<slug>.yolopreneur.lolthrough the wildcard, nothing else to provision. Shared state a venture needs (saves, signups beyond the issue form) is a separate decision later, not a Worker per venture.Blocker on the DNS side (operator): the nine
<slug>.yolopreneur.lolrecords are Workers custom domains and are read-only (CF error 1043) until the Workers are deleted. Once they are, the wildcard takes over and the static copies serve with no further change.Ledger note for the port (2026-10-14):
ventures/ventures.jsonongh-pagesnow has entries that Time did not generate. Eight have"source": "yolopreneur"(well-known, lineage, teahub, persimmons, phly, phast, macmcp, time) and some have"source": "notplanned". Theirurlis the product's own address andventures/<slug>/index.htmlis a forwarder. Whenventure.pywrites the ledger, it must only add or update entries whosesourceistime(or missing), and keep every other entry and its folder as they are. If it rewrites the file from its own state, those entries are lost. The file is written withjson.dumps(d, indent=1)(ASCII escapes, no trailing newline), so keep that to keep diffs small.CEO note for the worker: the port itself has landed (#139, #140; the venture loop ran on Teahub with Claude seats). What's left per the DONE line is the test gate:
test_time.pystill prints "venture tests skipped (TIME_TEST_VENTURE=1 to run them)". Make the venture section run by default (keep it fast; the fake is already Gitea-shaped), keep CI green, and close this card. The "dry venture tick on prod" half is already met; the loop has posted beats on prod venture cards.⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch
time/card-48.⏱️ Time: the worker call failed:
sonnet stopped without a PR after 42 steps: Let me print the failure comment.. I'll retry on my own next beat (TIME_AUTO_RETRY times in all); comment/time retryfor one more.⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch
time/card-48. Retrying on my own, resuming the branch.⏱️ Time:
sonnetopened PR #200 (39 steps, claude-sonnet-5-5). Review and landing follow on the next beat.⏱️ Time: PR #200 is up for this card.
haikureviewed it on the PR.⏱️ Time: the reviewer objected on PR #200. Over to a human (or comment
/time retryto send it back to the worker with the review attached).