Skip to content

Commit f173b7e

Browse files
committed
Revert "Restore Gaasbot CTO voice from the GaaS original, keep it off (#932)"
This reverts commit dcd1a8e.
1 parent dcd1a8e commit f173b7e

2 files changed

Lines changed: 2 additions & 40 deletions

File tree

‎src/agent/directors/gaasbot/package.test.ts‎

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -79,37 +79,13 @@ describe("gaasbotPackage", () => {
7979
expect(gaasbotPackage.modelRole).toBe("plan");
8080
});
8181

82-
test("optionalSkills is style, philosophy, and native-integration", () => {
82+
test("optionalSkills is philosophy and native-integration", () => {
8383
expect(gaasbotPackage.optionalSkills).toEqual([
84-
"style",
8584
"philosophy",
8685
"native-integration",
8786
]);
8887
});
8988

90-
test("systemPrompt carries the CTO voice strands (contract, not phrasing)", () => {
91-
const p = gaasbotPackage.systemPrompt;
92-
expect(p).toMatch(/squash PR commits/i);
93-
expect(p).toMatch(/hooks must be on/i);
94-
expect(p).toMatch(/loose coupling|composability/i);
95-
expect(p).toMatch(/owns the constraint|owning layer/i);
96-
expect(p).toMatch(/statically-typed|static types/i);
97-
expect(p).toMatch(/Push back when/i);
98-
expect(p).toMatch(/Stay flexible when/i);
99-
expect(p).toMatch(/symptom-chasing/i);
100-
expect(p).toMatch(/parent\/operator/i);
101-
});
102-
103-
test("CTO voice grants no ship/implement/merge-block/spawn powers", () => {
104-
const p = gaasbotPackage.systemPrompt;
105-
expect(p).not.toMatch(
106-
/you (may|can|will|should) (ship|implement|merge|spawn|block)/i,
107-
);
108-
expect(p).not.toMatch(/go ahead and (ship|implement|merge)/i);
109-
expect(p).not.toMatch(/merge-block(ing|er)? (powers|authority)/i);
110-
expect(p).not.toMatch(/act as (a|the) (gate|implementer|orchestrator)/i);
111-
});
112-
11389
test("primaryIntent and outOfLane match risk counsel lane", () => {
11490
expect(gaasbotPackage.primaryIntent).toMatch(/[Rr]isk counsel/i);
11591
expect(gaasbotPackage.description).toMatch(/[Rr]isk counsel/i);

‎src/agent/directors/gaasbot/package.ts‎

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import { REVIEW_TOOLS } from "../tool-sets.js";
44
/**
55
* Risk counsel worker (CL-7028). Package id/path remains `gaasbot`.
66
* Strategic risk/sequencing advice — not a hard gate, not implement, not Greybeard/Counsel.
7-
* CTO voice ported from abklabs/agents plugins/gaas/agents/gaasbot.md @ 6e16b6c
8-
* (6e16b6c not resolvable locally; ported from the local HEAD copy instead).
97
*/
108
export const gaasbotPackage: DirectorPackage = {
119
id: "gaasbot",
@@ -18,7 +16,7 @@ export const gaasbotPackage: DirectorPackage = {
1816
"applying product fixes",
1917
],
2018
description: "Risk counsel — strategic ship/sequencing advice, not a gate",
21-
optionalSkills: ["style", "philosophy", "native-integration"],
19+
optionalSkills: ["philosophy", "native-integration"],
2220
tools: { allow: REVIEW_TOOLS },
2321
spawn: { maySpawn: false },
2422
tier: "leaf",
@@ -40,17 +38,5 @@ DONE GATE: Stop when the brief's risk/sequencing ask is answered OR Blockers are
4038
4139
OUT OF LANE: shipping product code, architecture gate ownership (Greybeard), eng plan authorship (Counsel), merge-block theater without evidence, becoming Builder/Critic/orchestrator as primary.
4240
43-
CTO VOICE (ported from the GaaS original): direct, conversational, professional without stuffy. Plain language, occasionally colorful. No padding, no hedged softeners — when something is wrong, say so and move on. "user" means the parent/operator. No emojis.
44-
45-
Git discipline: squash PR commits before merging. Git hooks must be on — a commit that bypasses checks means the setup is broken. Run the repo check gate before opening a PR.
46-
47-
Architecture opinions: composability and loose coupling — interfaces over implementations, plugins over monoliths. Move logic to the layer that owns the constraint instead of working around it downstream. Expose hooks and plugin points rather than bespoke forks per use case. Start with the greatest hits — ship the common cases, expand deliberately. Flag experimental work behind flags. Accept old shapes without over-engineering backwards compatibility; duplicate a type rather than couple packages through types.
48-
49-
Tech preferences (pragmatic, maintained, out of the way — new tools only when they solve a real problem): strict static types that catch bugs at compile time; explicit inspectable builds; broad-compatibility open-source licenses; modern runtimes without polyfill or transpilation layers.
50-
51-
Push back when: complexity is proposed for a hypothetical future; type assertions stand in for validation; state lives where it does not belong; layers pile up without owning a constraint. Stay flexible when: the current code is a known hack; an external contributor has a legitimate use case (offer a fitting alternative, do not just close the door); shipped beats perfect — documented temporary workarounds are fine; docs pseudo-code does not need to compile.
52-
53-
How to respond: be direct and specific — what to change and why, with codebase references and a concrete alternative. Reason architecture from the principles above; weigh prioritization against business impact and simplicity. Say "I don't know" over feigning certainty. Call out symptom-chasing and redirect to the owning layer.
54-
5541
Findings: risk and sequencing advice — blockers, ship-with-note, filed-for-later, and the unraised miss.`,
5642
};

0 commit comments

Comments
 (0)