@ryuenn3123/agentic-senior-core 3.0.14 → 3.0.15

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.
@@ -11,6 +11,7 @@ UI Design Mode is context-isolated by default:
11
11
  - Load [AGENTS.md](../../AGENTS.md), [frontend-architecture.md](../rules/frontend-architecture.md), this prompt, UI-relevant state files, current UI code, and existing design docs first.
12
12
  - Do not eagerly load backend-only rules such as [database-design.md](../rules/database-design.md), [docker-runtime.md](../rules/docker-runtime.md), or [microservices.md](../rules/microservices.md) unless the task explicitly crosses those boundaries.
13
13
  - Treat UI consistency, accessibility, and cross-viewport adaptation as first-class constraints, not cosmetic afterthoughts.
14
+ - Start the visual language from the current project context, not from prior website references or remembered layouts from earlier chats.
14
15
 
15
16
  The agent must:
16
17
  1. Read [AGENTS.md](../../AGENTS.md) for project context and team roles.
@@ -19,12 +20,15 @@ The agent must:
19
20
  4. When analyzing an existing UI codebase, inspect low-cost evidence such as hardcoded color density, prop-drilling candidates, and breakpoint chaos before declaring the current design direction healthy.
20
21
  5. If [docs/DESIGN.md](../../docs/DESIGN.md) or `docs/design-intent.json` already exists, check for drift and improve them instead of rewriting blindly.
21
22
  6. If context is incomplete, write explicit assumptions and reversible design bets instead of defaulting to generic SaaS output.
22
- 7. Explore multiple plausible design directions internally, then commit to one cohesive direction with clear rationale tied to the product context.
23
+ 7. Explore multiple plausible design directions internally, then commit to one cohesive direction with clear rationale tied to the product context and at least one memorable signature move.
23
24
  8. Treat any example structure or stylistic inspiration as non-normative. Use it only to judge depth and clarity, never to copy a visual language directly.
24
25
  9. All references to docs or rules must be clickable markdown links.
25
26
  10. Responsive work must adapt layout, navigation, density, and task order across viewports. Shrinking desktop layouts is not enough.
26
- 11. Motion is allowed when it improves feedback, continuity, or spatial understanding. Do not flatten everything into static screens, but do reject decorative motion with no product value.
27
+ 11. Motion can be bold, cinematic, or highly expressive when it improves memorability, hierarchy, feedback, or perceived product quality. Do not flatten everything into static screens. Optimize motion first, and only reject it when it harms clarity, accessibility, or runtime performance.
27
28
  12. Define how core components morph across interaction states and viewports. Component quality is not only visual styling; it includes behavior under hover, focus, active, loading, error, and constrained layouts.
29
+ 13. Do not reuse a color palette, component skin, or motion signature from prior chats, memories, or unrelated projects unless current repo evidence or the active brand brief explicitly asks for that continuity.
30
+ 14. Treat prior website memory, old portfolio styles, and remembered screenshots as tainted context unless the user explicitly asks to continue or evolve that specific visual system.
31
+ 15. Do not default to balanced card grids, soft startup gradients, safe centered heroes, or neutral dashboard chrome unless the product context explicitly justifies them.
28
32
 
29
33
  Required `docs/DESIGN.md` sections:
30
34
  1. Design Intent and Product Personality
@@ -66,6 +70,9 @@ Output:
66
70
  - `docs/design-intent.json` must also include `motionSystem` and `componentMorphology` so future UI work preserves state behavior and purposeful motion without collapsing into generic static output.
67
71
  - Color intent must be defined in a perceptual or relational color model first. Hex values may appear only as implementation derivatives.
68
72
  - The contract must encode viewport mutation rules, not just breakpoint names.
69
- - Motion guidance must preserve creativity: allow meaningful animation, define reduced-motion behavior, and keep choreography fast, intentional, and performant.
73
+ - Motion guidance must preserve creativity: allow meaningful animation, define reduced-motion behavior, and optimize choreography instead of suppressing it by default.
74
+ - Color direction must come from the current project context. Similarity to prior unrelated projects is drift unless the brief or repo evidence explicitly supports it.
75
+ - If no approved reference system exists, synthesize the design from zero using current product context, constraints, and content only.
76
+ - The resulting system should feel authored and recognizable in screenshots, not politely interchangeable with common template kits.
70
77
  - Use practical, modern, accessible language grounded in the project, not generic SaaS defaults or copycat brand systems.
71
78
  - Wait for user approval before generating Figma or code assets.
@@ -9,6 +9,8 @@ When a new project is created or initialized, the agent should automatically:
9
9
  1. Read [AGENTS.md](../../AGENTS.md) to understand available roles and knowledge base.
10
10
  2. Scan all files in [.agent-context/rules/](../rules/) for mandatory engineering standards.
11
11
  3. Review dynamic stack and architecture signals from [.agent-context/state/onboarding-report.json](../state/onboarding-report.json), [.agent-context/state/stack-research-snapshot.json](../state/stack-research-snapshot.json), available stack and blueprint sources, and task constraints.
12
+ 4. If Docker or Compose is in scope, load [docker-runtime.md](../rules/docker-runtime.md) and verify the latest official Docker guidance before authoring container assets. Prefer latest stable compatible images, dependencies, and Compose syntax first; only step down after documenting why.
13
+ 5. For framework or package setup, prefer the latest stable compatible dependency set and official framework setup flow first. Only pin older versions after documenting the exact compatibility reason.
12
14
 
13
15
  ## Architect Mode (Recommended)
14
16
  If the user describes a project or feature, the agent should:
@@ -32,6 +34,8 @@ If the user specifies a framework/blueprint, the agent should:
32
34
  - Every file must follow [naming conventions](../rules/naming-conv.md)
33
35
  - Every module must follow [architecture.md](../rules/architecture.md)
34
36
  - Every dependency must be justified per [efficiency-vs-hype.md](../rules/efficiency-vs-hype.md)
37
+ - Prefer official framework setup commands or canonical starter flows when they produce newer, better-supported dependency defaults than manual package assembly
38
+ - If containerization is selected, Docker assets must follow [docker-runtime.md](../rules/docker-runtime.md) and the latest official Docker docs instead of stale blog-era patterns.
35
39
 
36
40
  ## Stacks & Blueprints Reference
37
41
  See [.agent-context/state/onboarding-report.json](../state/onboarding-report.json), [.cursorrules](../../.cursorrules), and [.windsurfrules](../../.windsurfrules) for the latest shipped stack and blueprint context.
@@ -2,10 +2,18 @@
2
2
 
3
3
  Use this rule when Docker is enabled in project context.
4
4
 
5
+ ## 0. Latest Official Docker Guidance First
6
+ - Before generating or changing Dockerfiles, Compose files, or container runbooks, verify the latest official Docker documentation first.
7
+ - Prefer official Docker sources such as [Docker Compose Quickstart](https://docs.docker.com/compose/gettingstarted/), [Compose file reference](https://docs.docker.com/reference/compose-file/), and [Dockerfile best practices](https://docs.docker.com/build/building/best-practices/).
8
+ - Prefer current `docker compose` workflows and `compose.yaml`. Do not default to legacy `docker-compose` commands or stale file naming unless backward compatibility is a stated project requirement.
9
+ - Do not add the top-level Compose `version` field by default. The current Compose reference treats it as obsolete. Use it only when a compatibility requirement is explicit and documented.
10
+ - Prefer the latest stable compatible Docker base image, package-manager flow, and Compose syntax first. If the latest compatible path fails, step down intentionally and document the exact reason for the fallback.
11
+
5
12
  ## 1. Dynamic Generation Only
6
13
  - Do not copy generic Docker templates blindly.
7
14
  - Generate Docker assets based on actual stack, package manager, and runtime dependencies in the repository.
8
15
  - Re-evaluate Docker instructions when dependencies, build tools, or runtime assumptions change.
16
+ - Prefer the latest stable compatible dependency line first. If an older dependency or base image must be pinned, explain the runtime or compatibility constraint that forced it.
9
17
 
10
18
  ## 2. Separate Development and Production Lanes
11
19
  - Development lane and production lane are separate concerns.
@@ -17,13 +25,17 @@ Use this rule when Docker is enabled in project context.
17
25
  - Use multi-stage builds for production images when possible.
18
26
  - Avoid baking secrets into image layers.
19
27
  - Keep runtime image free from build-only tooling.
28
+ - Prefer fresh base-image validation with `docker build --pull` and use `--no-cache` when a clean dependency refresh is required.
29
+ - Keep a `.dockerignore` strategy in mind so build contexts stay small and do not leak unnecessary files into the image.
20
30
 
21
31
  ## 4. Operational Clarity
22
32
  - Docker instructions must document expected entrypoint and exposed ports.
23
33
  - Local development command and production deployment command must be explicit.
24
34
  - If Docker is not selected for the project, do not force containerization tasks.
35
+ - If Compose is used, document which file is the primary entrypoint, which services are dev-only versus production-facing, and why the chosen layout matches the current Docker docs rather than a legacy blog pattern.
25
36
 
26
37
  ## 5. Review Requirements
27
38
  - Verify the generated Docker workflow matches selected runtime environment (Linux/WSL, Windows, macOS).
28
39
  - Verify development and production instructions are not mixed into one unsafe image path.
29
40
  - Ensure API and service health checks are compatible with container startup behavior.
41
+ - When Docker choices depend on official docs or release behavior, cite the Docker source and verification date in the generated docs or explanation so the next update can refresh them safely.
@@ -3,6 +3,13 @@
3
3
  > Every dependency is a liability. Every `npm install` is a trust decision.
4
4
  > The best dependency is the one you don't need.
5
5
 
6
+ ## Latest-Compatible-First Rule
7
+
8
+ - Start from the latest stable compatible dependency version, not an outdated tutorial version.
9
+ - If the framework has an official scaffolder or setup command that produces current defaults, prefer that path over manually assembling stale `package.json` entries one by one.
10
+ - Only step down to an older dependency version after documenting the exact compatibility, runtime, platform, or ecosystem reason.
11
+ - Treat release notes, official docs, and framework migration guides as the primary source of truth for dependency setup.
12
+
6
13
  ## The Dependency Decision Framework
7
14
 
8
15
  Before adding ANY dependency, answer these 5 questions:
@@ -21,7 +28,7 @@ const padded = str.padStart(10, '0');
21
28
  const flat = nested.flat(Infinity);
22
29
  ```
23
30
 
24
- **Dependency Defense:** If the user asks to install a new library, or if you feel the need to use one, evaluate it against the "stdlib-first" rule. If the functionality can be implemented safely in under 20 lines of code, write it yourself. If a dependency is strictly necessary, you MUST justify it by providing its bundle size, maintenance status, and why the standard library is insufficient.
31
+ **Dependency Defense:** If the user asks to install a new library, or if you feel the need to use one, evaluate it against the "stdlib-first" rule. If the functionality can be implemented safely in under 20 lines of code, write it yourself. If a dependency is strictly necessary, you MUST justify it by providing its bundle size, maintenance status, why the standard library is insufficient, and why the chosen version is the latest stable compatible option.
25
32
 
26
33
  ### 2. Is It Maintained? (The Pulse Check)
27
34
  | Signal | 🟢 Healthy | 🔴 Dead |
@@ -94,19 +101,23 @@ Purpose: [what it does in 1 sentence]
94
101
  Stdlib Alternative: [why it's insufficient — or "none"]
95
102
  Bundle Size: [minified + gzipped]
96
103
  Maintenance: [last release date, maintainer count]
104
+ Version Source: [official docs, release notes, or framework reference]
97
105
  Lock-in Risk: [low/medium/high — how many files would it touch]
98
106
  Exit Strategy: [how to remove it if needed]
107
+ Fallback Reason: [only required when not using the latest stable compatible version]
99
108
  ```
100
109
 
101
110
  ---
102
111
 
103
112
  ## Dependency Update Strategy
104
113
 
105
- 1. **Pin exact versions** in lockfiles (already default with package-lock.json, bun.lockb)
106
- 2. **Review changelogs** before major updates never blindly `npm update`
107
- 3. **Update in isolation** one dependency per PR, with tests passing
108
- 4. **Security patches immediately** — don't wait for the sprint
109
- 5. **Monthly audit** — run `npm audit` / `bun audit` and address findings
114
+ 1. **Start from latest stable compatible versions** older versions need a written reason
115
+ 2. **Prefer official framework setup flows** when they yield newer, canonical dependency sets
116
+ 3. **Pin exact versions** in lockfiles (already default with package-lock.json, bun.lockb)
117
+ 4. **Review changelogs** before major updates never blindly `npm update`
118
+ 5. **Update in isolation** — one dependency per PR, with tests passing
119
+ 6. **Security patches immediately** — don't wait for the sprint
120
+ 7. **Monthly audit** — run `npm audit` / `bun audit` and address findings
110
121
 
111
122
  ---
112
123
 
@@ -15,6 +15,8 @@ Mandatory behavior when triggered:
15
15
  - apply structural checks from `.agent-context/review-checklists/architecture-review.md`
16
16
  - score and review generated UI work against visual intent, interaction quality, and conversion clarity
17
17
  - reject template-only repetitive outputs and force a distinct layout direction
18
+ - treat prior website memory or old-project visual carryover as invalid evidence unless the user explicitly requests continuity with that exact system
19
+ - do not flatten ambitious visual or motion ideas by default; keep them when they are optimized, intentional, and accessible
18
20
 
19
21
  ## UI Consistency Guardrails (Mandatory)
20
22
 
@@ -23,6 +25,9 @@ Mandatory behavior when triggered:
23
25
  - Layout must avoid overlap, clipped text, and misaligned key actions across breakpoints.
24
26
  - Responsive quality requires layout mutation and task reprioritization across breakpoints. Shrinking the desktop layout is not enough.
25
27
  - Keep spacing and positioning token-driven so repeated outputs stay stable.
28
+ - Distinctive visual direction is allowed. Originality is a quality signal when hierarchy, task clarity, and accessibility still hold.
29
+ - Motion is allowed to be expressive. Judge it by clarity, reduced-motion safety, and rendering cost, not by how restrained it looks.
30
+ - Prefer transform and opacity for rich motion. Treat layout-thrashing animation, uncontrolled autoplay, and heavy continuous effects as optimization problems to solve, not reasons to remove personality from the UI entirely.
26
31
 
27
32
  ## 1. File Structure (Feature-Driven Design)
28
33
  Organize your application by feature domain, not by file type.
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-04-21T12:40:20.244Z",
2
+ "generatedAt": "2026-04-21T16:44:50.356Z",
3
3
  "reportName": "memory-continuity-benchmark",
4
4
  "schemaVersion": "1.0.0",
5
5
  "passed": true,
package/.cursorrules CHANGED
@@ -1,6 +1,6 @@
1
1
  # AGENTIC-SENIOR-CORE DYNAMIC GOVERNANCE RULESET
2
2
 
3
- Generated by Agentic-Senior-Core CLI v3.0.14
3
+ Generated by Agentic-Senior-Core CLI v3.0.15
4
4
  Timestamp: 2026-04-18T00:00:00.000Z
5
5
  Selected profile: beginner
6
6
  Selected policy file: .agent-context/policies/llm-judge-threshold.json
@@ -2,7 +2,7 @@
2
2
 
3
3
  Adapter Mode: thin
4
4
  Adapter Source: .instructions.md
5
- Canonical Snapshot SHA256: 85b816e37107188c2776f0ac144d46a11dfc895af5db2656b0d6c12d0dd59dbc
5
+ Canonical Snapshot SHA256: 060b739f87a77375f261a13c3b2b295993ba67b4172420c4223ba1332d47b0a3
6
6
 
7
7
  Canonical policy source: [.instructions.md](../.instructions.md).
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Adapter Mode: thin
4
4
  Adapter Source: .instructions.md
5
- Canonical Snapshot SHA256: 85b816e37107188c2776f0ac144d46a11dfc895af5db2656b0d6c12d0dd59dbc
5
+ Canonical Snapshot SHA256: 060b739f87a77375f261a13c3b2b295993ba67b4172420c4223ba1332d47b0a3
6
6
 
7
7
  The canonical policy source for this repository is [.instructions.md](../.instructions.md).
8
8
 
package/.instructions.md CHANGED
@@ -16,7 +16,7 @@ You use clear, plain language in formal artifacts and do not use emoji.
16
16
 
17
17
  Before responding to ANY request, ensure you have loaded ALL of these layers:
18
18
 
19
- ### Layer 1: Rules (14 Files) [REQUIRED]
19
+ ### Layer 1: Rules (15 Files) [REQUIRED]
20
20
 
21
21
  **Location**: `.agent-context/rules/`
22
22
 
@@ -29,15 +29,16 @@ Universal engineering standards that OVERRIDE everything else:
29
29
  - `error-handling.md` — Never swallow errors, use typed error codes
30
30
  - `testing.md` — Test pyramid, behavior over implementation
31
31
  - `git-workflow.md` — Conventional Commits, atomic changes
32
- - `efficiency-vs-hype.md` — Stable deps over trendy ones
32
+ - `efficiency-vs-hype.md` — Latest-compatible, stable deps over trendy ones
33
33
  - `api-docs.md` — OpenAPI 3.1 mandatory
34
34
  - `microservices.md` — Monolith first, strangler fig pattern
35
35
  - `event-driven.md` — Event sourcing, CQRS, idempotency
36
36
  - `database-design.md` — 3NF default, safe migrations
37
37
  - `realtime.md` — WebSocket scaling, strict pub/sub
38
38
  - `frontend-architecture.md` — Smart/Dumb UI patterns
39
+ - `docker-runtime.md` - Latest-docs-first Dockerfile and Compose generation
39
40
 
40
- **What to do**: Read `.agent-context/rules/` before generating code. Every line you write must comply.
41
+ **What to do**: Read `.agent-context/rules/` before generating code. Every line you write must comply. For Docker or Compose work, load `docker-runtime.md` and verify the latest official Docker docs before authoring container assets. For framework or package setup work, prefer the latest stable compatible dependency set and official setup flow before falling back to older manual versions.
41
42
 
42
43
  ---
43
44
 
package/.windsurfrules CHANGED
@@ -1,6 +1,6 @@
1
1
  # AGENTIC-SENIOR-CORE DYNAMIC GOVERNANCE RULESET
2
2
 
3
- Generated by Agentic-Senior-Core CLI v3.0.14
3
+ Generated by Agentic-Senior-Core CLI v3.0.15
4
4
  Timestamp: 2026-04-18T00:00:00.000Z
5
5
  Selected profile: beginner
6
6
  Selected policy file: .agent-context/policies/llm-judge-threshold.json
package/AGENTS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Adapter Mode: thin
4
4
  Adapter Source: .instructions.md
5
- Canonical Snapshot SHA256: 85b816e37107188c2776f0ac144d46a11dfc895af5db2656b0d6c12d0dd59dbc
5
+ Canonical Snapshot SHA256: 060b739f87a77375f261a13c3b2b295993ba67b4172420c4223ba1332d47b0a3
6
6
 
7
7
  This file is an adapter entrypoint for agent discovery.
8
8
  The canonical policy source is [.instructions.md](.instructions.md).
@@ -836,6 +836,7 @@ export async function runInitCommand(targetDirectoryArgument, initOptions = {})
836
836
  key: selectedProjectScopeKey,
837
837
  label: selectedProjectScopeLabel,
838
838
  },
839
+ projectTopology: discoveryAnswers?.architectureStyle || null,
839
840
  selectedStackFileName: selectedResolvedStackFileName,
840
841
  selectedAdditionalStackFileNames,
841
842
  selectedBlueprintFileName: selectedResolvedBlueprintFileName,
@@ -879,6 +880,9 @@ export async function runInitCommand(targetDirectoryArgument, initOptions = {})
879
880
  }
880
881
  if (!projectDetection.hasExistingProjectFiles) {
881
882
  console.log(`- Project domain: ${selectedProjectScopeLabel}`);
883
+ if (discoveryAnswers?.architectureStyle) {
884
+ console.log(`- Project topology: ${discoveryAnswers.architectureStyle}`);
885
+ }
882
886
  }
883
887
  console.log(`- Stack: ${toTitleCase(selectedResolvedStackFileName)}`);
884
888
  if (selectedAdditionalStackFileNames.length > 0) {
@@ -38,6 +38,7 @@ export async function writeOnboardingReport({
38
38
  selectedProfilePack,
39
39
  selectedPreset,
40
40
  projectScope = null,
41
+ projectTopology = null,
41
42
  selectedStackFileName,
42
43
  selectedAdditionalStackFileNames = [],
43
44
  selectedBlueprintFileName,
@@ -73,6 +74,7 @@ export async function writeOnboardingReport({
73
74
  : null,
74
75
  selectedPreset,
75
76
  projectScope,
77
+ projectTopology,
76
78
  selectedStack: selectedStackFileName,
77
79
  selectedAdditionalStacks: selectedAdditionalStackFileNames,
78
80
  selectedBlueprint: selectedBlueprintFileName,
@@ -55,6 +55,11 @@ const DOCKER_STRATEGY_CHOICES = [
55
55
  'Docker for both development and production',
56
56
  ];
57
57
 
58
+ const ARCHITECTURE_STYLE_CHOICES = [
59
+ 'Monolith',
60
+ 'Microservice / distributed system',
61
+ ];
62
+
58
63
  function parseBooleanLikeValue(rawValue) {
59
64
  const normalizedValue = String(rawValue || '').trim().toLowerCase();
60
65
  if (['true', 'yes', 'y', '1'].includes(normalizedValue)) {
@@ -111,6 +116,34 @@ function resolveDockerStrategy({ dockerStrategy, useDocker, useDockerDevelopment
111
116
  return DOCKER_STRATEGY_CHOICES[0];
112
117
  }
113
118
 
119
+ function resolveArchitectureStyle(rawArchitectureStyle) {
120
+ const normalizedArchitectureStyle = String(rawArchitectureStyle || '').trim().toLowerCase();
121
+
122
+ if (!normalizedArchitectureStyle) {
123
+ return ARCHITECTURE_STYLE_CHOICES[0];
124
+ }
125
+
126
+ if (normalizedArchitectureStyle === 'monolith' || normalizedArchitectureStyle === 'modular monolith') {
127
+ return ARCHITECTURE_STYLE_CHOICES[0];
128
+ }
129
+
130
+ if (
131
+ normalizedArchitectureStyle === 'microservice'
132
+ || normalizedArchitectureStyle === 'microservices'
133
+ || normalizedArchitectureStyle === 'distributed'
134
+ || normalizedArchitectureStyle === 'distributed system'
135
+ || normalizedArchitectureStyle === 'microservice / distributed system'
136
+ ) {
137
+ return ARCHITECTURE_STYLE_CHOICES[1];
138
+ }
139
+
140
+ const directMatch = ARCHITECTURE_STYLE_CHOICES.find(
141
+ (architectureStyleChoice) => architectureStyleChoice.toLowerCase() === normalizedArchitectureStyle
142
+ );
143
+
144
+ return directMatch || ARCHITECTURE_STYLE_CHOICES[0];
145
+ }
146
+
114
147
  async function askFeatureList(userInterface) {
115
148
  console.log('\nList your key features (one per line, press Enter to finish):');
116
149
 
@@ -175,6 +208,12 @@ export async function runProjectDiscovery(userInterface, options = {}) {
175
208
  projectDescription = defaultProjectDescription || `A ${projectName} project.`;
176
209
  }
177
210
 
211
+ const architectureStyle = await askChoice(
212
+ 'Project topology:',
213
+ ARCHITECTURE_STYLE_CHOICES,
214
+ userInterface
215
+ );
216
+
178
217
  const includeCiGuardrails = shouldAskForCiGuardrails
179
218
  ? await askYesNo(
180
219
  'Enable CI/CD quality checks (guardrails) and the LLM Judge policy?',
@@ -227,6 +266,7 @@ export async function runProjectDiscovery(userInterface, options = {}) {
227
266
  return {
228
267
  projectName,
229
268
  projectDescription,
269
+ architectureStyle,
230
270
  includeCiGuardrails,
231
271
  primaryDomain,
232
272
  databaseChoice,
@@ -349,8 +389,8 @@ function inferDesignKeywords(discoveryAnswers) {
349
389
  'Keep decision-critical information prominent while secondary merchandising stays quiet.',
350
390
  'Let imagery and spacing create premium perception before decorative effects do.',
351
391
  ],
352
- motionPurpose: 'Use restrained motion to reinforce buying confidence, product continuity, and feedback. Motion should feel premium, not promotional.',
353
- motionChoreography: 'Favor short hover/focus transitions, sheet choreography, and product-media continuity. Avoid looping hero motion, autoplay spectacle, and parallax-heavy scenes.',
392
+ motionPurpose: 'Use motion to reinforce buying confidence, product continuity, and premium delight. It may be theatrical at key moments if it stays fast, legible, and supportive of decision-making.',
393
+ motionChoreography: 'Favor fast hover and focus feedback, confident sheet choreography, product-media continuity, and one or two signature reveal moments. Avoid autoplay spectacle that distracts from purchase decisions.',
354
394
  motionDurations: {
355
395
  desktop: 180,
356
396
  mobile: 240,
@@ -382,8 +422,8 @@ function inferDesignKeywords(discoveryAnswers) {
382
422
  'Use visual weight to separate signal from operational noise.',
383
423
  'Reserve strong accents for alerts, decisions, and state transitions only.',
384
424
  ],
385
- motionPurpose: 'Use motion as operational feedback and state continuity, never as ambient decoration that competes with dense information.',
386
- motionChoreography: 'Prefer fast transitions for filters, drawers, status reveals, and row expansion. Avoid floaty choreography and ornamental motion that slows scanning.',
425
+ motionPurpose: 'Use motion as operational feedback and state continuity, while still allowing decisive state transitions that make dense workflows feel alive and controlled.',
426
+ motionChoreography: 'Prefer fast transitions for filters, drawers, status reveals, and row expansion, but allow strong confirmation moments when they improve confidence and scan clarity.',
387
427
  motionDurations: {
388
428
  desktop: 160,
389
429
  mobile: 220,
@@ -415,8 +455,8 @@ function inferDesignKeywords(discoveryAnswers) {
415
455
  'Use code-adjacent rhythm and hierarchy to build trust with technical users.',
416
456
  'Keep complexity legible through spacing, grouping, and explicit interaction states.',
417
457
  ],
418
- motionPurpose: 'Use motion to clarify causality, reveal system state, and preserve context during multi-pane technical workflows.',
419
- motionChoreography: 'Prefer subtle panel transitions, command feedback, and disclosure motion. Avoid ornamental sweeps that make technical work feel imprecise.',
458
+ motionPurpose: 'Use motion to clarify causality, reveal system state, preserve context, and give technical workflows a sense of precision instead of dead stillness.',
459
+ motionChoreography: 'Prefer sharp panel transitions, command feedback, disclosure motion, and occasional signature transitions that feel exact rather than ornamental.',
420
460
  motionDurations: {
421
461
  desktop: 170,
422
462
  mobile: 230,
@@ -448,8 +488,8 @@ function inferDesignKeywords(discoveryAnswers) {
448
488
  'Use contrast and spacing to guide attention between creation, moderation, and discovery.',
449
489
  'Give key interaction moments personality without sacrificing clarity.',
450
490
  ],
451
- motionPurpose: 'Use motion to support reading rhythm, reveal structure, and reward contribution moments without overwhelming long-form consumption.',
452
- motionChoreography: 'Favor reveal choreography for section transitions, lightweight feedback on participation, and measured media behavior. Avoid constant background motion.',
491
+ motionPurpose: 'Use motion to support reading rhythm, reveal structure, and reward contribution moments with visible craft, not generic restraint.',
492
+ motionChoreography: 'Favor reveal choreography for section transitions, expressive but measured feedback on participation, and media behavior that feels alive without becoming noisy.',
453
493
  motionDurations: {
454
494
  desktop: 190,
455
495
  mobile: 250,
@@ -468,7 +508,7 @@ function inferDesignKeywords(discoveryAnswers) {
468
508
  }
469
509
 
470
510
  return {
471
- designPhilosophy: 'Project-specific clarity with one authored tension.',
511
+ designPhilosophy: 'Project-specific clarity with one authored tension and one memorable visual bet.',
472
512
  brandAdjectives: ['clear', 'human', 'distinct'],
473
513
  antiAdjectives: ['generic', 'template-like', 'trend-chasing'],
474
514
  typographyScaleRatio: '1.200',
@@ -480,8 +520,8 @@ function inferDesignKeywords(discoveryAnswers) {
480
520
  'Use rhythm, hierarchy, and motion intentionally so the interface feels authored.',
481
521
  'Keep the system flexible enough to evolve with product scope without losing identity.',
482
522
  ],
483
- motionPurpose: 'Allow motion when it improves continuity, feedback, or perceived craft. Avoid banning motion outright, but reject decorative movement with no product value.',
484
- motionChoreography: 'Use short, purposeful transitions and keep heavier choreography rare, opt-in, and explainable in product terms.',
523
+ motionPurpose: 'Allow motion to create continuity, feedback, perceived craft, and memorability. Optimize bold choreography instead of defaulting to restraint. Reject only motion that harms comprehension, accessibility, or runtime performance.',
524
+ motionChoreography: 'Use fast purposeful transitions for most interactions, but allow a small number of signature transitions or reveal moments when they strengthen product identity and remain technically cheap.',
485
525
  motionDurations: {
486
526
  desktop: 180,
487
527
  mobile: 240,
@@ -580,7 +620,8 @@ function buildDesignIntentContractObject({
580
620
  'Major interface decisions must be explainable in product and user terms.',
581
621
  'Accessibility, responsiveness, and implementation realism are non-negotiable.',
582
622
  'Cross-viewport behavior must reorganize tasks and navigation, not just scale the desktop layout down.',
583
- 'Motion may add character and continuity when it improves the product experience, but it must stay purposeful, performant, and optional for reduced-motion users.',
623
+ 'Motion may add character, memorability, and continuity when it improves the product experience, but it must stay purposeful, performant, and optional for reduced-motion users.',
624
+ 'At least one surface, compositional move, typographic decision, or motion motif should be recognizable at a glance.',
584
625
  ],
585
626
  forbiddenPatterns: [
586
627
  'generic-saas-hero',
@@ -596,6 +637,8 @@ function buildDesignIntentContractObject({
596
637
  allowHexDerivatives: true,
597
638
  requireMotionRationale: true,
598
639
  requireStateMorphology: true,
640
+ requireSignatureMove: true,
641
+ rejectTemplateNeutralLayout: true,
599
642
  },
600
643
  requiredDesignSections: DESIGN_REQUIRED_SECTIONS,
601
644
  implementation: {
@@ -605,6 +648,7 @@ function buildDesignIntentContractObject({
605
648
  requireMachineReadableContract: true,
606
649
  requireViewportMutationRules: true,
607
650
  requirePurposefulMotionGuidelines: true,
651
+ requireRecognizableVisualBet: true,
608
652
  bootstrapPrompt: '.agent-context/prompts/bootstrap-design.md',
609
653
  autoLoadedRuleFiles: [
610
654
  '.agent-context/prompts/bootstrap-design.md',
@@ -819,10 +863,13 @@ function buildProjectContextBootstrapPrompt({
819
863
  '8. Separate confirmed facts from assumptions explicitly. When context is incomplete, add an `Assumptions to Validate` section and a `Next Validation Action` line.',
820
864
  '9. If user inputs conflict with repo evidence, call out the conflict and choose the safer interpretation instead of silently forcing a generic answer.',
821
865
  '10. Do not invent modules or architecture layers only to make the docs look complete.',
866
+ '11. Prefer the latest stable compatible framework and package versions. If an official framework setup flow yields newer, better-supported defaults than manual package assembly, prefer that path.',
867
+ '12. Treat project topology as a design constraint: if the project is a monolith, explain why that shape is sufficient; if it is a microservice or distributed system, explain the service boundary logic and why the split is justified.',
822
868
  '',
823
869
  '## Project Inputs',
824
870
  `- Project name: ${discoveryAnswers.projectName}`,
825
871
  `- Project description: ${discoveryAnswers.projectDescription}`,
872
+ `- Project topology: ${discoveryAnswers.architectureStyle || ARCHITECTURE_STYLE_CHOICES[0]}`,
826
873
  `- Primary domain: ${discoveryAnswers.primaryDomain}`,
827
874
  `- Database strategy: ${discoveryAnswers.databaseChoice}`,
828
875
  `- Auth strategy: ${discoveryAnswers.authStrategy}`,
@@ -924,13 +971,15 @@ function buildDesignBootstrapPrompt({
924
971
  '6. Reject interchangeable hero layouts, generic SaaS gradients, and trend-chasing decoration unless the project context explicitly justifies them.',
925
972
  '7. Encode color intent in perceptual terms first. Hex values may exist only as implementation derivatives.',
926
973
  '8. Responsive guidance must include layout mutation rules for mobile, tablet, and desktop. Shrinking the desktop layout is not enough.',
927
- '9. Motion is allowed when it reinforces feedback, continuity, or hierarchy. Do not remove motion entirely, but reject decorative motion that harms clarity or performance.',
974
+ '9. Motion can be bold, cinematic, or highly expressive when it improves memorability, hierarchy, feedback, or product confidence. Optimize it instead of flattening it. Only reject motion when it harms clarity, accessibility, or runtime performance.',
928
975
  '10. Define component morphology across interaction states and viewports so cards, forms, nav, and feedback surfaces adapt coherently instead of only resizing.',
929
976
  '11. Keep UI-only requests context-isolated. Load frontend design rules first and do not eagerly load backend-only rules unless the task explicitly crosses those boundaries.',
977
+ '12. Make at least one memorable visual bet so the resulting system is recognizable and not template-neutral.',
930
978
  '',
931
979
  '## Project Inputs',
932
980
  `- Project name: ${discoveryAnswers.projectName}`,
933
981
  `- Product context: ${discoveryAnswers.projectDescription}`,
982
+ `- Project topology: ${discoveryAnswers.architectureStyle || ARCHITECTURE_STYLE_CHOICES[0]}`,
934
983
  `- Domain: ${discoveryAnswers.primaryDomain}`,
935
984
  `- Stack: ${toTitleCase(initContext.stackFileName)}`,
936
985
  `- Blueprint: ${toTitleCase(initContext.blueprintFileName)}`,
@@ -1144,6 +1193,7 @@ export async function loadProjectConfig(configFilePath) {
1144
1193
  return {
1145
1194
  projectName: configEntries.projectName || configEntries.name || '',
1146
1195
  projectDescription: configEntries.projectDescription || configEntries.description || '',
1196
+ architectureStyle: resolveArchitectureStyle(configEntries.architectureStyle || configEntries.topology || configEntries.serviceTopology),
1147
1197
  includeCiGuardrails: parseBooleanLikeValue(configEntries.includeCiGuardrails) ?? parseBooleanLikeValue(configEntries.ci) ?? true,
1148
1198
  primaryDomain: configEntries.primaryDomain || configEntries.domain || 'API service',
1149
1199
  databaseChoice: configEntries.databaseChoice || configEntries.database || 'None (stateless service)',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "3.0.14",
3
+ "version": "3.0.15",
4
4
  "type": "module",
5
5
  "description": "Force your AI Agent to code like a Staff Engineer, not a Junior.",
6
6
  "bin": {
@@ -287,6 +287,8 @@ const REQUIRED_UI_DESIGN_AUTOMATION_SNIPPETS = [
287
287
  '`crossViewportAdaptation.mutationRules.mobile/tablet/desktop`',
288
288
  '`motionSystem`',
289
289
  '`componentMorphology`',
290
+ 'Do not reuse a color palette, component skin, or motion signature from prior chats, memories, or unrelated projects',
291
+ 'If no approved reference system exists, synthesize the design from zero using current product context, constraints, and content only.',
290
292
  ],
291
293
  },
292
294
  {
@@ -328,6 +330,58 @@ const REQUIRED_UI_DESIGN_AUTOMATION_SNIPPETS = [
328
330
  ],
329
331
  },
330
332
  ];
333
+ const REQUIRED_DOCKER_RUNTIME_AUTOMATION_SNIPPETS = [
334
+ {
335
+ path: '.instructions.md',
336
+ snippets: [
337
+ 'docker-runtime.md',
338
+ 'For Docker or Compose work, load `docker-runtime.md` and verify the latest official Docker docs before authoring container assets.',
339
+ ],
340
+ },
341
+ {
342
+ path: '.agent-context/rules/docker-runtime.md',
343
+ snippets: [
344
+ 'latest official Docker documentation first',
345
+ 'Docker Compose Quickstart',
346
+ 'Compose file reference',
347
+ 'Dockerfile best practices',
348
+ 'Prefer current `docker compose` workflows and `compose.yaml`.',
349
+ 'Do not add the top-level Compose `version` field by default.',
350
+ 'Prefer the latest stable compatible Docker base image',
351
+ ],
352
+ },
353
+ {
354
+ path: '.agent-context/prompts/init-project.md',
355
+ snippets: [
356
+ 'If Docker or Compose is in scope, load [docker-runtime.md](../rules/docker-runtime.md) and verify the latest official Docker guidance before authoring container assets.',
357
+ 'If containerization is selected, Docker assets must follow [docker-runtime.md](../rules/docker-runtime.md) and the latest official Docker docs instead of stale blog-era patterns.',
358
+ ],
359
+ },
360
+ ];
361
+ const REQUIRED_DEPENDENCY_FRESHNESS_AUTOMATION_SNIPPETS = [
362
+ {
363
+ path: '.instructions.md',
364
+ snippets: [
365
+ 'prefer the latest stable compatible dependency set and official setup flow',
366
+ ],
367
+ },
368
+ {
369
+ path: '.agent-context/rules/efficiency-vs-hype.md',
370
+ snippets: [
371
+ 'Latest-Compatible-First Rule',
372
+ 'latest stable compatible dependency version',
373
+ 'official scaffolder or setup command',
374
+ 'Only step down to an older dependency version after documenting',
375
+ ],
376
+ },
377
+ {
378
+ path: '.agent-context/prompts/init-project.md',
379
+ snippets: [
380
+ 'latest stable compatible dependency set and official framework setup flow first',
381
+ 'Prefer official framework setup commands or canonical starter flows',
382
+ ],
383
+ },
384
+ ];
331
385
  const FORBIDDEN_TEMPLATE_BOOTSTRAP_SNIPPETS = [
332
386
  {
333
387
  path: 'lib/cli/project-scaffolder.mjs',
@@ -1147,6 +1201,50 @@ async function validateUiDesignAutomationCoverage() {
1147
1201
  }
1148
1202
  }
1149
1203
 
1204
+ async function validateDockerRuntimeAutomationCoverage() {
1205
+ console.log('\nChecking Docker runtime automation coverage...');
1206
+
1207
+ for (const coverageRule of REQUIRED_DOCKER_RUNTIME_AUTOMATION_SNIPPETS) {
1208
+ const absoluteCoveragePath = join(ROOT_DIR, coverageRule.path);
1209
+
1210
+ if (!(await fileExists(absoluteCoveragePath))) {
1211
+ fail(`Missing Docker runtime automation source: ${coverageRule.path}`);
1212
+ continue;
1213
+ }
1214
+
1215
+ const coverageContent = await readTextFile(absoluteCoveragePath);
1216
+ for (const requiredSnippet of coverageRule.snippets) {
1217
+ if (coverageContent.includes(requiredSnippet)) {
1218
+ pass(`${coverageRule.path} includes Docker runtime automation snippet: ${requiredSnippet}`);
1219
+ } else {
1220
+ fail(`${coverageRule.path} is missing Docker runtime automation snippet: ${requiredSnippet}`);
1221
+ }
1222
+ }
1223
+ }
1224
+ }
1225
+
1226
+ async function validateDependencyFreshnessAutomationCoverage() {
1227
+ console.log('\nChecking dependency freshness automation coverage...');
1228
+
1229
+ for (const coverageRule of REQUIRED_DEPENDENCY_FRESHNESS_AUTOMATION_SNIPPETS) {
1230
+ const absoluteCoveragePath = join(ROOT_DIR, coverageRule.path);
1231
+
1232
+ if (!(await fileExists(absoluteCoveragePath))) {
1233
+ fail(`Missing dependency freshness automation source: ${coverageRule.path}`);
1234
+ continue;
1235
+ }
1236
+
1237
+ const coverageContent = await readTextFile(absoluteCoveragePath);
1238
+ for (const requiredSnippet of coverageRule.snippets) {
1239
+ if (coverageContent.includes(requiredSnippet)) {
1240
+ pass(`${coverageRule.path} includes dependency freshness automation snippet: ${requiredSnippet}`);
1241
+ } else {
1242
+ fail(`${coverageRule.path} is missing dependency freshness automation snippet: ${requiredSnippet}`);
1243
+ }
1244
+ }
1245
+ }
1246
+ }
1247
+
1150
1248
  async function validateDeterministicBoundaryEnforcementCoverage() {
1151
1249
  console.log('\nChecking deterministic boundary enforcement coverage...');
1152
1250
 
@@ -1417,6 +1515,8 @@ async function main() {
1417
1515
  await validateTemplateFreeBootstrapCoverage();
1418
1516
  await validateUpgradeUiContractWarningCoverage();
1419
1517
  await validateUiDesignAutomationCoverage();
1518
+ await validateDockerRuntimeAutomationCoverage();
1519
+ await validateDependencyFreshnessAutomationCoverage();
1420
1520
  await validateDeterministicBoundaryEnforcementCoverage();
1421
1521
  await validateStackResearchSnapshotState();
1422
1522
  await validateMcpConfiguration();