Compare commits

...

22 Commits

Author SHA1 Message Date
Loretta 1ccf8f3be3 merge 2026-05-26 17:09:04 +02:00
Loretta a5365dd735 Add XML doc conventions and update references
Added a section on XML documentation standards to CONVENTIONS.md, clarified references to core and Mango.Nop framework convention docs, and improved formatting. Enabled EmitCompilerGeneratedFiles in Mango.Nop.Core.csproj.
2026-05-23 09:27:34 +02:00
Loretta e9fc609523 [LOADED_DOCS: 2 files, no new loads]
Update DB connection, protocol flush policy, and docs

- Switch appsettings.json to production DB connection string
- Update copilot-instructions.md to reference Rules #1-6
- Set FlushPolicy.DoubleBuffered for AcBinary protocol in PluginNopStartup.cs
2026-05-05 15:06:06 +02:00
Loretta e9c6efbb90 [LOADED_DOCS: 1 files, no new loads]
Add repo prefixes and clarify workspace dependencies

Added prefix, type, and layer properties to each @repo block in copilot-instructions.md. Updated own-dep-repos arrays for clearer dependency paths. Adjusted [LOADED_DOCS: ...] prefix instructions to reflect correct file counts. These changes enhance multi-repo management and documentation protocol clarity.
2026-04-26 19:13:04 +02:00
Loretta 3f21389bde [LOADED_DOCS: 1 files, no new loads]
Add Deployment & Hosting section to documentation

Added a new section detailing how the FruitBank nopCommerce server is deployed, its relationship with the FruitBank plugin, and clarified that deployment configuration is managed externally. Also documented the removal of the legacy Mango/FruitBank folder and where deployment context is now described. No other changes made.
2026-04-26 14:10:47 +02:00
Loretta ce631560dc [LOADED_DOCS: NONE]
Refactor skill loading protocol in copilot-instructions

Clarified session setup: only two reactive skills are pre-loaded, with three user-gated skills now lazy-loaded on demand. Updated documentation to add "AUTHORITY, RULE SCOPE, AND SKILL INVOCATION" section, revised skill trigger descriptions, and adjusted `[LOADED_DOCS: ...]` prefix logic. Documented docs-archive as a lazy-loaded skill. Added settings.local.json for local file removal permissions. No code logic changes—documentation and protocol only.
2026-04-26 13:44:27 +02:00
Loretta 7321b0a3cd Refactor docs: topic folders, navigation, protocol sync
- Restructured documentation: added `docs/README.md` to each sub-project, moved LOGGING and SIGNALR docs into dedicated subfolders with their own `README.md`.
- Updated all cross-references to use new topic folder paths and canonical AyCode.Core doc locations.
- Updated `.csproj` files to auto-include all Markdown docs and project-level `README.md` files.
- Removed obsolete single-file docs, replaced with structured content in topic folders.
- Enforced AI Agent Protocol: session setup, output prefix, no-re-read, and mandatory `docs-check` skill after code changes.
- Added domain-critical reminders and navigation guidance to relevant `README.md` files.
2026-04-25 07:24:39 +02:00
Loretta e3f04cd396 Update AI Agent protocol docs and config/debug logic
- Switched to new `[LOADED_DOCS: N files (+K this turn: ...)]` prefix format in all protocol docs, with examples and enforcement details.
- Documented `docs-discovery` skill, protocol history, and documentation-first coding requirements.
- Added protocol documentation for `Nop.Plugin.Misc.AIPlugin`.
- Changed SQL connection string to use `FruitBank_DEV` in `appsettings.json`.
- Wrapped `IHubProtocol` debug output in `#if DEBUG` in `PluginNopStartup.cs`.
2026-04-24 08:20:19 +02:00
Loretta 6743d5f14f [LOADED_DOCS: .github\copilot-instructions.md]
Update DB config, docs, and SignalR binary protocol setup

- Switched appsettings.json connection string to production DB.
- Added "Shared Agent Skills" section to copilot-instructions.md in both main and Mango.Nop Libraries repos.
- Refactored PluginNopStartup.cs: improved using statements, updated SignalR to use AddAcBinaryProtocol with explicit options, removed manual IHubProtocol registration, and added protocol diagnostics.
- No business logic changes; focused on configuration, documentation, and infrastructure.
2026-04-22 22:45:05 +02:00
Loretta 318d0c2936 Update DB to DEV and customize AyCodeBinaryHubProtocol DI
Changed connection string to use FruitBank_DEV database. Updated DI registration of AyCodeBinaryHubProtocol to use custom AcBinarySerializerOptions with BufferWriterChunkSize set to 4096. Added import for AyCode.Core.Serializers.Binaries and included a commented alternative DI approach.
2026-04-09 08:28:56 +02:00
Loretta b4fa372ad8 Switch to PROD DB and update SignalR hub protocol
Updated the connection string in appsettings.json to use the FruitBank_PROD database instead of FruitBank_DEV. Changed the SignalR hub protocol registration in PluginNopStartup.cs from AcBinaryHubProtocol to AyCodeBinaryHubProtocol.
2026-04-06 22:45:22 +02:00
Loretta 44501fefc1 Update connection string to use FruitBank_DEV database
Changed the database in appsettings.json connection string from FruitBank_PROD (production) to FruitBank_DEV (development) while keeping all other parameters unchanged.
2026-04-05 17:21:53 +02:00
Loretta f3bc1fe077 Strengthen doc-first protocol and clarify Claude mapping
Updated copilot-instructions.md to enforce stricter documentation-first and multi-repo rules, including cross-repo doc loading, per-question doc checks, and improved context recovery triggers. Broadened explicit consent to all file types. Updated CLAUDE.md with sequential execution override and tool mapping, ensuring Claude follows the same protocol and rule set.
2026-04-04 20:52:56 +02:00
Loretta 956d8fecb3 Enforce doc-first protocol, add SGen, modular plugin docs
- Enforced strict documentation-first AI agent protocol in `.github/copilot-instructions.md` (multi-repo, no auto doc edits, explicit consent, [LOADED_DOCS] prefix, [DOCUMENTATION CHECK] on code changes)
- Updated solution structure: added `docs` folder to solution items for LLM/AI context
- Integrated AyCode SGen (source-generated binary serialization) with forced runtime registration; documented SGen usage and exclusions
- Overhauled plugin `README.md` and added modular docs: `SCHEMA.md`, `DOMAIN_MODEL.md`, `MEASUREMENT.md`, `DATA_LAYER.md`, `AI_SERVICES.md`, `SIGNALR_ENDPOINTS.md`
- Updated `CLAUDE.md` to require reading copilot instructions first
- Switched appsettings connection string to production DB
- Minor doc clarifications, corrects, and project file updates
2026-04-02 22:19:29 +02:00
Loretta debad7f745 Add LLM instruction files for cross-repo navigation
- CLAUDE.md: single-line pointer to copilot-instructions.md
- copilot-instructions.md: added @repo name field, relative paths in own-dep-repos, SCHEMA.md first-use read, "do not re-read .md files" rule, and explicit permission to navigate external repos

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 16:15:03 +02:00
Loretta 02ffd733b3 Add architecture docs for Mango.Nop & update dev DB config
Added detailed documentation: ARCHITECTURE.md, CONVENTIONS.md, GLOSSARY.md, and copilot-instructions.md for Mango.Nop.Core, Data, and Services. Updated/added README.md files for all Mango.Nop libraries and the FruitBank nopCommerce plugin, clarifying structure, key types, and usage. Switched appsettings.json connection string from production to development database. These changes improve developer onboarding and enforce architectural consistency.
2026-03-29 10:44:02 +02:00
Loretta a29035b196 Merge branch 'main' into FruitBank_v0.0.8.0 2026-03-28 16:22:21 +01:00
Loretta f5ff1e1ded Add serialization attributes and update to PROD config
Annotated core entities with AcBinarySerializable and ToonDescription for improved serialization and documentation. Updated appsettings.json to use the production database. Changed solution file to target Visual Studio 17. Added necessary using statements and metadata for entity classes.
2026-03-20 17:06:48 +01:00
Loretta 7e988b9361 Merge branch 'main' into FruitBank_v0.0.8.0 2026-03-06 14:50:54 +01:00
Loretta 2a32233b6d Restore Product class and enums; add Toon metadata
Re-enable Product class and related enums in Nop.Core.Domain.Catalog, moving them from commented to active code. Add [ToonDescription] attributes to Product properties for enhanced documentation and serialization. Mark sensitive Customer fields with [ToonIgnore] to exclude them from Toon processing.
2026-01-17 09:19:45 +01:00
Loretta c47c0ddc9f Merge branch 'main' into FruitBank_v0.0.8.0 2026-01-12 07:23:21 +01:00
Loretta 3d341b6568 Refactor method registration to use DynamicMethodRegistry
Replaced DynamicMethodCallModels.Add with DynamicMethodRegistry.Register for testSignalREndpoint, improving dynamic method call management and aligning with a registry-based approach.
2026-01-06 08:54:45 +01:00
15 changed files with 975 additions and 747 deletions

View File

@ -0,0 +1,7 @@
{
"permissions": {
"allow": [
"Bash(rm \"C:/Users/Fullepi/.claude/projects/H--Applications-Mango-Source-FruitBank/memory/feedback_doc_structure_meta_protocol.md\" \"C:/Users/Fullepi/.claude/projects/H--Applications-Mango-Source-FruitBank/memory/MEMORY.md\")"
]
}
}

184
.github/copilot-instructions.md vendored Normal file

File diff suppressed because one or more lines are too long

17
CLAUDE.md Normal file
View File

@ -0,0 +1,17 @@
CRITICAL: Your FIRST action in every session MUST be reading `.github/copilot-instructions.md`. Execute ALL session-start instructions found there before responding to any user query. It is the single source of truth for this repo.
## SEQUENTIAL EXECUTION OVERRIDE
The AI AGENT CORE PROTOCOL in copilot-instructions.md requires STRICT SEQUENTIAL execution. This OVERRIDES your default parallelization behavior. Do NOT parallelize doc reads with code searches. The sequence is:
1. Read copilot-instructions.md → process its rules FULLY
2. Read ALL docs/ .md files listed in the protocol → wait for completion
3. Output [LOADED_DOCS: ...] prefix
4. ONLY THEN respond to the user's query or search code
## Tool mapping for AI AGENT CORE PROTOCOL
The copilot-instructions.md references Copilot tool names. Map them to Claude Code tools:
- `get_file` / `file_search``Read`, `Glob`, `Grep`
- `code_search` / `get_symbols_by_name` / `find_symbol``Grep`, `Glob`
- `replace_string_in_file` / `edit_file``Edit`
- `create_file``Write`
Follow the protocol using YOUR tools. The rules (LOADED_DOCS prefix, hard-gate, no-re-read, context recovery, explicit consent) apply equally to Claude Code.

View File

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.0.11222.15
# Visual Studio Version 17
VisualStudioVersion = 17.14.36804.6
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{E4ACA93B-D3DE-4557-B069-F1DB42925A4B}"
EndProject
@ -87,6 +87,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nop.Plugin.Misc.MangoCore",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mango.Nop.Data", "..\NopCommerce.Common\4.70\Libraries\Mango.Nop.Data\Mango.Nop.Data.csproj", "{EE44B558-F1DA-433A-BD4C-D275986A4679}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{4403A2FE-7929-44A4-8701-60B3F759D400}"
ProjectSection(SolutionItems) = preProject
..\NopCommerce.Common\4.70\Libraries\docs\ARCHITECTURE.md = ..\NopCommerce.Common\4.70\Libraries\docs\ARCHITECTURE.md
..\NopCommerce.Common\4.70\Libraries\docs\CONVENTIONS.md = ..\NopCommerce.Common\4.70\Libraries\docs\CONVENTIONS.md
..\NopCommerce.Common\4.70\Libraries\docs\GLOSSARY.md = ..\NopCommerce.Common\4.70\Libraries\docs\GLOSSARY.md
..\NopCommerce.Common\4.70\Libraries\README.md = ..\NopCommerce.Common\4.70\Libraries\README.md
..\NopCommerce.Common\4.70\Libraries\CLAUDE.md = ..\NopCommerce.Common\4.70\Libraries\CLAUDE.md
..\NopCommerce.Common\4.70\Libraries\.github\copilot-instructions.md = ..\NopCommerce.Common\4.70\Libraries\.github\copilot-instructions.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mango.Sandbox.EndPoints", "Tests\Mango.Sandbox\Mango.Sandbox.EndPoints\Mango.Sandbox.EndPoints.csproj", "{D22DB269-2490-4A3D-B0B4-2CD2BB626F9C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mango.Sandbox.EndPoints.Tests", "Tests\Mango.Sandbox\Mango.Sandbox.EndPoints.Tests\Mango.Sandbox.EndPoints.Tests.csproj", "{B8491E5C-DBB5-1594-052E-744D78D7A4DE}"
@ -94,6 +104,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5881709D-780C-402A-9627-928B25AE712B}"
ProjectSection(SolutionItems) = preProject
build_fruitbank.bat = build_fruitbank.bat
.github\copilot-instructions.md = .github\copilot-instructions.md
EndProjectSection
EndProject
Global
@ -583,6 +594,7 @@ Global
{3E893AC2-29F1-48FC-B33F-F73C6EE2BE90} = {0742FDF3-0F2E-4C64-9521-E58A7FF2ED26}
{3976CB1D-8080-4B84-8C01-1F98BFCAF2B3} = {0742FDF3-0F2E-4C64-9521-E58A7FF2ED26}
{EE44B558-F1DA-433A-BD4C-D275986A4679} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{4403A2FE-7929-44A4-8701-60B3F759D400} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{D22DB269-2490-4A3D-B0B4-2CD2BB626F9C} = {E8FC6874-E230-468A-9685-4747354B92FF}
{B8491E5C-DBB5-1594-052E-744D78D7A4DE} = {E8FC6874-E230-468A-9685-4747354B92FF}
EndGlobalSection

View File

@ -1,22 +1,22 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a backorder mode
/// </summary>
public enum BackorderMode
{
/// <summary>
/// No backorders
/// </summary>
NoBackorders = 0,
///// <summary>
///// Represents a backorder mode
///// </summary>
//public enum BackorderMode
//{
// /// <summary>
// /// No backorders
// /// </summary>
// NoBackorders = 0,
/// <summary>
/// Allow qty below 0
/// </summary>
AllowQtyBelow0 = 1,
// /// <summary>
// /// Allow qty below 0
// /// </summary>
// AllowQtyBelow0 = 1,
/// <summary>
/// Allow qty below 0 and notify customer
/// </summary>
AllowQtyBelow0AndNotifyCustomer = 2,
}
// /// <summary>
// /// Allow qty below 0 and notify customer
// /// </summary>
// AllowQtyBelow0AndNotifyCustomer = 2,
//}

View File

@ -1,17 +1,17 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a download activation type
/// </summary>
public enum DownloadActivationType
{
/// <summary>
/// When order is paid
/// </summary>
WhenOrderIsPaid = 0,
///// <summary>
///// Represents a download activation type
///// </summary>
//public enum DownloadActivationType
//{
// /// <summary>
// /// When order is paid
// /// </summary>
// WhenOrderIsPaid = 0,
/// <summary>
/// Manually
/// </summary>
Manually = 10,
}
// /// <summary>
// /// Manually
// /// </summary>
// Manually = 10,
//}

View File

@ -1,17 +1,17 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a gift card type
/// </summary>
public enum GiftCardType
{
/// <summary>
/// Virtual
/// </summary>
Virtual = 0,
///// <summary>
///// Represents a gift card type
///// </summary>
//public enum GiftCardType
//{
// /// <summary>
// /// Virtual
// /// </summary>
// Virtual = 0,
/// <summary>
/// Physical
/// </summary>
Physical = 1,
}
// /// <summary>
// /// Physical
// /// </summary>
// Physical = 1,
//}

View File

@ -1,22 +1,22 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a low stock activity
/// </summary>
public enum LowStockActivity
{
/// <summary>
/// Nothing
/// </summary>
Nothing = 0,
///// <summary>
///// Represents a low stock activity
///// </summary>
//public enum LowStockActivity
//{
// /// <summary>
// /// Nothing
// /// </summary>
// Nothing = 0,
/// <summary>
/// Disable buy button
/// </summary>
DisableBuyButton = 1,
// /// <summary>
// /// Disable buy button
// /// </summary>
// DisableBuyButton = 1,
/// <summary>
/// Unpublish
/// </summary>
Unpublish = 2,
}
// /// <summary>
// /// Unpublish
// /// </summary>
// Unpublish = 2,
//}

View File

@ -1,22 +1,22 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a method of inventory management
/// </summary>
public enum ManageInventoryMethod
{
/// <summary>
/// Don't track inventory for product
/// </summary>
DontManageStock = 0,
///// <summary>
///// Represents a method of inventory management
///// </summary>
//public enum ManageInventoryMethod
//{
// /// <summary>
// /// Don't track inventory for product
// /// </summary>
// DontManageStock = 0,
/// <summary>
/// Track inventory for product
/// </summary>
ManageStock = 1,
// /// <summary>
// /// Track inventory for product
// /// </summary>
// ManageStock = 1,
/// <summary>
/// Track inventory for product by product attributes
/// </summary>
ManageStockByAttributes = 2,
}
// /// <summary>
// /// Track inventory for product by product attributes
// /// </summary>
// ManageStockByAttributes = 2,
//}

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,17 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a product type
/// </summary>
public enum ProductType
{
/// <summary>
/// Simple
/// </summary>
SimpleProduct = 5,
///// <summary>
///// Represents a product type
///// </summary>
//public enum ProductType
//{
// /// <summary>
// /// Simple
// /// </summary>
// SimpleProduct = 5,
/// <summary>
/// Grouped (product with variants)
/// </summary>
GroupedProduct = 10,
}
// /// <summary>
// /// Grouped (product with variants)
// /// </summary>
// GroupedProduct = 10,
//}

View File

@ -1,27 +1,27 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a recurring product cycle period
/// </summary>
public enum RecurringProductCyclePeriod
{
/// <summary>
/// Days
/// </summary>
Days = 0,
///// <summary>
///// Represents a recurring product cycle period
///// </summary>
//public enum RecurringProductCyclePeriod
//{
// /// <summary>
// /// Days
// /// </summary>
// Days = 0,
/// <summary>
/// Weeks
/// </summary>
Weeks = 10,
// /// <summary>
// /// Weeks
// /// </summary>
// Weeks = 10,
/// <summary>
/// Months
/// </summary>
Months = 20,
// /// <summary>
// /// Months
// /// </summary>
// Months = 20,
/// <summary>
/// Years
/// </summary>
Years = 30,
}
// /// <summary>
// /// Years
// /// </summary>
// Years = 30,
//}

View File

@ -1,27 +1,27 @@
namespace Nop.Core.Domain.Catalog;
//namespace Nop.Core.Domain.Catalog;
/// <summary>
/// Represents a rental product period (for prices)
/// </summary>
public enum RentalPricePeriod
{
/// <summary>
/// Days
/// </summary>
Days = 0,
///// <summary>
///// Represents a rental product period (for prices)
///// </summary>
//public enum RentalPricePeriod
//{
// /// <summary>
// /// Days
// /// </summary>
// Days = 0,
/// <summary>
/// Weeks
/// </summary>
Weeks = 10,
// /// <summary>
// /// Weeks
// /// </summary>
// Weeks = 10,
/// <summary>
/// Months
/// </summary>
Months = 20,
// /// <summary>
// /// Months
// /// </summary>
// Months = 20,
/// <summary>
/// Years
/// </summary>
Years = 30,
}
// /// <summary>
// /// Years
// /// </summary>
// Years = 30,
//}

View File

@ -26,7 +26,7 @@ public class DevAdminSignalRHubSandbox : AcWebSignalRHubWithSessionBase<SignalRT
: base(configuration, new Logger<DevAdminSignalRHubSandbox>(logWriters.ToArray()))
{
SerializerOptions = new AcBinarySerializerOptions();
DynamicMethodCallModels.Add(new AcDynamicMethodCallModel<SignalRAttribute>(testSignalREndpoint));
DynamicMethodRegistry.Register(testSignalREndpoint);
}
//protected override Task SendMessageToClient(IAcSignalRHubItemServer sendTo, int messageTag, ISignalRMessage message, int? requestId = null)

8
docs/CONVENTIONS.md Normal file
View File

@ -0,0 +1,8 @@
# Conventions
> For core framework conventions see `AyCode.Core/docs/CONVENTIONS.md`.
> For Mango.Nop library conventions see `Mango.Nop Libraries/docs/CONVENTIONS.md`.
## XML Documentation
`<summary>` — brief, developer-facing, readable in VS IntelliSense tooltip. NO implementation details, NO wire-format / byte-level / perf specifics — those live in `docs/TOPIC/*.md`. Add `<example>` only when usage is non-obvious; otherwise omit.