Skip to content

Releases: aeriesec/orgforge

v1.2.5--arvix-preprint

Choose a tag to compare

@jeffreyflynt jeffreyflynt released this 25 Mar 19:36
2f4e59f

Added

  • Global Voice Card System (utils/persona_utils.py, src/normal_day.py): Migrated individual persona logic to a centralized get_voice_card utility. This provides context-aware character sheets (e.g., async, design, collision) that inject tenure, expertise, mood, and "anti-patterns" into LLM backstories to prevent generic corporate drift.
  • Robust JSON Recovery (requirements.txt, src/flow.py, src/normal_day.py): Integrated json-repair across the simulation pipeline. This allows the engine to "salvage" malformed LLM responses in ticket generation and Slack conversations, significantly reducing "failed to parse" fallbacks.

Changed

  • Persona History Filtering (src/memory.py): Enhanced persona_history to filter out "noisy" macro-events (like sprint planning summaries or standups). This ensures agents focus on personal agency and direct interactions when building their local context.
  • Incident Recurrence Logic (src/causal_chain_handler.py): Refined the RecurrenceDetector to prioritize the earliest incident in a chain (anti-daisy-chaining). This ensures new incidents link back to the original root cause rather than just the most recent duplicate.
  • Streamlined codebase (Across all files): Conducted a major cleanup of legacy comments, "ASCII art" section dividers, and redundant docstrings to improve readability and reduce token overhead during development.

Fixed

  • PR Causal Linking (src/flow.py): Fixed a bug where PR IDs were missing from the persistent ticket record. PRs are now immediately appended to the CausalChainHandler and saved to MongoDB upon creation.
  • Department Signal Noise (src/day_planner.py): Non-engineering departments (Sales, HR) now only receive "direct" relevance signals, preventing them from being overwhelmed by technical incident data that doesn't impact their planning.

v1.1.1-preprint

Choose a tag to compare

@jeffreyflynt jeffreyflynt released this 20 Mar 09:33
514ee55

[v1.1.1] — 2026-03-19

Changed

  • String Truncation Limits (src/, eval/): Standardized and expanded summary truncation limits from 40–60 characters to 80 characters across JIRA titles, Slack interactions, incident root causes, and PR titles to prevent critical context loss in logs and RAG retrieval.
  • RAG Embedding Logic (src/memory.py): Enhanced OllamaEmbedder to support asymmetric retrieval. The system now prepends specific instruction prefixes for search_query and search_document to improve embedding quality for models like Stella and MXBAI.
  • Causal Threading Fixes (eval/eval_harness.py): Refined _design_doc_threads to ensure design documents are only included in evaluation chains if they possess a valid causal_chain fact, preventing broken threads in the evaluation harness.
  • Codebase Formatting: Applied consistent linting and multi-line dictionary wrapping across eval/eval_harness.py and src/insider_threat.py to match project style guidelines.

Added

  • LLM-Driven Sentiment Drift (src/insider_threat.py): Replaced static text templating with a CrewAI-powered rewriting task. Disgruntled or malicious actors now use a worker_llm to authentically rewrite Slack messages, with negativity intensity scaling based on the days since the threat "onset."
  • Enhanced Vector Search Filtering (src/memory.py):
    • Added type_exclude support to recall(), allowing the RAG pipeline to explicitly ignore specific artifact types (e.g., hiding persona_skill from general queries).
    • Implemented a "causal floor" using the since parameter to allow bounded timestamp filtering ($gte and $lte) within MongoDB vector searches.
  • Comprehensive Memory Testing (tests/test_memory.py): Introduced a massive expansion of the test suite (20+ new tests) covering:
    • Ollama instruction prefix validation.
    • Mutually exclusive filter guards in recall().
    • Upsert logic for artifacts to prevent vector index duplication.
    • Event-type skip lists to reduce embedding noise for high-volume, low-signal events like standard Slack messages.

Full Changelog: v0.5.0...v1.1.1

OrgForge v1.0.0 — Preprint Release

Choose a tag to compare

@jeffreyflynt jeffreyflynt released this 15 Mar 15:32

This release corresponds to the codebase used to produce the results in:

OrgForge: A Multi-Agent Simulation Framework for Verifiable Synthetic Corporate Corpora
Jeffrey Flynt
Preprint forthcoming on arXiv

What's included

  • Full simulation engine (flow.py) with domain-routed incident assignment
  • LLM-driven department planning with cross-signal filtering (day_planner.py)
  • Post-simulation eval dataset generator with TEMPORAL, CAUSAL, KNOWLEDGE_GAP,
    RETRIEVAL, ROUTING, GAP_DETECTION, PLAN, and ESCALATION question types (eval_harness.py)
  • BM25 and dense retrieval baselines over a 2,715-document synthetic enterprise corpus
  • HuggingFace export pipeline (export_to_hf.py)
  • 22-day simulation of a 20-person sports-wearables company (Apex Athletics)

Benchmark dataset

The eval dataset generated by this release is available on HuggingFace: [link]

Reproducibility note

Results were produced using Losspost/stella_en_1.5b_v5 via Ollama for dense retrieval and BM25Okapi (rank-bm25) for sparse retrieval. Simulation non-determinism arises from LLM sampling — exact corpus content will vary across runs, but benchmark structure and question types are stable.