@majeanson/lac 3.4.5 → 3.5.1
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/dist/index.mjs +1951 -176
- package/dist/index.mjs.map +1 -1
- package/dist/lsp.mjs +4 -0
- package/dist/mcp.mjs +35 -2
- package/package.json +1 -1
package/dist/lsp.mjs
CHANGED
|
@@ -8861,6 +8861,10 @@ const FeatureSchema = object({
|
|
|
8861
8861
|
lastVerifiedDate: string().regex(/^\d{4}-\d{2}-\d{2}$/, "lastVerifiedDate must be YYYY-MM-DD").optional(),
|
|
8862
8862
|
codeSnippets: array(CodeSnippetSchema).optional(),
|
|
8863
8863
|
implementationNotes: array(string()).optional(),
|
|
8864
|
+
pmSummary: string().optional(),
|
|
8865
|
+
testStrategy: string().optional(),
|
|
8866
|
+
releaseVersion: string().optional(),
|
|
8867
|
+
acceptanceCriteria: array(string()).optional(),
|
|
8864
8868
|
fieldLocks: array(FieldLockSchema).optional(),
|
|
8865
8869
|
featureLocked: boolean().optional()
|
|
8866
8870
|
});
|
package/dist/mcp.mjs
CHANGED
|
@@ -3778,6 +3778,10 @@ const FeatureSchema$1 = object$1({
|
|
|
3778
3778
|
lastVerifiedDate: string$2().regex(/^\d{4}-\d{2}-\d{2}$/, "lastVerifiedDate must be YYYY-MM-DD").optional(),
|
|
3779
3779
|
codeSnippets: array$1(CodeSnippetSchema$1).optional(),
|
|
3780
3780
|
implementationNotes: array$1(string$2()).optional(),
|
|
3781
|
+
pmSummary: string$2().optional(),
|
|
3782
|
+
testStrategy: string$2().optional(),
|
|
3783
|
+
releaseVersion: string$2().optional(),
|
|
3784
|
+
acceptanceCriteria: array$1(string$2()).optional(),
|
|
3781
3785
|
fieldLocks: array$1(FieldLockSchema$1).optional(),
|
|
3782
3786
|
featureLocked: boolean$2().optional()
|
|
3783
3787
|
});
|
|
@@ -8091,6 +8095,10 @@ object({
|
|
|
8091
8095
|
lastVerifiedDate: string().regex(/^\d{4}-\d{2}-\d{2}$/, "lastVerifiedDate must be YYYY-MM-DD").optional(),
|
|
8092
8096
|
codeSnippets: array(CodeSnippetSchema).optional(),
|
|
8093
8097
|
implementationNotes: array(string()).optional(),
|
|
8098
|
+
pmSummary: string().optional(),
|
|
8099
|
+
testStrategy: string().optional(),
|
|
8100
|
+
releaseVersion: string().optional(),
|
|
8101
|
+
acceptanceCriteria: array(string()).optional(),
|
|
8094
8102
|
fieldLocks: array(FieldLockSchema).optional(),
|
|
8095
8103
|
featureLocked: boolean().optional()
|
|
8096
8104
|
});
|
|
@@ -8445,6 +8453,25 @@ Return ONLY a valid JSON array of plain strings — no other text, no markdown f
|
|
|
8445
8453
|
|
|
8446
8454
|
If there are no notable implementation notes, return an empty array: []`,
|
|
8447
8455
|
userSuffix: "Extract free-form implementation notes for this feature."
|
|
8456
|
+
},
|
|
8457
|
+
pmSummary: {
|
|
8458
|
+
system: `You are a product manager writing for a non-technical executive audience. Given a feature.json, write a 1–2 sentence business-value summary. Focus on the outcome and the user or business benefit — not the technical implementation. Avoid words like "component", "schema", "API", "TypeScript". Write as if you are telling a stakeholder why this feature matters. Return only the summary text, no JSON wrapper, no heading.`,
|
|
8459
|
+
userSuffix: "Write a 1–2 sentence PM/exec summary for this feature."
|
|
8460
|
+
},
|
|
8461
|
+
testStrategy: {
|
|
8462
|
+
system: `You are a software testing expert. Given a feature.json, describe in 2-4 sentences how this feature should be tested. Cover: what type of tests are appropriate (unit, integration, E2E, manual), what the hardest thing to test is, and any test setup or environment requirements implied by the feature. Be specific — name the actual components or flows that need coverage. Return only the strategy text, no JSON wrapper, no heading.`,
|
|
8463
|
+
userSuffix: "Describe the test strategy for this feature."
|
|
8464
|
+
},
|
|
8465
|
+
releaseVersion: {
|
|
8466
|
+
system: `You are a software engineering analyst. Given a feature.json, return the release version string this feature first shipped in, if it can be inferred from the statusHistory dates, revisions, or annotations. If not determinable, return an empty string. Return only the version string (e.g. "3.5.0", "v2", "2026-Q2") or an empty string — nothing else.`,
|
|
8467
|
+
userSuffix: "Identify the release version this feature first shipped in, or return empty string if unknown."
|
|
8468
|
+
},
|
|
8469
|
+
acceptanceCriteria: {
|
|
8470
|
+
system: `You are a software testing expert. Given a feature.json, break the successCriteria and problem statement into 3-8 discrete, testable acceptance criteria. Each criterion must be a single concrete, verifiable statement (e.g. "Camera roll permission prompt appears on first launch only", "Denying permission shows a recovery screen with an Open Settings button"). No vague statements. No compound criteria (one thing per item).
|
|
8471
|
+
|
|
8472
|
+
Return ONLY a valid JSON array of strings — no other text:
|
|
8473
|
+
["criterion 1", "criterion 2", "criterion 3"]`,
|
|
8474
|
+
userSuffix: "Generate structured acceptance criteria for this feature."
|
|
8448
8475
|
}
|
|
8449
8476
|
};
|
|
8450
8477
|
const JSON_FIELDS = new Set([
|
|
@@ -8455,7 +8482,9 @@ const JSON_FIELDS = new Set([
|
|
|
8455
8482
|
"npmPackages",
|
|
8456
8483
|
"publicInterface",
|
|
8457
8484
|
"externalDependencies",
|
|
8458
|
-
"codeSnippets"
|
|
8485
|
+
"codeSnippets",
|
|
8486
|
+
"implementationNotes",
|
|
8487
|
+
"acceptanceCriteria"
|
|
8459
8488
|
]);
|
|
8460
8489
|
const ALL_FILLABLE_FIELDS = [
|
|
8461
8490
|
"analysis",
|
|
@@ -8465,6 +8494,9 @@ const ALL_FILLABLE_FIELDS = [
|
|
|
8465
8494
|
"tags",
|
|
8466
8495
|
"successCriteria",
|
|
8467
8496
|
"userGuide",
|
|
8497
|
+
"pmSummary",
|
|
8498
|
+
"testStrategy",
|
|
8499
|
+
"acceptanceCriteria",
|
|
8468
8500
|
"domain",
|
|
8469
8501
|
"componentFile",
|
|
8470
8502
|
"npmPackages",
|
|
@@ -8472,7 +8504,8 @@ const ALL_FILLABLE_FIELDS = [
|
|
|
8472
8504
|
"externalDependencies",
|
|
8473
8505
|
"lastVerifiedDate",
|
|
8474
8506
|
"codeSnippets",
|
|
8475
|
-
"implementationNotes"
|
|
8507
|
+
"implementationNotes",
|
|
8508
|
+
"releaseVersion"
|
|
8476
8509
|
];
|
|
8477
8510
|
function getMissingFields(feature) {
|
|
8478
8511
|
return ALL_FILLABLE_FIELDS.filter((field) => {
|