Compare commits
No commits in common. "d6519f7f73097a21fedad98ce1f014609f2e921a" and "20f30ac17b52d0eee898b9e903d8b8f5614f1256" have entirely different histories.
d6519f7f73
...
20f30ac17b
|
|
@ -5,8 +5,7 @@
|
||||||
"Bash(get-childitem:*)",
|
"Bash(get-childitem:*)",
|
||||||
"WebFetch(domain:geminicli.com)",
|
"WebFetch(domain:geminicli.com)",
|
||||||
"WebFetch(domain:google-gemini.github.io)",
|
"WebFetch(domain:google-gemini.github.io)",
|
||||||
"Bash(Get-ChildItem \"C:\\\\work\\\\claude-meta\\\\home-claude\")",
|
"Bash(Get-ChildItem \"C:\\\\work\\\\claude-meta\\\\home-claude\")"
|
||||||
"Bash(npx:*)"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,36 +50,10 @@
|
||||||
],
|
],
|
||||||
"defaultMode": "acceptEdits"
|
"defaultMode": "acceptEdits"
|
||||||
},
|
},
|
||||||
"model": "sonnet",
|
|
||||||
"enabledPlugins": {
|
"enabledPlugins": {
|
||||||
"csharp-lsp@claude-plugins-official": true,
|
"csharp-lsp@claude-plugins-official": true
|
||||||
"frontend-design@claude-plugins-official": true,
|
|
||||||
"superpowers@claude-plugins-official": true,
|
|
||||||
"code-review@claude-plugins-official": true,
|
|
||||||
"code-simplifier@claude-plugins-official": true,
|
|
||||||
"playwright@claude-plugins-official": true,
|
|
||||||
"claude-md-management@claude-plugins-official": true
|
|
||||||
},
|
},
|
||||||
"language": "German",
|
|
||||||
"alwaysThinkingEnabled": true,
|
"alwaysThinkingEnabled": true,
|
||||||
"effortLevel": "low",
|
"effortLevel": "low",
|
||||||
"mcpServers": {
|
"model": "sonnet"
|
||||||
"playwright": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": [
|
|
||||||
"@playwright/mcp@latest",
|
|
||||||
"--browser",
|
|
||||||
"chromium",
|
|
||||||
"--headed"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"postgres": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": [
|
|
||||||
"-y",
|
|
||||||
"@modelcontextprotocol/server-postgres",
|
|
||||||
"postgresql://krah:krah_dev_pw@localhost:5432/krah_prodb"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
# AIMS Project Memory
|
|
||||||
|
|
||||||
## Razor Pages Migration (Branch: feat/razor-pages-migration)
|
|
||||||
- Dashboard (`/`) and Goals List (`/goals`) migrated to Razor Pages
|
|
||||||
- Blazor `@page` directives removed from `Dashboard.razor` and `GoalsList.razor`
|
|
||||||
- NavMenu.razor: `ForceLoad="true"` on Dashboard and Ziele links
|
|
||||||
- MainLayout.razor: `ToggleDarkMode` now writes `aims-dark-mode` cookie via JS Interop
|
|
||||||
|
|
||||||
### Key gotchas
|
|
||||||
- `<option @(ternary)>` → RZ1031 error; use `asp-items="Model.SelectList"` instead
|
|
||||||
- `Page` property in PageModel conflicts with `PageModel.Page()` method → use `new` keyword: `public new int Page`
|
|
||||||
- Static methods in PageModel not accessible from Razor view via bare `IndexModel.Method()` → qualify fully: `AIMS.Web.Pages.Goals.IndexModel.MakeUrl(...)`
|
|
||||||
- Razor Pages `_Layout.cshtml` lives at `Pages/Shared/`, ViewComponents at `Views/Shared/Components/{Name}/Default.cshtml`
|
|
||||||
- `MapRazorPages()` must come BEFORE `MapRazorComponents<App>()` in Program.cs to claim routes
|
|
||||||
|
|
||||||
### File locations
|
|
||||||
- Layout: `src/AIMS.Web/Pages/Shared/_Layout.cshtml`
|
|
||||||
- NavMenu ViewComponent: `src/AIMS.Web/ViewComponents/NavMenuViewComponent.cs`
|
|
||||||
+ View: `src/AIMS.Web/Views/Shared/Components/NavMenu/Default.cshtml`
|
|
||||||
- CSS: `src/AIMS.Web/wwwroot/css/material.css`
|
|
||||||
- JS: `src/AIMS.Web/wwwroot/js/aims-pages.js`
|
|
||||||
- Dashboard: `src/AIMS.Web/Pages/Dashboard/Index.cshtml[.cs]`
|
|
||||||
- Goals List: `src/AIMS.Web/Pages/Goals/Index.cshtml[.cs]`
|
|
||||||
- Goals Tree partial: `src/AIMS.Web/Pages/Goals/_TreeNode.cshtml`
|
|
||||||
- HTMX endpoint: `src/AIMS.Web/Pages/Goals/Hierarchy.cshtml[.cs]` @ `/goals/hierarchy`
|
|
||||||
|
|
||||||
## Key DTOs
|
|
||||||
- `GoalSummaryDto`: Id, Name, CompanyName, DepartmentName, GoalType, CurrentActualValue, CurrentTargetValue, TargetValue, AchievementPercentage (decimal), Status, TagNames, LatestValuePeriodName, Unit
|
|
||||||
- `GoalHierarchyNodeDto`: same + Level, ParentGoalId, HasChildren, ChildCount, Children, ValueSource
|
|
||||||
- `YearDto`: Id, YearNumber (int), Status, IsEditable
|
|
||||||
- `GoalFilterDto`: CompanyId, DepartmentId, YearId, Status, TagId, SearchTerm, ChildFilterMode, Page, PageSize, IsRootGoal
|
|
||||||
|
|
@ -2,19 +2,11 @@
|
||||||
|
|
||||||
## Feature-Session Workflow
|
## Feature-Session Workflow
|
||||||
|
|
||||||
**TRIGGER** (any phrasing at session start that references a feature/topic):
|
When user says `Feature [topic]` at session start:
|
||||||
- `Feature [topic]`
|
|
||||||
- `zum Feature [topic]`
|
|
||||||
- `wir arbeiten an [topic]`
|
|
||||||
- any similar phrasing indicating a feature or topic context
|
|
||||||
|
|
||||||
**ACTION — always execute immediately on trigger:**
|
|
||||||
1. Look for `docs/feature-[topic].md` in project root (case-insensitive match)
|
1. Look for `docs/feature-[topic].md` in project root (case-insensitive match)
|
||||||
2. If found: read it, confirm context loaded, summarize key points briefly
|
2. If found: read it, confirm context loaded, summarize key points briefly
|
||||||
3. If not found: inform user that no feature doc exists yet, suggest creating one
|
3. If not found: inform user that no feature doc exists yet, suggest creating one
|
||||||
|
|
||||||
**CRITICAL: Do NOT wait to be explicitly asked. Load the feature doc proactively.**
|
|
||||||
|
|
||||||
When user says `aktualisiere deine Feature-Beschreibung` at session end:
|
When user says `aktualisiere deine Feature-Beschreibung` at session end:
|
||||||
1. Locate the relevant `docs/feature-[topic].md`
|
1. Locate the relevant `docs/feature-[topic].md`
|
||||||
2. Update it with key insights, decisions, and findings from the current session
|
2. Update it with key insights, decisions, and findings from the current session
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,6 @@
|
||||||
- `ILongRunningJobService` is for services like AD sync, Hydra — they have dedicated JobType enum entries
|
- `ILongRunningJobService` is for services like AD sync, Hydra — they have dedicated JobType enum entries
|
||||||
|
|
||||||
|
|
||||||
## Naming
|
|
||||||
- App is called **"KRAH-App"** internally (not "KBS" — that's only the technical project name)
|
|
||||||
|
|
||||||
## HydraArchiveData
|
## HydraArchiveData
|
||||||
- Entity: HydraArchiveReloadId, AcquisitionTime, PdatrefPparamDatasupId, DecimalValue
|
- Entity: HydraArchiveReloadId, AcquisitionTime, PdatrefPparamDatasupId, DecimalValue
|
||||||
- Covering index: (HydraArchiveReloadId, AcquisitionTime, PdatrefPparamDatasupId)
|
- Covering index: (HydraArchiveReloadId, AcquisitionTime, PdatrefPparamDatasupId)
|
||||||
|
|
|
||||||
|
|
@ -73,9 +73,6 @@ for (var i = 0; i < itResult.RowCount; i++) {
|
||||||
- Inherits `GrpcClientBase<ISapOrderService>`
|
- Inherits `GrpcClientBase<ISapOrderService>`
|
||||||
- Constructor: `(GrpcChannel, ServiceRegistry, IServiceScopeFactory)`
|
- Constructor: `(GrpcChannel, ServiceRegistry, IServiceScopeFactory)`
|
||||||
- Methods: `return Client?.MethodName(request);`
|
- Methods: `return Client?.MethodName(request);`
|
||||||
- **NOT registered in DI** — resolved via `ServiceRegistry.GetClient<T>()` (async)
|
|
||||||
- To use in a service: inject `ServiceRegistry`, then `var client = await serviceRegistry.GetClient<SapListServiceClient>()`
|
|
||||||
- Never inject a `*Client` class directly via constructor DI — it will throw at startup
|
|
||||||
|
|
||||||
### Microservice → Server (IApiComposer callback)
|
### Microservice → Server (IApiComposer callback)
|
||||||
- **Interface:** `GrpcProtos/GrpcServices/Contracts/Server/IApiComposer.cs`
|
- **Interface:** `GrpcProtos/GrpcServices/Contracts/Server/IApiComposer.cs`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue