Skip to content

Commit 5b7aeb9

Browse files
committed
release(beta): add target-repo-first bootstrap path
1 parent c3832c4 commit 5b7aeb9

File tree

11 files changed

+428
-12
lines changed

11 files changed

+428
-12
lines changed

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@ This changelog tracks the clean VIBE / vibestart root surface.
44

55
Legacy vibestart v3 history remains preserved in `legacy/vibestart-v3/CHANGELOG.v3.md`.
66

7+
## 0.1.0-beta.2 - 2026-04-03
8+
9+
Target-repo-first bootstrap increment.
10+
11+
### Added
12+
13+
- `bootstrap-from-git.sh` wrapper for fetching vibestart from git and bootstrapping the current target repository in place
14+
- `tests/test_bootstrap_from_git.py`
15+
- canonical release story updated around the target-repo-first acquisition model
16+
17+
### Changed
18+
19+
- the intended prerelease adoption path is now target-repo-first instead of requiring a separate long-lived local framework checkout as the main workflow
20+
721
## 0.1.0-beta.1 - 2026-04-03
822

923
First public core-first beta candidate for the new VIBE / vibestart root surface.
@@ -13,6 +27,7 @@ First public core-first beta candidate for the new VIBE / vibestart root surface
1327
- clean public root surface for VIBE and vibestart
1428
- quarantined legacy and internal boundaries
1529
- active `vibestart` bootstrap entrypoint
30+
- target-repo-first `bootstrap-from-git.sh` acquisition wrapper
1631
- explicit `--core` and `--deep` profile selection
1732
- deterministic first-run contract
1833
- VIBE-native beta readiness note

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ It is an agent-agnostic methodology for intent-driven engineering, designed to r
88

99
The clean methodology surface:
1010
- `CHANGELOG.md`
11+
- `bootstrap-from-git.sh`
1112
- `vibestart`
1213
- `tests/test_vibestart.py`
14+
- `tests/test_bootstrap_from_git.py`
1315
- `vibe.toml`
1416
- `docs/requirements.xml`
1517
- `docs/development-plan.xml`
@@ -45,17 +47,20 @@ It is intended to install and adapt one VIBE methodology through two product pro
4547
At the methodology level, `VIBE` remains one standard.
4648
`core` and `deep` are product profiles, not separate frameworks.
4749

48-
Current active entrypoint:
50+
Current active entrypoints:
4951

5052
- `./vibestart --core --target /path/to/project`
5153
- `./vibestart --deep --target /path/to/project`
54+
- from inside a target repository:
55+
`bash <(curl -fsSL <bootstrap-from-git.sh-url>) --repo <git-url> --ref v0.1.0-beta.2 --core --target .`
5256

5357
Current beta posture:
5458

5559
- `core` is the recommended beta path for one-project adoption
5660
- `deep` remains explicit and supported, but its richer adapters are still draft-level
5761
- `docs/vibe/operator-guide.md` describes the normal first project loop after bootstrap
58-
- prerelease git path starts at `v0.1.0-beta.1`
62+
- current prerelease git path is `v0.1.0-beta.2`
63+
- intended adoption UX is target-repo-first: fetch vibestart from git into the current repository context, then write the VIBE surface into that repository
5964

6065
## Repository structure
6166

bootstrap-from-git.sh

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
usage() {
5+
cat <<'EOF'
6+
Bootstrap VIBE into the current or target repository by fetching vibestart from git.
7+
8+
Usage:
9+
bootstrap-from-git.sh --repo <git-url-or-path> --ref <tag-or-branch> (--core | --deep) [--target <path>] [--force] [--dry-run]
10+
11+
Options:
12+
--repo Git URL or local git repository path containing vibestart.
13+
--ref Git tag or branch to fetch. Defaults to v0.1.0-beta.1.
14+
--core Bootstrap the core profile.
15+
--deep Bootstrap the deep profile.
16+
--target Target repository path. Defaults to the current directory.
17+
--force Allow overwrite of existing VIBE surfaces in the target.
18+
--dry-run Show what would be installed without writing files.
19+
--keep-clone Keep the temporary fetched vibestart checkout for inspection.
20+
-h, --help Show this help message.
21+
22+
Environment:
23+
VIBESTART_REPO_URL may be used instead of --repo.
24+
EOF
25+
}
26+
27+
die() {
28+
printf '%s\n' "$1" >&2
29+
exit 1
30+
}
31+
32+
repo_url="${VIBESTART_REPO_URL:-}"
33+
ref="v0.1.0-beta.1"
34+
target="."
35+
profile=""
36+
force=0
37+
dry_run=0
38+
keep_clone=0
39+
40+
while [[ $# -gt 0 ]]; do
41+
case "$1" in
42+
--repo)
43+
[[ $# -ge 2 ]] || die "--repo requires a value."
44+
repo_url="$2"
45+
shift 2
46+
;;
47+
--ref)
48+
[[ $# -ge 2 ]] || die "--ref requires a value."
49+
ref="$2"
50+
shift 2
51+
;;
52+
--target)
53+
[[ $# -ge 2 ]] || die "--target requires a value."
54+
target="$2"
55+
shift 2
56+
;;
57+
--core)
58+
profile="core"
59+
shift
60+
;;
61+
--deep)
62+
profile="deep"
63+
shift
64+
;;
65+
--force)
66+
force=1
67+
shift
68+
;;
69+
--dry-run)
70+
dry_run=1
71+
shift
72+
;;
73+
--keep-clone)
74+
keep_clone=1
75+
shift
76+
;;
77+
-h|--help)
78+
usage
79+
exit 0
80+
;;
81+
*)
82+
die "Unknown argument: $1"
83+
;;
84+
esac
85+
done
86+
87+
[[ -n "$repo_url" ]] || die "A git source is required. Use --repo <git-url-or-path> or set VIBESTART_REPO_URL."
88+
[[ -n "$profile" ]] || die "Explicit profile selection is required. Use --core or --deep."
89+
90+
tmpdir="$(mktemp -d "${TMPDIR:-/tmp}/vibestart-fetch.XXXXXX")"
91+
clone_dir="$tmpdir/repo"
92+
93+
cleanup() {
94+
if [[ "$keep_clone" -eq 0 ]]; then
95+
rm -rf "$tmpdir"
96+
fi
97+
}
98+
trap cleanup EXIT
99+
100+
printf 'Fetching vibestart from git source: %s\n' "$repo_url"
101+
printf 'Using ref: %s\n' "$ref"
102+
103+
git clone --depth 1 --branch "$ref" "$repo_url" "$clone_dir" >/dev/null 2>&1 \
104+
|| die "Failed to fetch vibestart from git source '$repo_url' at ref '$ref'."
105+
106+
cmd=(python3 "$clone_dir/vibestart" "--$profile" "--target" "$target")
107+
if [[ "$force" -eq 1 ]]; then
108+
cmd+=("--force")
109+
fi
110+
if [[ "$dry_run" -eq 1 ]]; then
111+
cmd+=("--dry-run")
112+
fi
113+
114+
"${cmd[@]}"

docs/decisions.xml

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,47 @@
738738
<notes>Also constrains beta messaging to keep deep explicit but not overclaimed while the richer adapter layer is still future work.</notes>
739739
</review>
740740
</D-017>
741+
742+
<D-018 DATE="2026-04-03" STATUS="approved">
743+
<summary>Make target-repo-first git acquisition the supported prerelease bootstrap path instead of requiring a separate long-lived framework checkout as the main user workflow.</summary>
744+
<context>
745+
<problem>The working root bootstrap entrypoint already exists, but the main user story would still force adopters to keep a separate framework checkout around if there were no supported git acquisition wrapper.</problem>
746+
<constraints>The acquisition path must keep git source, ref, profile, and target path explicit, and it must remain a thin wrapper over the existing deterministic bootstrap contract rather than becoming a second methodology surface.</constraints>
747+
</context>
748+
<options>
749+
<option-1 name="Keep separate local checkout as the main path">
750+
<description>Require users to clone or install the framework repo first, then invoke vibestart from that checkout into a target repository.</description>
751+
<pros>Minimal extra implementation work.</pros>
752+
<cons>Adds friction, weakens the target-repo-first mental model, and makes adoption feel tool-centric instead of project-centric.</cons>
753+
<score>4/10</score>
754+
</option-1>
755+
<option-2 name="Support target-repo-first git acquisition">
756+
<description>Let users enter the target repository, fetch vibestart from git, and bootstrap in place through a thin acquisition wrapper.</description>
757+
<pros>Matches the intended adoption UX and keeps the target repository as the active working context.</pros>
758+
<cons>Introduces one more entrypoint surface that must stay aligned with the main bootstrap contract.</cons>
759+
<score>9/10</score>
760+
</option-2>
761+
</options>
762+
<decision>
763+
<chosen>Support target-repo-first git acquisition</chosen>
764+
<rationale>The main prerelease bootstrap path should be project-centric. A thin wrapper around the existing bootstrap command is enough to support that path without splitting the product semantics.</rationale>
765+
</decision>
766+
<impacts>
767+
<module>M-010</module>
768+
</impacts>
769+
<consequences>
770+
<positive>Users can bootstrap directly from inside a target repository using a git source and ref.</positive>
771+
<negative>Maintainers must keep the acquisition wrapper aligned with the main bootstrap contract and release docs.</negative>
772+
</consequences>
773+
<links>
774+
<ref doc="development-plan.xml" id="M-010" />
775+
</links>
776+
<review>
777+
<date>2026-04-03</date>
778+
<outcome>still-valid</outcome>
779+
<notes>Also keeps the acquisition story tied to explicit prerelease refs instead of vague latest-from-main behavior.</notes>
780+
</review>
781+
</D-018>
741782
</Decisions>
742783

743784
<Categories>
@@ -749,10 +790,10 @@
749790
</Categories>
750791

751792
<Statistics>
752-
<total>17</total>
793+
<total>18</total>
753794
<by-status>
754795
<proposed>0</proposed>
755-
<approved>17</approved>
796+
<approved>18</approved>
756797
<rejected>0</rejected>
757798
<superseded>0</superseded>
758799
</by-status>

docs/development-plan.xml

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<risk-8>Copying repository-specific framework truth into a bootstrapped project instead of generating project-generic starting surfaces would install the wrong semantic center.</risk-8>
1515
<risk-9>Claiming beta usability without VIBE-native operator guidance would push adopters back toward quarantined legacy GRACE playbooks.</risk-9>
1616
<risk-10>Leaving bootstrap scaffolds too skeletal would keep the product path documentary instead of making it usable for the first real project loop.</risk-10>
17+
<risk-11>Requiring a separate long-lived framework checkout as the main adoption path would add friction and weaken the target-repo-first bootstrap model.</risk-11>
1718
</ArchitectureNotes>
1819

1920
<Modules>
@@ -328,6 +329,41 @@
328329
<note-4>The git-visible prerelease path and human-readable changelog must stay aligned with the current beta scope.</note-4>
329330
</notes>
330331
</M-009>
332+
333+
<M-010 NAME="GitBootstrapAcquisition" TYPE="ENTRY_POINT" LAYER="2" ORDER="5" STATUS="done">
334+
<contract>
335+
<purpose>Provide a target-repo-first wrapper that fetches vibestart from git and runs bootstrap against the current or specified repository without requiring a separate long-lived local framework checkout as the main user path.</purpose>
336+
<inputs>
337+
<param name="git-source" type="repo-url-or-path" />
338+
<param name="bootstrap-entrypoint" type="M-008" />
339+
</inputs>
340+
<outputs>
341+
<param name="git-bootstrap-wrapper" type="target-repo-first-bootstrap-entry" />
342+
</outputs>
343+
<errors>
344+
<error code="ERR_GIT_SOURCE_REQUIRED" />
345+
<error code="ERR_GIT_FETCH_FAILED" />
346+
<error code="ERR_TARGET_REPO_CONTEXT_DRIFT" />
347+
</errors>
348+
</contract>
349+
<interface>
350+
<export-gitBootstrap PURPOSE="Expose a target-repo-first bootstrap path that acquires vibestart from git and applies it to the active repository." />
351+
</interface>
352+
<depends>M-008, M-009</depends>
353+
<target>
354+
<source>bootstrap-from-git.sh</source>
355+
<tests>tests/test_bootstrap_from_git.py</tests>
356+
</target>
357+
<observability>
358+
<log-prefix>[VIBE][GitBootstrapAcquisition]</log-prefix>
359+
<critical-block>BLOCK_FETCH_AND_BOOTSTRAP</critical-block>
360+
</observability>
361+
<verification-ref>V-M-010</verification-ref>
362+
<notes>
363+
<note-1>The intended adoption UX is target-repo-first: enter the new repository, fetch vibestart from git, and bootstrap in place.</note-1>
364+
<note-2>The wrapper may remain thin, but it must keep git ref selection, source identity, and target path explicit.</note-2>
365+
</notes>
366+
</M-010>
331367
</Modules>
332368

333369
<DataFlow>
@@ -394,13 +430,18 @@
394430
<goal>Make the core path usable for one real project through explicit beta scope, operator guidance, and stronger generated starting surfaces.</goal>
395431
<step-1 module="M-009" status="done" verification="V-M-009">Define the beta boundary, publish the operator loop, and confirm that the generated scaffolds support the first real project slice.</step-1>
396432
</Phase-6>
433+
434+
<Phase-7 name="Git Bootstrap Acquisition" status="done">
435+
<goal>Make target-repo-first bootstrap practical by fetching vibestart from git and applying it directly to the active repository.</goal>
436+
<step-1 module="M-010" status="done" verification="V-M-010">Implement the git acquisition wrapper and verify that a target repository can bootstrap from a git source without a separate long-lived framework checkout.</step-1>
437+
</Phase-7>
397438
</ImplementationOrder>
398439

399440
<ExecutionPolicy>
400441
<default-profile>guided-single</default-profile>
401442
<experimental-surfaces>auto, multi, calibrate-apply</experimental-surfaces>
402443
<experimental-guard>Experimental surfaces are allowed but non-normative until deterministic guards and stronger verification are in place.</experimental-guard>
403-
<controller-owns>README.md, CHANGELOG.md, vibestart, tests/test_vibestart.py, docs/requirements.xml, docs/development-plan.xml, docs/verification-plan.xml, docs/knowledge-graph.xml, docs/decisions.xml, docs/technology.xml, vibe.toml, docs/vibe/*.toml, docs/vibe/beta-readiness.md, docs/vibe/operator-guide.md, docs/vibe/release-path.md</controller-owns>
444+
<controller-owns>README.md, CHANGELOG.md, bootstrap-from-git.sh, vibestart, tests/test_vibestart.py, tests/test_bootstrap_from_git.py, docs/requirements.xml, docs/development-plan.xml, docs/verification-plan.xml, docs/knowledge-graph.xml, docs/decisions.xml, docs/technology.xml, vibe.toml, docs/vibe/*.toml, docs/vibe/beta-readiness.md, docs/vibe/operator-guide.md, docs/vibe/release-path.md</controller-owns>
404445
<worker-owns>Scoped implementation surfaces inside the approved write scope; no worker owns the canonical shared artifacts globally.</worker-owns>
405446
</ExecutionPolicy>
406447

0 commit comments

Comments
 (0)