refactor(core): align with cordis spatiotemporal composability architecture

- Purify core micro-kernel by removing context hardcoded helpers and reverse dependencies
- Eliminate init() side effects in infra plugins with reversible lifecycle disposal
- Completely isolate plugins by removing cross-plugin imports and using core/contracts
- Introduce TaskService and RiskControlService contracts for unified cross-plugin APIs
- Regenerate Swagger documentation and update developer guide matrix
- Achieve 0 violations in check_cordis_architecture.sh and 100% test pass
This commit is contained in:
ryan
2026-08-28 15:05:31 +08:00
parent fc7fae7b0e
commit 299ac30ee4
150 changed files with 4328 additions and 2923 deletions
+14 -2
View File
@@ -11,11 +11,12 @@ import (
"sync"
"time"
"github.com/redis/go-redis/v9"
"Wavelet/core"
"Wavelet/core/contracts"
"Wavelet/pkg/cache/ram"
"Wavelet/pkg/util"
"github.com/redis/go-redis/v9"
)
const (
@@ -80,7 +81,13 @@ func (p *Plugin) Name() string {
// Apply mounts the multi-layer cache service into the Context.
func (p *Plugin) Apply(ctx *core.Context) error {
redisClient := p.redisClient
if redisClient == nil {
if redisClient == nil && Redis == nil {
var err error
redisClient, err = InitRedis()
if err != nil {
return err
}
} else if redisClient == nil {
redisClient = Redis
}
@@ -103,6 +110,11 @@ func (p *Plugin) Apply(ctx *core.Context) error {
svc.startPubSubListener()
ctx.OnDispose(func() error {
svc.stopPubSubListener()
if p.redisClient == nil {
if closeErr := redisClient.Close(); closeErr != nil && !errors.Is(closeErr, redis.ErrClosed) {
return closeErr
}
}
return nil
})
}