Skip to content

Commit 1f7063e

Browse files
committed
fix(config-cache): corrige has() para mapas dessincronizados e restaura timers
- has() agora verifica this.timestamps.has(key) além de this.cache.has(key) - Timestamp ausente trata como inválido (cleanup + return false) - Adiciona afterAll com jest.useRealTimers() para evitar vazamento entre suites - Adiciona teste para cenário de mapas dessincronizados - Corrige caminho de import .aios-core → .aiox-core no teste
1 parent e5d620e commit 1f7063e

3 files changed

Lines changed: 75 additions & 55 deletions

File tree

.aiox-core/core/config/config-cache.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ class ConfigCache {
7676
// increment hits/misses and inflate cache statistics (fixes #497)
7777
if (!this.cache.has(key)) return false;
7878

79+
// If timestamp is missing, maps are out-of-sync — treat as invalid
80+
if (!this.timestamps.has(key)) {
81+
this.cache.delete(key);
82+
return false;
83+
}
84+
7985
const timestamp = this.timestamps.get(key);
8086
if (Date.now() - timestamp > this.ttl) {
8187
this.cache.delete(key);

.aiox-core/install-manifest.yaml

Lines changed: 58 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
# - File types for categorization
99
#
1010
version: 5.0.3
11-
generated_at: "2026-03-06T11:56:08.042Z"
11+
generated_at: "2026-03-08T05:50:11.695Z"
1212
generator: scripts/generate-install-manifest.js
13-
file_count: 1089
13+
file_count: 1090
1414
files:
1515
- path: cli/commands/config/index.js
1616
hash: sha256:25c4b9bf4e0241abf7754b55153f49f1a214f1fb5fe904a576675634cb7b3da9
@@ -237,9 +237,9 @@ files:
237237
type: core
238238
size: 10891
239239
- path: core/config/config-cache.js
240-
hash: sha256:527a788cbe650aa6b13d1101ebc16419489bfef20b2ee93042f6eb6a51e898e9
240+
hash: sha256:13bf18a59ac3f1db96e6bf527a2d0155c5c5a09770b08b8f2d6546fc9daf95bc
241241
type: core
242-
size: 4704
242+
size: 5220
243243
- path: core/config/config-loader.js
244244
hash: sha256:e19fee885b060c85ee75df71a016259b8e4c21e6c7045a58514afded3a2386a8
245245
type: core
@@ -932,6 +932,10 @@ files:
932932
hash: sha256:92e9d5bea78c3db4940c39f79e537821b36451cd524d69e6b738272aa63c08b6
933933
type: core
934934
size: 12849
935+
- path: core/orchestration/swarm-intelligence.js
936+
hash: sha256:e5a3e085d439f0ef1d8fcdba0f1c4b212075f9dc0a45903dd409cd6163c2a2bb
937+
type: core
938+
size: 35845
935939
- path: core/orchestration/task-complexity-classifier.js
936940
hash: sha256:33b3b7c349352d607c156e0018c508f0869a1c7d233d107bed194a51bc608c93
937941
type: core
@@ -2583,47 +2587,47 @@ files:
25832587
- path: development/templates/service-template/__tests__/index.test.ts.hbs
25842588
hash: sha256:4617c189e75ab362d4ef2cabcc3ccce3480f914fd915af550469c17d1b68a4fe
25852589
type: template
2586-
size: 9810
2590+
size: 9573
25872591
- path: development/templates/service-template/client.ts.hbs
25882592
hash: sha256:f342c60695fe611192002bdb8c04b3a0dbce6345b7fa39834ea1898f71689198
25892593
type: template
2590-
size: 12213
2594+
size: 11810
25912595
- path: development/templates/service-template/errors.ts.hbs
25922596
hash: sha256:e0be40d8be19b71b26e35778eadffb20198e7ca88e9d140db9da1bfe12de01ec
25932597
type: template
2594-
size: 5395
2598+
size: 5213
25952599
- path: development/templates/service-template/index.ts.hbs
25962600
hash: sha256:d44012d54b76ab98356c7163d257ca939f7fed122f10fecf896fe1e7e206d10a
25972601
type: template
2598-
size: 3206
2602+
size: 3086
25992603
- path: development/templates/service-template/jest.config.js
26002604
hash: sha256:1681bfd7fbc0d330d3487d3427515847c4d57ef300833f573af59e0ad69ed159
26012605
type: template
26022606
size: 1750
26032607
- path: development/templates/service-template/package.json.hbs
26042608
hash: sha256:d89d35f56992ee95c2ceddf17fa1d455c18007a4d24af914ba83cf4abc38bca9
26052609
type: template
2606-
size: 2314
2610+
size: 2227
26072611
- path: development/templates/service-template/README.md.hbs
26082612
hash: sha256:2c3dd4c2bf6df56b9b6db439977be7e1cc35820438c0e023140eccf6ccd227a0
26092613
type: template
2610-
size: 3584
2614+
size: 3426
26112615
- path: development/templates/service-template/tsconfig.json
26122616
hash: sha256:8b465fcbdd45c4d6821ba99aea62f2bd7998b1bca8de80486a1525e77d43c9a1
26132617
type: template
26142618
size: 1135
26152619
- path: development/templates/service-template/types.ts.hbs
26162620
hash: sha256:3e52e0195003be8cd1225a3f27f4d040686c8b8c7762f71b41055f04cd1b841b
26172621
type: template
2618-
size: 2661
2622+
size: 2516
26192623
- path: development/templates/squad-template/agents/example-agent.yaml
26202624
hash: sha256:824a1b349965e5d4ae85458c231b78260dc65497da75dada25b271f2cabbbe67
26212625
type: agent
26222626
size: 736
26232627
- path: development/templates/squad-template/LICENSE
26242628
hash: sha256:ff7017aa403270cf2c440f5ccb4240d0b08e54d8bf8a0424d34166e8f3e10138
26252629
type: template
2626-
size: 1092
2630+
size: 1071
26272631
- path: development/templates/squad-template/package.json
26282632
hash: sha256:8f68627a0d74e49f94ae382d0c2b56ecb5889d00f3095966c742fb5afaf363db
26292633
type: template
@@ -3367,11 +3371,11 @@ files:
33673371
- path: infrastructure/templates/aiox-sync.yaml.template
33683372
hash: sha256:0040ad8a9e25716a28631b102c9448b72fd72e84f992c3926eb97e9e514744bb
33693373
type: template
3370-
size: 8567
3374+
size: 8385
33713375
- path: infrastructure/templates/coderabbit.yaml.template
33723376
hash: sha256:91a4a76bbc40767a4072fb6a87c480902bb800cfb0a11e9fc1b3183d8f7f3a80
33733377
type: template
3374-
size: 8321
3378+
size: 8042
33753379
- path: infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml
33763380
hash: sha256:9bdb0c0e09c765c991f9f142921f7f8e2c0d0ada717f41254161465dc0622d02
33773381
type: template
@@ -3383,35 +3387,35 @@ files:
33833387
- path: infrastructure/templates/github-workflows/ci.yml.template
33843388
hash: sha256:acbfa2a8a84141fd6a6b205eac74719772f01c221c0afe22ce951356f06a605d
33853389
type: template
3386-
size: 5089
3390+
size: 4920
33873391
- path: infrastructure/templates/github-workflows/pr-automation.yml.template
33883392
hash: sha256:c236077b4567965a917e48df9a91cc42153ff97b00a9021c41a7e28179be9d0f
33893393
type: template
3390-
size: 10939
3394+
size: 10609
33913395
- path: infrastructure/templates/github-workflows/README.md
33923396
hash: sha256:6b7b5cb32c28b3e562c81a96e2573ea61849b138c93ccac6e93c3adac26cadb5
33933397
type: template
33943398
size: 2654
33953399
- path: infrastructure/templates/github-workflows/release.yml.template
33963400
hash: sha256:b771145e61a254a88dc6cca07869e4ece8229ce18be87132f59489cdf9a66ec6
33973401
type: template
3398-
size: 6791
3402+
size: 6595
33993403
- path: infrastructure/templates/gitignore/gitignore-aiox-base.tmpl
34003404
hash: sha256:9088975ee2bf4d88e23db6ac3ea5d27cccdc72b03db44450300e2f872b02e935
34013405
type: template
3402-
size: 851
3406+
size: 788
34033407
- path: infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl
34043408
hash: sha256:ce4291a3cf5677050c9dafa320809e6b0ca5db7e7f7da0382d2396e32016a989
34053409
type: template
3406-
size: 506
3410+
size: 488
34073411
- path: infrastructure/templates/gitignore/gitignore-node.tmpl
34083412
hash: sha256:5179f78de7483274f5d7182569229088c71934db1fd37a63a40b3c6b815c9c8e
34093413
type: template
3410-
size: 1036
3414+
size: 951
34113415
- path: infrastructure/templates/gitignore/gitignore-python.tmpl
34123416
hash: sha256:d7aac0b1e6e340b774a372a9102b4379722588449ca82ac468cf77804bbc1e55
34133417
type: template
3414-
size: 1725
3418+
size: 1580
34153419
- path: infrastructure/templates/project-docs/coding-standards-tmpl.md
34163420
hash: sha256:377acf85463df8ac9923fc59d7cfeba68a82f8353b99948ea1d28688e88bc4a9
34173421
type: template
@@ -3507,43 +3511,43 @@ files:
35073511
- path: monitor/hooks/lib/__init__.py
35083512
hash: sha256:bfab6ee249c52f412c02502479da649b69d044938acaa6ab0aa39dafe6dee9bf
35093513
type: monitor
3510-
size: 30
3514+
size: 29
35113515
- path: monitor/hooks/lib/enrich.py
35123516
hash: sha256:20dfa73b4b20d7a767e52c3ec90919709c4447c6e230902ba797833fc6ddc22c
35133517
type: monitor
3514-
size: 1702
3518+
size: 1644
35153519
- path: monitor/hooks/lib/send_event.py
35163520
hash: sha256:59d61311f718fb373a5cf85fd7a01c23a4fd727e8e022ad6930bba533ef4615d
35173521
type: monitor
3518-
size: 1237
3522+
size: 1190
35193523
- path: monitor/hooks/notification.py
35203524
hash: sha256:8a1a6ce0ff2b542014de177006093b9caec9b594e938a343dc6bd62df2504f22
35213525
type: monitor
3522-
size: 528
3526+
size: 499
35233527
- path: monitor/hooks/post_tool_use.py
35243528
hash: sha256:47dbe37073d432c55657647fc5b907ddb56efa859d5c3205e8362aa916d55434
35253529
type: monitor
3526-
size: 1185
3530+
size: 1140
35273531
- path: monitor/hooks/pre_compact.py
35283532
hash: sha256:f287cf45e83deed6f1bc0e30bd9348dfa1bf08ad770c5e58bb34e3feb210b30b
35293533
type: monitor
3530-
size: 529
3534+
size: 500
35313535
- path: monitor/hooks/pre_tool_use.py
35323536
hash: sha256:a4d1d3ffdae9349e26a383c67c9137effff7d164ac45b2c87eea9fa1ab0d6d98
35333537
type: monitor
3534-
size: 1021
3538+
size: 981
35353539
- path: monitor/hooks/stop.py
35363540
hash: sha256:edb382f0cf46281a11a8588bc20eafa7aa2b5cc3f4ad775d71b3d20a7cfab385
35373541
type: monitor
3538-
size: 519
3542+
size: 490
35393543
- path: monitor/hooks/subagent_stop.py
35403544
hash: sha256:fa5357309247c71551dba0a19f28dd09bebde749db033d6657203b50929c0a42
35413545
type: monitor
3542-
size: 541
3546+
size: 512
35433547
- path: monitor/hooks/user_prompt_submit.py
35443548
hash: sha256:af57dca79ef55cdf274432f4abb4c20a9778b95e107ca148f47ace14782c5828
35453549
type: monitor
3546-
size: 856
3550+
size: 818
35473551
- path: package.json
35483552
hash: sha256:9fdf0dcee2dcec6c0643634ee384ba181ad077dcff1267d8807434d4cb4809c7
35493553
type: other
@@ -3691,7 +3695,7 @@ files:
36913695
- path: product/templates/adr.hbs
36923696
hash: sha256:d68653cae9e64414ad4f58ea941b6c6e337c5324c2c7247043eca1461a652d10
36933697
type: template
3694-
size: 2337
3698+
size: 2212
36953699
- path: product/templates/agent-template.yaml
36963700
hash: sha256:98676fcc493c0d5f09264dcc52fcc2cf1129f9a195824ecb4c2ec035c2515121
36973701
type: template
@@ -3743,7 +3747,7 @@ files:
37433747
- path: product/templates/dbdr.hbs
37443748
hash: sha256:5a2781ffaa3da9fc663667b5a63a70b7edfc478ed14cad02fc6ed237ff216315
37453749
type: template
3746-
size: 4380
3750+
size: 4139
37473751
- path: product/templates/design-story-tmpl.yaml
37483752
hash: sha256:2bfefc11ae2bcfc679dbd924c58f8b764fa23538c14cb25344d6edef41968f29
37493753
type: template
@@ -3807,7 +3811,7 @@ files:
38073811
- path: product/templates/epic.hbs
38083812
hash: sha256:dcbcc26f6dd8f3782b3ef17aee049b689f1d6d92931615c3df9513eca0de2ef7
38093813
type: template
3810-
size: 4080
3814+
size: 3868
38113815
- path: product/templates/eslintrc-security.json
38123816
hash: sha256:657d40117261d6a52083984d29f9f88e79040926a64aa4c2058a602bfe91e0d5
38133817
type: template
@@ -3915,19 +3919,19 @@ files:
39153919
- path: product/templates/pmdr.hbs
39163920
hash: sha256:d529cebbb562faa82c70477ece70de7cda871eaa6896f2962b48b2a8b67b1cbe
39173921
type: template
3918-
size: 3425
3922+
size: 3239
39193923
- path: product/templates/prd-tmpl.yaml
39203924
hash: sha256:25c239f40e05f24aee1986601a98865188dbe3ea00a705028efc3adad6d420f3
39213925
type: template
39223926
size: 11952
39233927
- path: product/templates/prd-v2.0.hbs
39243928
hash: sha256:21a20ef5333a85a11f5326d35714e7939b51bab22bd6e28d49bacab755763bea
39253929
type: template
3926-
size: 4728
3930+
size: 4512
39273931
- path: product/templates/prd.hbs
39283932
hash: sha256:4a1a030a5388c6a8bf2ce6ea85e54cae6cf1fe64f1bb2af7f17d349d3c24bf1d
39293933
type: template
3930-
size: 3626
3934+
size: 3425
39313935
- path: product/templates/project-brief-tmpl.yaml
39323936
hash: sha256:b8d388268c24dc5018f48a87036d591b11cb122fafe9b59c17809b06ea5d9d58
39333937
type: template
@@ -3975,7 +3979,7 @@ files:
39753979
- path: product/templates/story.hbs
39763980
hash: sha256:3f0ac8b39907634a2b53f43079afc33663eee76f46e680d318ff253e0befc2c4
39773981
type: template
3978-
size: 5846
3982+
size: 5583
39793983
- path: product/templates/task-execution-report.md
39803984
hash: sha256:e0f08a3e199234f3d2207ba8f435786b7d8e1b36174f46cb82fc3666b9a9309e
39813985
type: template
@@ -3987,67 +3991,67 @@ files:
39873991
- path: product/templates/task.hbs
39883992
hash: sha256:621e987e142c455cd290dc85d990ab860faa0221f66cf1f57ac296b076889ea5
39893993
type: template
3990-
size: 2875
3994+
size: 2705
39913995
- path: product/templates/tmpl-comment-on-examples.sql
39923996
hash: sha256:254002c3fbc63cfcc5848b1d4b15822ce240bf5f57e6a1c8bb984e797edc2691
39933997
type: template
3994-
size: 6373
3998+
size: 6215
39953999
- path: product/templates/tmpl-migration-script.sql
39964000
hash: sha256:44ef63ea475526d21a11e3c667c9fdb78a9fddace80fdbaa2312b7f2724fbbb5
39974001
type: template
3998-
size: 3038
4002+
size: 2947
39994003
- path: product/templates/tmpl-rls-granular-policies.sql
40004004
hash: sha256:36c2fd8c6d9eebb5d164acb0fb0c87bc384d389264b4429ce21e77e06318f5f3
40014005
type: template
4002-
size: 3426
4006+
size: 3322
40034007
- path: product/templates/tmpl-rls-kiss-policy.sql
40044008
hash: sha256:5210d37fce62e5a9a00e8d5366f5f75653cd518be73fbf96333ed8a6712453c7
40054009
type: template
4006-
size: 309
4010+
size: 299
40074011
- path: product/templates/tmpl-rls-roles.sql
40084012
hash: sha256:2d032a608a8e87440c3a430c7d69ddf9393d8813d8d4129270f640dd847425c3
40094013
type: template
4010-
size: 4727
4014+
size: 4592
40114015
- path: product/templates/tmpl-rls-simple.sql
40124016
hash: sha256:f67af0fa1cdd2f2af9eab31575ac3656d82457421208fd9ccb8b57ca9785275e
40134017
type: template
4014-
size: 2992
4018+
size: 2915
40154019
- path: product/templates/tmpl-rls-tenant.sql
40164020
hash: sha256:36629ed87a2c72311809cc3fb96298b6f38716bba35bc56c550ac39d3321757a
40174021
type: template
4018-
size: 5130
4022+
size: 4978
40194023
- path: product/templates/tmpl-rollback-script.sql
40204024
hash: sha256:8b84046a98f1163faf7350322f43831447617c5a63a94c88c1a71b49804e022b
40214025
type: template
4022-
size: 2734
4026+
size: 2657
40234027
- path: product/templates/tmpl-seed-data.sql
40244028
hash: sha256:a65e73298f46cd6a8e700f29b9d8d26e769e12a57751a943a63fd0fe15768615
40254029
type: template
4026-
size: 5716
4030+
size: 5576
40274031
- path: product/templates/tmpl-smoke-test.sql
40284032
hash: sha256:aee7e48bb6d9c093769dee215cacc9769939501914e20e5ea8435b25fad10f3c
40294033
type: template
4030-
size: 739
4034+
size: 723
40314035
- path: product/templates/tmpl-staging-copy-merge.sql
40324036
hash: sha256:55988caeb47cc04261665ba7a37f4caa2aa5fac2e776fdbc5964e0587af24450
40334037
type: template
4034-
size: 4220
4038+
size: 4081
40354039
- path: product/templates/tmpl-stored-proc.sql
40364040
hash: sha256:2b205ff99dc0adfade6047a4d79f5b50109e50ceb45386e5c886437692c7a2a3
40374041
type: template
4038-
size: 3979
4042+
size: 3839
40394043
- path: product/templates/tmpl-trigger.sql
40404044
hash: sha256:93abdc92e1b475d1370094e69a9d1b18afd804da6acb768b878355c798bd8e0e
40414045
type: template
4042-
size: 5424
4046+
size: 5272
40434047
- path: product/templates/tmpl-view-materialized.sql
40444048
hash: sha256:47935510f03d4ad9b2200748e65441ce6c2d6a7c74750395eca6831d77c48e91
40454049
type: template
4046-
size: 4496
4050+
size: 4363
40474051
- path: product/templates/tmpl-view.sql
40484052
hash: sha256:22557b076003a856b32397f05fa44245a126521de907058a95e14dd02da67aff
40494053
type: template
4050-
size: 5093
4054+
size: 4916
40514055
- path: product/templates/token-exports-css-tmpl.css
40524056
hash: sha256:d937b8d61cdc9e5b10fdff871c6cb41c9f756004d060d671e0ae26624a047f62
40534057
type: template

tests/core/config/config-cache.test.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
jest.useFakeTimers();
1313

14-
const { ConfigCache, globalConfigCache } = require('../../../.aios-core/core/config/config-cache');
14+
const { ConfigCache, globalConfigCache } = require('../../../.aiox-core/core/config/config-cache');
15+
16+
afterAll(() => jest.useRealTimers());
1517

1618
describe('config-cache', () => {
1719
let cache;
@@ -117,6 +119,14 @@ describe('config-cache', () => {
117119
expect(cache.misses).toBe(0);
118120
});
119121

122+
test('returns false and cleans up when timestamp is missing (out-of-sync maps)', () => {
123+
cache.set('key1', 'value1');
124+
// Simulate out-of-sync: delete timestamp but keep cache entry
125+
cache.timestamps.delete('key1');
126+
expect(cache.has('key1')).toBe(false);
127+
expect(cache.size).toBe(0);
128+
});
129+
120130
test('has() + get() counts exactly one hit, not two (fix #497)', () => {
121131
cache.set('key1', 'value1');
122132
cache.has('key1'); // no stat change

0 commit comments

Comments
 (0)