What's Changed
- Fix: Path Construction and ZMQ Fall by @iprasannamb in #174
- fix code bug: broken file path by @GREENRAT-K405 in #177
- Add unit tests for core Python components by @Sahil-u07 in #178
- fix: infinite loop problem during the running and debugging of concore study by @GREENRAT-K405 in #180
- Add GitHub Actions CI for automated testing by @Sahil-u07 in #179
- Fix bare exceptions and replace print with logging by @Sahil-u07 in #182
- Add startserver and startserver.bat scripts to start the flask server. by @GREENRAT-K405 in #186
- fix: NameError at runtime by @iprasannamb in #188
- Implement native literalEval() in concorejava and update the Dockerfile for Dockerfile for java by @GREENRAT-K405 in #198
- Add CLI for concore (#183) by @Sahil-u07 in #189
- Fix fragile parameter parsing in concore.py and concoredocker.py by @GREENRAT-K405 in #201
- Move bot token to env variable by @avinxshKD in #204
- Standardize loggings in the tools by @GREENRAT-K405 in #205
- Enhance simulation data integrity and add NumPy type safety tests by @GREENRAT-K405 in #207
- Fix harmful shell injection vulnerability in mkconcore.py by @GREENRAT-K405 in #212
- Fix: Enable concore run execution from outside repository root by @Titas-Ghosh in #215
- add tests for gaphml with strict xml checks by @GREENRAT-K405 in #218
- Add test coverage for concoredocker.py by @avinxshKD in #220
- Register terminate_zmq with atexit to cleanup sockets on exit by @avinxshKD in #221
- Add pyzmq dependency by @avinxshKD in #222
- Update concoredocker with concore. by @GREENRAT-K405 in #225
- Fix broken functions in concoredocker.hpp to match Python behavior by @avinxshKD in #234
- Add workflow inspect command with rich output and JSON export by @Sahil-u07 in #202
- Fix Java concoredocker to match Python behavior by @avinxshKD in #219
- fix: add atexit and signal handlers for ZMQ cleanup by @Sahil-u07 in #206
- Fix sample script to use correct concore function names by @avinxshKD in #226
- ci: add basic CI pipeline for tests and linting by @GaneshPatil7517 in #233
- Add Gemini AI pull request review. by @GREENRAT-K405 in #249
- Fix: add missing return after ZMQ send in write() - Fixes #238 by @avinxshKD in #242
- Fix MATLAB retry loop hang and crashes in concore_read.m by @avinxshKD in #243
- Fix/mkconcore file handle leaks by @avinxshKD in #250
- fix(ci): add missing dependencies to requirements-ci.txt by @GaneshPatil7517 in #253
- fix(java): rewrite literalEval() with recursive descent parser by @GaneshPatil7517 in #252
- Fix ZMQ write JSON serialization for NumPy types, add regression test by @Titas-Ghosh in #256
- Fix: undefined behavior in C++ implementation (Issue #236) by @GaneshPatil7517 in #257
- Add first-interaction greetings workflow by @GREENRAT-K405 in #255
- Security: Replace unsafe eval() with safe numeric parsing in core MATLAB library files (Issue #245) by @GaneshPatil7517 in #259
- Fix: Prepend simtime to ZMQ write() payload for consistency (Issue #244) by @GaneshPatil7517 in #258
- Fix default execution type in CLI and add test for run command by @Titas-Ghosh in #271
- Fix: Initialize ysp before use in controller2knob (Issue #266) by @GaneshPatil7517 in #275
- fix shell/code injection in pr-review.yaml by @GREENRAT-K405 in #296
- fix bare except blocks by @avinxshKD in #302
- Fix: Reuse PairedTransmitter outside loop to prevent repeated ZMQ socket creation (#268) by @GaneshPatil7517 in #294
- check taskkill return code on Windows to detect failures by @avinxshKD in #281
- use module logger in copy_with_port_portname to avoid conflict by @avinxshKD in #282
- Remove outdated concore copies from testsou to prevent divergence (#289) by @GaneshPatil7517 in #305
- chore: upgrade FRI Dockerfile from Python 3.6 to 3.10 (fixes #270) by @GaneshPatil7517 in #312
- security: fix path traversal vulnerability in FRI download endpoint (fixes #262) by @GaneshPatil7517 in #315
- Add node label validation to prevent command injection (#251) by @avinxshKD in #276
- Fix concore validate exit code and add missing source file checks by @Titas-Ghosh in #304
- fix: replace concore2 imports with concore (resolves #287) by @GaneshPatil7517 in #306
- security: harden FRI server and add MATLAB runtime integrity verification (fixes #272) by @GaneshPatil7517 in #307
- use context managers for file I/O by @avinxshKD in #301
- Security: Remove shell=True to prevent command injection (Fix #261) by @GaneshPatil7517 in #293
- Update python Dockerfile to be more consistent by @GREENRAT-K405 in #318
- Use HTTPS for API calls by @avinxshKD in #319
- allow tool path overrides via concore.tools config and env vars by @avinxshKD in #277
- Fix hardcoded java dockerfile by using wildcard in copy source path by @GREENRAT-K405 in #321
- implement multi-stage build in java Dockerfile to remove host dependencies by @GREENRAT-K405 in #323
- Allow safe relative subdirectory paths in GraphML node source labels by @Titas-Ghosh in #327
- Optimize matlab dockerfile to remove unnecessary image bloating by @GREENRAT-K405 in #326
- Install and load octave control and signal packages in dockerfile by @GREENRAT-K405 in #329
- optimize Dockerfile.v by clearing apt cache by @GREENRAT-K405 in #331
- Feature/enhanced workflow validation by @Sahil-u07 in #229
- Add .dockerignore by @GREENRAT-K405 in #333
- Optimize Dockerfile for python environment by @GREENRAT-K405 in #348
- security: prevent API key leakage in wrapper script logs (fixes #263) by @GaneshPatil7517 in #313
- advance simtime after write in C++ and Verilog by @avinxshKD in #341
- Add test coverage for inspect command by @Sahil-u07 in #335
- fix: move argument validation before sys.argv access in mkconcore.py (fixes #267) by @GaneshPatil7517 in #336
- Fix filename parsing for multiple dots by @avinxshKD in #340
- fix: add missing return in concoredocker.py write() after ZMQ send by @avinxshKD in #350
- fix simtime update in write_FM and write_SM functions by @Sahil-u07 in #351
- fix simtime not advancing in MATLAB write function by @Sahil-u07 in #353
- fix java params to use semicolon separator by @avinxshKD in #356
- add missing deps to pyproject.toml by @avinxshKD in #357
- fix: guard against empty string crash in parser() and bounds check in… by @avinxshKD in #372
- Fix/zmq simtime framing by @avinxshKD in #383
- refactor: eliminate duplicate import_concoredocker.m logic and fix Windows-only batch generation (fixes #285) by @GaneshPatil7517 in #397
- fix: align Windows destroy.bat behavior with bash destroy script (fixes #342) by @GaneshPatil7517 in #399
- maintenance: update oldeditgraph DHGWorkflow link to archived repository URL (fixes #346) by @GaneshPatil7517 in #402
- security: sanitize fetch parameter in /download endpoint using secure_filename (fixes #358) by @GaneshPatil7517 in #403
- fix: use double for simtime/maxtime in concoredocker.hpp by @avinxshKD in #404
- fix: correct subprocess handling and HTTP response logic in /library endpoint (fixes #359) by @GaneshPatil7517 in #405
- security: prevent command injection in /contribute endpoint by removing shell=True (fixes #360) by @GaneshPatil7517 in #407
- test: add ZMQ simtime framing tests for concoredocker.py by @avinxshKD in #408
- security: protect /openJupyter endpoint with API key and process control (fixes #361) by @GaneshPatil7517 in #409
- use named logger, drop force=True by @avinxshKD in #411
- fix maxtime as double in concoredocker.java, fixes by @avinxshKD in #412
- Fix mkconcore path handling for nested output directories by @Titas-Ghosh in #413
- security: remove hardcoded Flask secret key and load from environment (fixes #362) by @GaneshPatil7517 in #414
- refactor: simplify build() endpoint by removing Windows/Docker duplication (fixes #363) by @GaneshPatil7517 in #415
- refactor: simplify parameter handling in pidsig.py using concore.tryparam() (fixes #365) by @GaneshPatil7517 in #416
- fix: use computed PID frequency in pid2.py instead of hardcoded value (fixes #366) by @GaneshPatil7517 in #417
- Fix ZMQ specialization collision for shared node source scripts in mkconcore by @Titas-Ghosh in #419
- security: harden contribute.py with token validation, error sanitization, and retry/backoff (fixes #288) by @GaneshPatil7517 in #398
- fix: prevent undefined port variable errors in measurement scripts (fixes #345) by @GaneshPatil7517 in #401
- fix: path slash and retry loop in concoredocker.hpp) by @avinxshKD in #423
- fix: correct Flask-CORS package name in requirements.txt (fixes #368) by @GaneshPatil7517 in #425
- fix: error on duplicate node labels in mkconcore and validate by @avinxshKD in #426
- fix(simtime): remove global simtime mutation from write() across all languages (#385) by @GaneshPatil7517 in #431
- Cleanup: Add comprehensive Python bytecode and cache ignore rules (#373) by @GaneshPatil7517 in #432
- Fix: Replace quit() with sys.exit(1) across scripts (#375) by @GaneshPatil7517 in #433
- fix: remove mixed tabs/spaces indentation in bangbang.py (#376) by @GaneshPatil7517 in #434
- refactor: consolidate duplicate PID controllers (pidmayuresh3 → wrapper) fixes #378 by @GaneshPatil7517 in #435
- fix: add include guard, default_maxtime, tryparam, and initval bounds… by @avinxshKD in #438
- update mkconcore logic to select scripts to add to src by @GREENRAT-K405 in #439
- Fix Docker build script path handling for subdirectory node sources in mkconcore by @Titas-Ghosh in #428
- fix: use concore.maxtime in C++ test loops by @avinxshKD in #441
- fix: dedupe concore/concoredocker shared logic and fix docker path/cleanup behavior by @avinxshKD in #442
- test: Add language-neutral protocol fixtures and Python runner (Phase 1) by @Titas-Ghosh in #443
- fix: java init stuck in main and param parser broken for values with = by @avinxshKD in #444
- concore_cli: add watch command for live simulation monitoring by @avinxshKD in #450
- Add option to see realtime simulation by @GREENRAT-K405 in #451
- update tools documentation by @GREENRAT-K405 in #453
- fix: packaging broken install and version duplication by @avinxshKD in #455
- dedupe concore/concoredocker C++ headers and fix Java docker path + simtime bugs by @avinxshKD in #458
- fix: remove hardcoded sudo docker and respect DOCKEREXE override in mkconcore.py (fixes #343) by @GaneshPatil7517 in #421
- fix: clamp lag parameter to buffer size with warning (fixes #379) by @GaneshPatil7517 in #459
- fix: concoredocker API methods were private, class was uncallable from outside by @avinxshKD in #468
- fix(ci): add ruff.toml, format check, coverage, merge tests.yml by @avinxshKD in #461
- Fix: Add explicit error signalling to read() instead of silent default fallback (#390) by @GaneshPatil7517 in #462
- test: Add cross runtime protocol conformance matrix (Phase 2) by @Titas-Ghosh in #467
- Rule of Five: Delete copy ops and add move semantics for Concore by @avinxshKD in #470
- prevent redundant zeroMQ thread spawning by sharing a single context by @GREENRAT-K405 in #473
- feat: add ZMQ transport to concore.hpp/concore_base.hpp by @avinxshKD in #475
- docs: add ZMQ transport section to README by @avinxshKD in #477
- fix: rule of five for concoredocker.hpp by @avinxshKD in #479
- Fix C++ literal parser to match Python concore wire format by @GaneshPatil7517 in #460
- feat: add ZMQ support to concoredocker.hpp by @avinxshKD in #481
- feat: add ZMQ transport to concoredocker.java by @avinxshKD in #483
- test: add Concore class API tests for concore.hpp by @avinxshKD in #485
- feat: add shared memory transport to concoredocker.hpp (#486) by @avinxshKD in #487
- fix: raise TimeoutError on ZMQ retry exhaustion (#393) by @GaneshPatil7517 in #488
- test: add TestConcoredockerApi covering read/write/unchanged/initVal by @avinxshKD in #490
- fix: replace concorekill.bat single-PID overwrite with safe PID registry (#391) by @GaneshPatil7517 in #489
- fix(zmq): use JSON on wire, accept JSON keywords in parser by @avinxshKD in #493
- fix #491: read() returns ReadResult with ReadStatus instead of silent by @avinxshKD in #497
- feat: add
concore doctorcommand for system readiness checks by @GaneshPatil7517 in #499 - fix #496: add concore.java for local Java nodes by @avinxshKD in #501
- feat(cli): auto-generate STUDY.json metadata for init and run outputs by @GaneshPatil7517 in #504
- cpp: add read status result and params parse fix by @avinxshKD in #505
- mkconcore: add local Java build/run/debug (#507) by @avinxshKD in #508
- Add interactive mode to concore init CLI by @GREENRAT-K405 in #510
- feat(cli): add concore setup autodetect command by @avinxshKD in #512
- Add concore editor to CLI by @GREENRAT-K405 in #515
- concore run: add optional --compose to generate docker-compose.yml for docker studies by @avinxshKD in #517
- Rename CLI command run → build to reflect actual behaviour by @GREENRAT-K405 in #519
- ci: add java phase-2 conformance coverage by @avinxshKD in #521
- Fix: Replace hardcoded 256-byte shared memory buffer with 4096-byte by @GaneshPatil7517 in #516
- add java end-to-end study example by @avinxshKD in #523
- fix: resolve broken imports in cardiac_pm.py (#290) by @GaneshPatil7517 in #526
- extend conformance matrix with read_file cases by @avinxshKD in #528
- Attempt to fix the workload integration failure. by @pradeeban in #534
- Docs: Add CONFIG.md documenting config files, env vars, and precedence by @GaneshPatil7517 in #530
- cli: add JSON output for concore validate by @Titas-Ghosh in #533
- Merge dev to main by @pradeeban in #529
New Contributors
- @iprasannamb made their first contribution in #174
- @GREENRAT-K405 made their first contribution in #177
- @Sahil-u07 made their first contribution in #178
- @avinxshKD made their first contribution in #204
- @Titas-Ghosh made their first contribution in #215
- @GaneshPatil7517 made their first contribution in #233
Full Changelog: 2.3.0...2.4.0