story-kit: merge 294_story_rename_app_title_from_story_kit_to_storkit
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
Recurring issues observed during pipeline operation. Review periodically and create stories for systemic problems.
|
Recurring issues observed during pipeline operation. Review periodically and create stories for systemic problems.
|
||||||
|
|
||||||
## 2026-03-18: Stories graduating to "done" with empty merges
|
## 2026-03-18: Stories graduating to "done" with empty merges (7 of 10)
|
||||||
|
|
||||||
Pipeline allows stories to move through coding → QA → merge → done without any actual code changes landing on master. The squash-merge produces an empty diff but the pipeline still marks the story as done. Confirmed affected: 247, 273, 280. Stories 274, 278, 279 appeared empty via merge commits but code was actually committed directly to master by agents (see next problem). Root cause: no check that the merge commit contains a non-empty diff before advancing to done. Frequency: 3+ confirmed cases out of 10 done stories.
|
Pipeline allows stories to move through coding → QA → merge → done without any actual code changes landing on master. The squash-merge produces an empty diff but the pipeline still marks the story as done. Affected stories: 247, 273, 274, 278, 279, 280, 92. Only 266, 271, 277, and 281 actually shipped code. Root cause: no check that the merge commit contains a non-empty diff. Filed bug 283 for the manual_qa gate issue specifically, but the empty-merge-to-done problem is broader and needs its own fix.
|
||||||
|
|
||||||
## 2026-03-18: Agent committed directly to master instead of worktree
|
## 2026-03-18: Agent committed directly to master instead of worktree
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Story Kit</title>
|
<title>Storkit</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -819,7 +819,7 @@ export function Chat({ projectPath, onCloseProject }: ChatProps) {
|
|||||||
fontSize: "1.1rem",
|
fontSize: "1.1rem",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Welcome to Story Kit
|
Welcome to Storkit
|
||||||
</h3>
|
</h3>
|
||||||
<p
|
<p
|
||||||
style={{
|
style={{
|
||||||
|
|||||||
@@ -136,9 +136,9 @@ describe("ChatHeader", () => {
|
|||||||
expect(screen.getByText("Built: 2026-01-01 00:00")).toBeInTheDocument();
|
expect(screen.getByText("Built: 2026-01-01 00:00")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("displays Story Kit branding in the header", () => {
|
it("displays Storkit branding in the header", () => {
|
||||||
render(<ChatHeader {...makeProps()} />);
|
render(<ChatHeader {...makeProps()} />);
|
||||||
expect(screen.getByText("Story Kit")).toBeInTheDocument();
|
expect(screen.getByText("Storkit")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("labels the claude-pty optgroup as 'Claude Code'", () => {
|
it("labels the claude-pty optgroup as 'Claude Code'", () => {
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ export function ChatHeader({
|
|||||||
letterSpacing: "0.02em",
|
letterSpacing: "0.02em",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Story Kit
|
Storkit
|
||||||
</span>
|
</span>
|
||||||
<div
|
<div
|
||||||
title={projectPath}
|
title={projectPath}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ function makeProps(
|
|||||||
describe("SelectionScreen", () => {
|
describe("SelectionScreen", () => {
|
||||||
it("renders the title and description", () => {
|
it("renders the title and description", () => {
|
||||||
render(<SelectionScreen {...makeProps()} />);
|
render(<SelectionScreen {...makeProps()} />);
|
||||||
expect(screen.getByText("Story Kit")).toBeInTheDocument();
|
expect(screen.getByText("Storkit")).toBeInTheDocument();
|
||||||
expect(
|
expect(
|
||||||
screen.getByText("Paste or complete a project path to start."),
|
screen.getByText("Paste or complete a project path to start."),
|
||||||
).toBeInTheDocument();
|
).toBeInTheDocument();
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export function SelectionScreen({
|
|||||||
className="selection-screen"
|
className="selection-screen"
|
||||||
style={{ padding: "2rem", maxWidth: "800px", margin: "0 auto" }}
|
style={{ padding: "2rem", maxWidth: "800px", margin: "0 auto" }}
|
||||||
>
|
>
|
||||||
<h1>Story Kit</h1>
|
<h1>Storkit</h1>
|
||||||
<p>Paste or complete a project path to start.</p>
|
<p>Paste or complete a project path to start.</p>
|
||||||
|
|
||||||
{knownProjects.length > 0 && (
|
{knownProjects.length > 0 && (
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ pub fn build_openapi_service(ctx: Arc<AppContext>) -> (ApiService, ApiService) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let api_service =
|
let api_service =
|
||||||
OpenApiService::new(api, "Story Kit API", "1.0").server("http://127.0.0.1:3001/api");
|
OpenApiService::new(api, "Storkit API", "1.0").server("http://127.0.0.1:3001/api");
|
||||||
|
|
||||||
let docs_api = (
|
let docs_api = (
|
||||||
ProjectApi { ctx: ctx.clone() },
|
ProjectApi { ctx: ctx.clone() },
|
||||||
@@ -116,7 +116,7 @@ pub fn build_openapi_service(ctx: Arc<AppContext>) -> (ApiService, ApiService) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let docs_service =
|
let docs_service =
|
||||||
OpenApiService::new(docs_api, "Story Kit API", "1.0").server("http://127.0.0.1:3001/api");
|
OpenApiService::new(docs_api, "Storkit API", "1.0").server("http://127.0.0.1:3001/api");
|
||||||
|
|
||||||
(api_service, docs_service)
|
(api_service, docs_service)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ pub async fn run_bot(
|
|||||||
let mut login_builder = client
|
let mut login_builder = client
|
||||||
.matrix_auth()
|
.matrix_auth()
|
||||||
.login_username(&config.username, &config.password)
|
.login_username(&config.username, &config.password)
|
||||||
.initial_device_display_name("Story Kit Bot");
|
.initial_device_display_name("Storkit Bot");
|
||||||
|
|
||||||
if let Some(ref device_id) = saved_device_id {
|
if let Some(ref device_id) = saved_device_id {
|
||||||
login_builder = login_builder.device_id(device_id);
|
login_builder = login_builder.device_id(device_id);
|
||||||
|
|||||||
Reference in New Issue
Block a user