unitbob 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -30,7 +30,7 @@ claude plugin install unitbob@unitbob
30
30
  ```
31
31
  codex plugin marketplace add sergeygershun/unitbob-connector
32
32
  codex plugin add unitbob@unitbob
33
- npx -y unitbob@0.4.3 codex-install
33
+ npx -y unitbob@0.4.4 codex-install
34
34
  ```
35
35
 
36
36
  Start a new Claude Code or Codex thread so the installed skill and named agents
@@ -28,13 +28,14 @@ export async function probeBehavioralWorld(projectRoot, deps = {
28
28
  env: {
29
29
  ...process.env,
30
30
  RAILS_ENV: 'test',
31
+ CUCUMBER_PUBLISH_QUIET: 'true',
31
32
  UNITBOB_REPO_ROOT: projectRoot,
32
33
  BUNDLE_GEMFILE: join(projectRoot, '.unitbob', 'behavioral', 'Gemfile'),
33
34
  },
34
35
  });
35
36
  if (result.code === 0)
36
37
  return { status: 'ok' };
37
- const detail = [result.stderr, result.stdout].find((text) => text.trim())?.trim() ?? `exit ${result.code}`;
38
+ const detail = [result.stdout, result.stderr].map((text) => text.trim()).filter(Boolean).join('\n') || `exit ${result.code}`;
38
39
  return { status: 'fixable', message: `The connector-owned Ruby/Cucumber World probe failed: ${detail}` };
39
40
  }
40
41
  catch (error) {
@@ -58,6 +59,14 @@ PROBE_OTHER_TIME_ZONE = PROBE_TIME_ZONE&.name == 'UTC' ? 'Hawaii' : 'UTC'
58
59
  PROBE_LOCALE = I18n.locale
59
60
  PROBE_RECEIVER = Object.new
60
61
 
62
+ # The probe runs in a dedicated process, so replacing its in-memory route set
63
+ # cannot affect the host application after the process exits. Keeping these
64
+ # endpoints here makes the profile check independent of routes the host owns.
65
+ Rails.application.routes.draw do
66
+ match '/__unitbob_world_probe__', to: proc { [200, { 'Content-Type' => 'text/plain' }, ['ok']] }, via: :all
67
+ match '/__unitbob_world_probe_redirect__', to: redirect('/__unitbob_world_probe_target__'), via: :all
68
+ end
69
+
61
70
  Given('the first World probe scenario mutates supported state') do
62
71
  @unitbob_connection.execute("INSERT INTO schema_migrations (version) VALUES ('#{PROBE_VERSION}')")
63
72
  Time.zone = PROBE_OTHER_TIME_ZONE
@@ -173,7 +173,7 @@ export async function suitePrepare(config, args = [], deps) {
173
173
  // A fixable runner blocker is not a failure: the structural suite still builds this run. Tell the
174
174
  // vibecoder the one command that unblocks the behavioral peer, then re-run suite-prepare.
175
175
  if (fixableNotices.length > 0) {
176
- actual.stdout.write('\nBehavioral suite skipped this run — its BDD runner is not installed yet. ' +
176
+ actual.stdout.write('\nBehavioral suite skipped this run — its runner or connector-owned World profile is not ready. ' +
177
177
  'This is a fixable setup step, not a build failure, and it does not affect the structural suite:\n' +
178
178
  fixableNotices.join('\n') +
179
179
  '\nFix the above, then re-run `unitbob suite-prepare` to build the behavioral peer.\n');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unitbob",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "Unitbob connector — thin local hands for the Unitbob Rails brain. Owns no domain logic: it runs tools, relays bytes over the wire, and prints what the server returns.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,7 @@ markers, or paths. Do not edit production code, host-owned shared files, the
16
16
  connector-owned harness, or another slice.
17
17
 
18
18
  After every owned edit, run
19
- `npx -y --loglevel=error unitbob@0.4.3 run-local <branch>` and inspect the machine
19
+ `npx -y --loglevel=error unitbob@0.4.4 run-local <branch>` and inspect the machine
20
20
  report. Look only at examples or scenarios matching your owned paths or case
21
21
  markers. Do not require a green exit code from the whole branch: foreign failures
22
22
  and an already-confirmed product red do not widen your scope. Repeat the bounded