Decouple metadata prompt contract from overridable style

Metadata prompts (workspace title + branch, commit message, PR) mixed the
functional contract with style guidance in one block, and project-owner
instructions from paseo.json were appended after the defaults with an
"override where they conflict" notice — so custom wording competed with the
built-in style instead of replacing it.

Each prompt is now a non-overridable contract (what to produce, the JSON
shape, correctness/safety rules) plus style slots that paseo.json
instructions replace wholesale. Title and branch style are now separate
keys (metadataGeneration.title vs .branchName); previously branchName
instructions also shaped the title.
This commit is contained in:
Mohamed Boudra
2026-06-17 16:48:24 +07:00
parent 2bc48993a5
commit fc4c2aa367
10 changed files with 147 additions and 129 deletions

View File

@@ -37,6 +37,7 @@ describe("paseo config schema", () => {
expect(
PaseoConfigSchema.parse({
metadataGeneration: {
title: { instructions: "Keep titles to a few words." },
branchName: { instructions: "Prefix branches with feat/." },
commitMessage: { instructions: "Use imperative mood." },
pullRequest: { instructions: "Include risk notes." },
@@ -44,6 +45,7 @@ describe("paseo config schema", () => {
}),
).toEqual({
metadataGeneration: {
title: { instructions: "Keep titles to a few words." },
branchName: { instructions: "Prefix branches with feat/." },
commitMessage: { instructions: "Use imperative mood." },
pullRequest: { instructions: "Include risk notes." },

View File

@@ -39,6 +39,7 @@ export const PaseoMetadataGenerationEntrySchema = z
export const PaseoMetadataGenerationSchema = z
.object({
title: PaseoMetadataGenerationEntrySchema.optional(),
branchName: PaseoMetadataGenerationEntrySchema.optional(),
commitMessage: PaseoMetadataGenerationEntrySchema.optional(),
pullRequest: PaseoMetadataGenerationEntrySchema.optional(),