Spaces:
Running
Download docs/development_process.md from thoughtspot-demoprep/test-mcp: direct link, hf CLI and curl.
- Browser
- Download file 6.75 kB
-
https://huggingface.co/spaces/thoughtspot-demoprep/test-mcp/resolve/main/docs/development_process.md
- Command line
-
hf download hf://spaces/thoughtspot-demoprep/test-mcp/docs/development_process.md
-
curl -L -o development_process.md https://huggingface.co/spaces/thoughtspot-demoprep/test-mcp/resolve/main/docs/development_process.md
How a DemoPrep change gets to test
2026-10-22. Agreed with boone on 10-20 and 10-21. Code: demoprep_app/tracker/,
scripts/pipeline_run.py, scripts/agent_worker.sh, the tracker tools in
mcp_server.py. The agent that fronts it: docs/agentspot_task_manager_agent.md.
The shape
branch off develop ββ> pull request into develop ββ> approved ββ> pickup run (4x a day)
β
merge into develop, suite, push origin,
push the test Space when it is idle
β
boone promotes test ββ> prod by hand
One integration branch: develop on origin. The test Space (hf-mcp-test,
test-mcp) always runs develop. Only the pickup run moves it. Production is
unchanged: prod/mcp is pushed to hf-mcp by boone, fast-forward, in prose.
Every change is a new branch off develop with a name that says what it
does, the task key first when there is one:
| Kind | Example |
|---|---|
| fix | fix/t42-yodeck-grade-handles-null-rates |
| feat | feat/tracker-tasks-beside-pull-requests |
| docs, test, chore | docs/t51-development-process |
| the agent's | agent/t42-yodeck-grade-handles-null-rates (the worker names these) |
A pull request into develop is the only way back. Put the task key (T-42)
in the title or body if the branch name does not carry it; the tracker links
the PR to its task from either.
Approval
| Who opened it | What happens |
|---|---|
Mike (boone10) or Jack (jackrayner-ts), on any branch except agent/ |
approved on arrival (auto) |
anyone else, or any agent/ branch |
waits for Mike or Jack: a GitHub review, or "approve #57" to the Task Manager agent, which calls approve_pull_request |
| an approver requests changes | held (changes_requested) until their later review approves |
To hold your own PR back, make it a draft. The policy lives in
tracker_people.can_approve / auto_merge, derived by the sync in
demoprep_app/tracker/github_sync.py.
The pickup run
scripts/pipeline_run.py, on boone's Mac under launchd at 7:30, 11:30, 15:30
and 19:30 Eastern (scripts/launchd/com.demoprep.pipeline.plist). Each run:
- On the 7:30 run, turns recent build warnings (
demo_findings) into tasks for the agent, one per finding code (demoprep_app/tracker/findings.py). - Reads the queue: open PRs that are approved, not drafts, targeting
develop, not red, not conflicting. The rest are listed with the reason they are held. - In its own worktree (
pipeline/in the repo, gitignored), merges each ready PR intodevelop, oldest first,--no-ff. A conflict skips that PR and notes its task. - Runs the unit suite (
pytest tests --noconftest). A failure that is not inscripts/pipeline_known_failures.txtmeans no push and a p1 task for the agent. - Pushes
developto origin. - Waits until the test Space has been idle for three minutes (no active build,
no build finished in the last three minutes: a push restarts the Space and
wipes results SEs are still polling), pushes
developtohf-mcp-testmain, waits forpingto report the pushed sha, records adeploymentsrow, and notes "on test-mcp as " on each merged PR's task.
If the Space stays busy for twenty minutes, origin is pushed and the next run pushes the Space. A push that is not a fast-forward (someone pushed to the Space by hand) is refused and reported, never forced. Nothing here touches prod.
Where to look: logs/pipeline.log, the pipeline_status and list_deployments
tools (ask the Task Manager agent "what shipped to test today"), the Pipeline
tab of the Team Tracker Liveboard, the pipeline_runs and deployments tables.
The agent
The agent is a row in tracker_people (is_agent); tasks are assigned to it like
to anyone. scripts/agent_worker.sh takes its top open task, cuts
agent/t<id>-<what> off develop in its own worktree, runs Claude Code with
scripts/agent_worker_prompt.md, and if a commit resulted, pushes the branch
and opens the PR under boone's credentials. The agent has no GitHub login; the
agent/ prefix is what keeps its PRs off the auto-approve path. Run the worker
by hand or add it to launchd beside the pickup run.
One-time setup
- Supabase. Run
demoprep_app/tracker/schema.sqlin the project's SQL editor (idempotent), then thetracker_readerrole lines at its bottom with a password. developto the test tip, once. In the main checkout:
It is a fast-forward (origin'sgit fetch hf-mcp-test origin git branch -f develop hf-mcp-test/main git push origin developdevelopis an ancestor of the test tip). Retarget Jack's open PRs todevelop:gh pr edit <n> --base develop.- The test Space env:
GITHUB_TOKEN,TRACKER_REPOS=boone10/DemoPrep,thoughtspot/tse_demos,TRACKER_INTEGRATION_BRANCH=develop. Setting a variable restarts the Space: checkstatusfirst. The token is a GitHub fine-grained personal access token (Settings, Developer settings, Personal access tokens, Fine-grained) with: Repository access "Only select repositories" includingboone10/DemoPrep; Repository permissions Pull requests: Read-only (Metadata: Read-only comes with it). Optional, for thecheckscolumn once GitHub Actions exist: Checks and Commit statuses, Read-only; without them the sync records "none". A token missing Pull requests answers 403 "Resource not accessible by personal access token" on the first sync (seen 2026-10-22). Editing the token's permissions keeps its value, so the Space secret need not change. Only the test Space getsTRACKER_REPOS: the sync runs in one place. - The Mac:
ghandclaudeon PATH,gh auth loginas boone10;cp scripts/launchd/com.demoprep.pipeline.plist ~/Library/LaunchAgents/ && launchctl load ~/Library/LaunchAgents/com.demoprep.pipeline.plist. The first run creates thepipeline/worktree.MCP_ACCESS_TOKENandHF_TOKENare already in.env. - ThoughtSpot: the Supabase Tracker connection and the TML in
demoprep_app/tracker/tml/(see the agent doc).
Not in this version, on the list
- GitHub Actions running the suite on every PR (the pickup run runs it for now).
- Slack intake from the SC demo tools channel: AgentSpot reads it with boone's
login and calls
create_task; nothing server-side. - Test to staging to prod: boone, by hand, until the test line has run this way for a while.