Skip to content

Releases: Kntro-Soft/reqsai-api

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 05:19
5fbacec

Promoted to production from candidate 1.6.0-rc.1 without rebuilding.

  • Released commit: 5fbacec2adb56a62f79e27584c6ebcb7447fb3c7 (tree b7fe661dd1d8d435cbc1f34d2df985b612509641)
  • Candidate commit: e336d6d0ec955a155f493d6bf96b0c55334a4373 on release/1.6.0
  • Image: ghcr.io/kntro-soft/reqsai-api@sha256:044f55ed61efa0849e814166f965b010e0eebebef0a80e1803c51640d590001f
  • Production: https://reqsai.tech

Changes

Added (AI project profile — feature/153-ai-project-profile, #153)

  • POST /api/organizations/{orgId}/code/github/project-profile (owners and admins, like the other GitHub endpoints of the organization): for a project that does not exist yet, reads the README and manifests of the picked repositories (at most 3, through the organization's GitHub App, nothing else of the code) plus the picked Jira project's name and description, and has the AI propose a name, description, domain, architecture, languages, frameworks, client platforms and databases covering all the sources ("te-tengo-general-api" and "te-tengo-mobile-flutter" become "Te Tengo"). Needs the AI allowance (402 AI_QUOTA_EXCEEDED when spent), is metered as the new PROJECT_SETUP feature and treats every source text as untrusted data. Without a model, or when its reply cannot be read, it answers with generated: false from the sources' metadata.

v1.6.0-rc.1

v1.6.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 05:07

Release candidate 1.6.0-rc.1 of Kntro-Soft/reqsai-api (version 1.6.0, build 5).

Commit e336d6d0ec955a155f493d6bf96b0c55334a4373 on release/1.6.0
Tree b7fe661dd1d8d435cbc1f34d2df985b612509641
Built by https://github.com/Kntro-Soft/reqsai-api/actions/runs/38514021788
Image ghcr.io/kntro-soft/reqsai-api@sha256:044f55ed61efa0849e814166f965b010e0eebebef0a80e1803c51640d590001f
Stage verified · https://github.com/Kntro-Soft/reqsai-api/actions/runs/38514021788

Production ships this candidate only from a main commit whose tree is b7fe661dd1d8d435cbc1f34d2df985b612509641, without rebuilding.

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 03:58
5241787

Promoted to production from candidate 1.5.0-rc.1 without rebuilding.

  • Released commit: 524178798ce474acabba8b694f062e65393b8a18 (tree 022b6739a98a4d04f9f00a9fb521664bcf54db8e)
  • Candidate commit: ece3b6018bdfa14bd61a1bb3d7e925f1ec9ef0d7 on release/1.5.0
  • Image: ghcr.io/kntro-soft/reqsai-api@sha256:e2c3fb642cc344eb14e986e1556c0a4664934453c697d5f938617f3243bffc86
  • Production: https://reqsai.tech

Changes

Fixed (Branch cleanup — bugfix/147-branch-cleanup-pulls, #147)

  • The weekly branch cleanup read each branch's pull requests with gh api -f, which sends a POST to the create-pull-request endpoint instead of listing, so every lookup failed with 422 and the open-PR and do-not-delete protections were never checked. It now lists with --method GET, and a branch whose PRs cannot be read is left alone.

Fixed (OpenAPI groups — bugfix/149-openapi-groups, #149)

  • Swagger UI now has groups for codebase (code copilot and GitHub), gateway (Jira integrations), overview and search; before, only workspace, discovery, iam and billing were documented, so those endpoints were missing from /swagger-ui.html and /api-docs/*.

Fixed (AI allowance gaps — feature/141-quota-gaps, #141)

  • Uploading a recording (POST /api/sessions/{id}/upload), processing a session into stories (POST /api/sessions/{id}/process) and verifying a suggestion against the code (POST /api/projects/{id}/suggestions/{id}/verify-code) now check the monthly AI allowance first and answer 402 AI_QUOTA_EXCEEDED when it is spent, before touching the session (it keeps its status). Recording live, transcribing, sharing, exporting and reading are not affected.

Added (Source profile data — feature/145-source-profile, #145)

  • GET .../integrations/{connectionId}/jira/projects returns each project's description and GET .../code/github/repositories each repository's language, so the create-project wizard can fill the project's profile from the chosen sources.

Changed (Jira sites — feature/143-jira-multi-site, #143)

  • An organization can connect several Jira sites, like GitHub accounts. The same site twice (by its normalized URL) is still refused with 409 INTEGRATION_ALREADY_CONNECTED; disconnecting one site leaves the others. Tenant migration V20261012133000 replaces the unique index per organization and provider with one per organization, provider and site. A project's single push target is unchanged.

v1.5.0-rc.1

v1.5.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 03:46

Release candidate 1.5.0-rc.1 of Kntro-Soft/reqsai-api (version 1.5.0, build 4).

Commit ece3b6018bdfa14bd61a1bb3d7e925f1ec9ef0d7 on release/1.5.0
Tree 022b6739a98a4d04f9f00a9fb521664bcf54db8e
Built by https://github.com/Kntro-Soft/reqsai-api/actions/runs/38507162799
Image ghcr.io/kntro-soft/reqsai-api@sha256:e2c3fb642cc344eb14e986e1556c0a4664934453c697d5f938617f3243bffc86
Stage verified · https://github.com/Kntro-Soft/reqsai-api/actions/runs/38507162799

Production ships this candidate only from a main commit whose tree is 022b6739a98a4d04f9f00a9fb521664bcf54db8e, without rebuilding.

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 18:30
2960a6c

Promoted to production from candidate 1.4.0-rc.1 without rebuilding.

  • Released commit: 2960a6c8c15917ef1fd3d452088041fc1ab63eb1 (tree f0bd875942c1052fd9c38f3a18b4bdb0be6f7445)
  • Candidate commit: ff95f858608d9f41677bd5fdb4280ed9795ccfe2 on release/1.4.0
  • Image: ghcr.io/kntro-soft/reqsai-api@sha256:0b78c25514d2f8aa772b5556da890bc177862bf27a36ed7fa20e56498b652e5a
  • Production: https://reqsai.tech

Changes

Added (Share a session — feature/137-session-share-link, #137)

  • Share links can follow one discovery session, as a spectator (VIEW: read only) or as a reviewer (REVIEW: also accepts or dismisses suggestions and approves or rejects the session's stories). POST /api/projects/{id}/share-links takes sessionId and access; creating a reviewer link needs SESSION_DECIDE, a spectator link SESSION_READ. The session must belong to the project. Migration V20261012113000 adds session_id and access to public.share_links; existing links stay backlog links with REVIEW access.
  • Public GET /api/share/session/{token}: the session's state, the latest 200 final transcript segments, speakers, pending suggestions and the stories it produced (merged ones hidden), meant to be polled while the session is live. POST .../suggestions/{id}/accept|dismiss and POST .../stories/{id}/status decide with a reviewer link; a spectator link gets 403 SHARE_LINK_READ_ONLY, and a story outside the session reads as not found.
  • A backlog link no longer opens a session endpoint and a session link no longer opens the backlog; both answer SHARE_LINK_UNAVAILABLE.
  • ShareLinkResponse carries sessionId and access.

v1.4.0-rc.1

v1.4.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:09

Release candidate 1.4.0-rc.1 of Kntro-Soft/reqsai-api (version 1.4.0, build 3).

Commit ff95f858608d9f41677bd5fdb4280ed9795ccfe2 on release/1.4.0
Tree f0bd875942c1052fd9c38f3a18b4bdb0be6f7445
Built by https://github.com/Kntro-Soft/reqsai-api/actions/runs/38274093661
Image ghcr.io/kntro-soft/reqsai-api@sha256:0b78c25514d2f8aa772b5556da890bc177862bf27a36ed7fa20e56498b652e5a
Stage verified · https://github.com/Kntro-Soft/reqsai-api/actions/runs/38274093661

Production ships this candidate only from a main commit whose tree is f0bd875942c1052fd9c38f3a18b4bdb0be6f7445, without rebuilding.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 06:05
243cfae

Promoted to production from candidate 1.3.0-rc.1 without rebuilding.

  • Released commit: 243cfae93d45bbb454895f7841c5ed31e292fc3a (tree 3a47f4b109e4ed84a2f5415d83ae372d0f37b2a9)
  • Candidate commit: fded2750f1277083b3b566ffae33ec79648803de on release/1.3.0
  • Image: ghcr.io/kntro-soft/reqsai-api@sha256:b1411b7cf07c01a7abfc2b79565a67d3bd193aaf09efeec4c41e994b5ea69d5c
  • Production: https://reqsai.tech

Changes

Added

  • Accepting a suggestion decides the story's review status in the same transaction. POST /api/projects/{projectId}/suggestions/{id}/accept and POST /api/sessions/{sessionId}/suggestions/{id}/accept take an optional approve flag (default false, so older clients keep working). approve: true creates (NEW_STORY) or updates (UPDATE_STORY, EDGE_CASE) the story and leaves it APPROVED; it needs STORY_APPROVE on top of SESSION_DECIDE, otherwise 403 and nothing changes. Without it the story is saved as a draft.
  • Status rules: a new story starts DRAFT or APPROVED. A target story that was APPROVED or REJECTED goes back to DRAFT when saved as a draft (its content changed and needs a new review) and becomes APPROVED when approved. A target already EXPORTED or MERGED keeps its status either way. CLARIFYING_QUESTION ignores the flag.
  • The accepted suggestion (REST responses, the project suggestion list, the session suggestion list, the assistant chat history) and the realtime SUGGESTION_ACCEPTED message carry resolvedStoryStatus, so the decision row can say whether the story ended approved or as a draft. No migration: the status is read from the story.

Added (Token metering — feature/130-token-metering)

  • Usage ledger. Every successful AI call is one idempotent row of the tenant table ai_usage_events (feature, project, model, input / output / cached input tokens, the quota tokens it added, audio seconds), written off the request thread so a metering problem never fails the AI call. Features: live suggestions, chat, final stories, code index, code deep search, document classification, embeddings and transcription. Tenant migration V20261012100000__ai_usage_events.sql. TokenUsageRecorderPort gains record(TokenUsage); record(long) still works.

  • Embeddings and speech-to-text are metered. Embeddings report the tokens the provider counted (an estimate of one per four characters when it returns none) and count at a tenth in the quota. Streaming and uploaded audio are metered in seconds (audio_seconds) and never count as tokens.

  • Atomic quota counter. token_quota_used is raised with one UPDATE ... SET token_quota_used = token_quota_used + n in the transaction of the ledger insert, so parallel calls no longer lose increments; the period rollover is kept. A cached input token counts at half (the provider bills it at half), see docs/BILLING.md. Common migration V20261012100100__subscription_quota_warning.sql.

  • The monthly allowance is enforced. The chat, "Analizar ahora", live suggestions, code indexing and document classification check it first. At the cap an explicit AI request fails with AI_QUOTA_EXCEEDED (HTTP 402, with plan, limit, used and resetsAt); live suggestions pause quietly and the session gets one AI_QUOTA_PAUSED message; code indexing keeps the structural description of the modules; an uploaded document is stored unclassified. Reading, editing and exporting never stop. The check fails open.

  • Warnings at 80, 90 and 100 %. GET /api/subscriptions/organization/{id}/usage returns warningLevel, and a TOKEN_QUOTA_WARNING message goes to /topic/organizations/{id}/usage once per level per period.

  • Usage read model. The usage response adds the period's tokens by feature and by project, the transcription seconds and a meetingEstimate (minutes left at the organization's own measured tokens per meeting minute, or a documented default of 10,000).

  • reqsai.ai.generation.live-model (GENERATION_LIVE_MODEL) sets a cheaper model for live passes only; unset keeps the provider's default.

  • Deep search of the pure source code (codebase: DeepCodeSearchPort). It fetches the repository archive at the indexed commit through the indexer's access (installation token, or anonymous for a public repository) into a temporary file kept 10 minutes (ArchiveCache: at most 4 files and 400 MB, always deleted), removes secrets, and ranks windows of code with a BM25-like lexical search (CodeSearcher) that matches Spanish requests with English identifiers by word root. It returns at most 10 snippets and 12000 characters with file, lines and a GitHub link. Nothing is persisted. See docs/CODE_COPILOT.md.

  • Verify a suggestion in the code. POST /api/projects/{projectId}/suggestions/{suggestionId}/verify-code (SESSION_DECIDE and INTEGRATION_READ; 202, or 409 when no repository is ready) searches the code and has the model read the passages once (at most one model call and 25 seconds). The suggestion gets a verdict (ALREADY_EXISTS, CONFLICTS_WITH_CODE, NOT_FOUND, UNSURE), a note, references with file and lines, verifiedAt, or a verifyError to retry. The card is updated live by SUGGESTION_CODE_UPDATED (session topic, and /topic/projects/{projectId}/suggestions). Migrations V20261012110000 and V20261012110100.

  • CodeReference and its response gain optional file, lineStart, lineEnd and quote; url points at …/blob/<commitSha>/<file>#L<a>-L<b>. Older references still read as module references. code in a suggestion gains verdict, verifyState, verifiedAt and verifyError.

  • Assistant chat searches the code when the model says the question is about the code and the index does not answer it: the reply says it searched the source code and cites file and lines (codeSearched, codeReferences in the message). Latency of other messages is unchanged; it falls back to the model's own reply when the search cannot run.

  • Create a project with Jira and GitHub (#132). POST /api/organizations/{orgId}/projects accepts optional sources: {jira?: {connectionId?, projectKey, issueTypeName, importStories}, github?: [{repository, branch?, installationId?}]}. The project is created and answers at once; the sources are set up in the background.

    • What can be checked at once is checked before the project exists, with a 4xx: the Jira connection exists, each repository is readable (shared by an installation, or public), the per-project repository limit, no repeated repository.
    • workspace announces the request with the public event ProjectSetupRequestedIntegrationEvent on workspace::api (after commit, in the background, bound to the tenant). gateway saves the Jira target and starts the import; codebase connects and indexes the repositories. Both use the same handlers as the REST endpoints, on behalf of the creator. workspace depends on neither: they implement ProjectSetupParticipant and report through ProjectSetupReporter.
    • A source that fails never fails or undoes the project: the failure is recorded in the new tenant table project_setup_steps (migration V20261012120000) and logged.
    • GET /api/projects/{projectId}/setup (INTEGRATION_READ) returns the steps (JIRA_LINK, JIRA_IMPORT, GITHUB_REPOS) with state and counts, merged from the repositories' indexing, the Jira target and import job and the recorded state, plus the stack detected in the indexed repositories. The same object is pushed on /topic/projects/{projectId}/setup. POST …/setup/steps/{step}/skip and …/retry (INTEGRATION_WRITE) leave a step out or run a failed one again.
    • GET /api/organizations/{orgId}/code/github/repositories lists what the organization's GitHub installations share, so a project that does not exist yet can pick repositories.
  • New overview module: read-only dashboards of a project and of an organization (#129).

    • GET /api/projects/{projectId}/overview: stories by status and priority, story points,
      coverage (acceptance criteria, origin quote, linked code), sessions and stories per week over the
      last 12 weeks, how often the copilot's proposals were accepted or dismissed, glossary, constraints,
      documents and assigned members, and the connected code. Each section follows the permission that
      guards the same data (STORY_READ, SESSION_READ, GLOSSARY_READ, CONSTRAINT_READ,
      DOCUMENT_READ, MEMBER_READ, INTEGRATION_READ) and is null without it; 403 when the caller
      holds none, 404 for an unknown project.
    • GET /api/organizations/{organizationId}/overview (any member): the same figures across the
      projects the caller may see, the busiest projects and, for owners and admins only, the headcount.
      Answers 403 for an organization other than the one the token is bound to.
    • Everything is counted in SQL (COUNT/GROUP BY/FILTER); no entity is loaded. Each context owns its
      figures behind a new named interface: discovery::insights, workspace::insights and
      CodebaseModuleApi.footprint. No migration.

Changed

  • Final stories (processing a session or an uploaded recording) now get the same context as live suggestions: backlog candidates, glossary, constraints and the related modules of the connected code. Without context, or if the lookup fails, they are generated from the transcript alone as before.
  • The release pull request and the back-merge pull request are opened by the GitHub App reqsai-release-bot (a short-lived token minted per job from RELEASE_APP_ID and RELEASE_APP_PRIVATE_KEY), so their CI runs: opened with GITHUB_TOKEN they started no pull_request workflow. The back-merge turns on auto-merge (merge commit) when the repository allows it; without the App configuration the job fails instead of falling back to GITHUB_TOKEN.
  • produccion.yml and rollback.yml dispatch reqsai-infra's deploy-mvp.yml with a reqsai-release-bot token lim...
Read more

v1.3.0-rc.1

v1.3.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Oct 05:35

Release candidate 1.3.0-rc.1 of Kntro-Soft/reqsai-api (version 1.3.0, build 2).

Commit fded2750f1277083b3b566ffae33ec79648803de on release/1.3.0
Tree 3a47f4b109e4ed84a2f5415d83ae372d0f37b2a9
Built by https://github.com/Kntro-Soft/reqsai-api/actions/runs/38207816897
Image ghcr.io/kntro-soft/reqsai-api@sha256:b1411b7cf07c01a7abfc2b79565a67d3bd193aaf09efeec4c41e994b5ea69d5c
Stage verified · https://github.com/Kntro-Soft/reqsai-api/actions/runs/38207816897

Production ships this candidate only from a main commit whose tree is 3a47f4b109e4ed84a2f5415d83ae372d0f37b2a9, without rebuilding.

v1.2.0

Choose a tag to compare

@jhosepmyr jhosepmyr released this 10 Oct 15:59
a78624c

Promoted to production from candidate 1.2.0-rc.1 without rebuilding.

  • Released commit: a78624c05064b59d25c15ce317dcc729eb782ee3 (tree a3fef5f52c5be98e2340354c10026c69bfcb67eb)
  • Candidate commit: 02da7d578b7201a084909a5f406b2fc05651944c on release/1.2.0
  • Image: ghcr.io/kntro-soft/reqsai-api@sha256:108520e1ca89f35b387e4757cf56b13c11232df5ffa858156fe5d034c921ef8e
  • Production: https://reqsai.tech

Changes

Changed (Release pipeline — feature/119-release-pipeline, #119)

  • Gitflow release candidates, model C + tag at the end. release.yml (on release/X.Y.Z and
    hotfix/X.Y.Z) runs CI, builds the linux/arm64 image once as ghcr.io/kntro-soft/reqsai-api:X.Y.Z-rc.N,
    records it as the pre-release vX.Y.Z-rc.N (digest, tree hash, build number), verifies that digest
    automatically and opens the PR release: X.Y.Z. produccion.yml (on main) finds the candidate by tree hash,
    waits for approval in produccion, deploys the same digest through reqsai-infra, labels it X.Y.Z/latest
    and only then tags vX.Y.Z and opens the back-merge PR. rollback.yml ships an earlier release again.
  • Pushes to main no longer deploy by themselves (deploy.yml removed); CI and CodeQL also run on pushes to
    release/** and hotfix/**.
  • Deploy switches ENABLE_REQSAI_API_IMAGE and ENABLE_REQSAI_API_DEPLOY (organization variables).
  • Issue forms for User Story and Task, acceptance criteria on bugs, and Closes # in the PR template.

Added (Client documents — feature/workspace-client-documents, US22)

  • The analyst uploads client documents (PDF or Word .docx) to a project and ReqsAI turns them into
    project context.
    • POST /api/organizations/{orgId}/projects/{projectId}/documents/upload (multipart file,
      DOCUMENT_CREATE) extracts the text (Apache PDFBox 3.0.8 / Apache POI 5.5.1) and asks the AI for
      a context summary, glossary terms (term + definition), constraints and the document type. The reply
      flags the terms and constraints the project already has (exists).
    • The document is stored PENDING until the analyst reviews it.
      POST …/documents/{documentId}/apply (DOCUMENT_CREATE, plus GLOSSARY_TERM_WRITE /
      CONSTRAINT_WRITE for what it adds) adds the selected terms and constraints, skipping duplicates
      and enforcing the glossary plan limit. It then makes the document ACTIVE with the reviewed name,
      type and summary.
    • DELETE …/documents/{documentId} also discards a pending analysis. Re-uploading the same file
      replaces its unapplied analysis, and analyses left for 24 hours are dropped on the next upload.
  • The applied summaries feed the AI. ProjectSnapshot.documents carries the five newest ones, and
    discovery adds them to the project context of realtime suggestions, extraction and the assistant chat.
  • Uploads are checked before any parsing.
    • The extension, the declared content type and the magic bytes must all say PDF or .docx.
      Executables, also renamed ones, and any other format are 415 DOCUMENT_TYPE_NOT_ALLOWED.
    • A file over 50 MB is 413 DOCUMENT_TOO_LARGE. When the multipart limit stops it first, it is
      413 PAYLOAD_TOO_LARGE, a new shared code.
    • An empty file, or a scan without text, is 422 DOCUMENT_EMPTY. A damaged or password-protected
      file is 422 DOCUMENT_UNREADABLE.
    • A .docx is streamed once to cap what it really inflates to (zip bombs), and must declare a
      WordprocessingML package, so a renamed Excel or macro-enabled file is refused.
  • Extracted text is capped at 200,000 characters (truncated), and the model reads the first
    60,000. The document text is untrusted: the prompt delimits it in <document> and neutralizes
    look-alike tags.
    • Without an AI model, or when the model fails, the upload still succeeds with classified: false,
      no suggestions and an excerpt as the summary.
  • Storage. Tenant migration V20261009110000__project_document_uploads.sql:
    • project_documents gains file name, media type, size, extracted characters, summary and a
      content_id;
    • the text lives in the new project_document_contents, loaded only on demand.
    • Pending documents are left out of listings, global search and the AI context.
  • Every new organization gets a demo project with static Spanish sample data and no AI call:
    "Demo · Restaurante La Tradición — Reservas en línea".
    • Workspace part: profile (domain, platforms, stack), 5 glossary terms and 3 constraints.
    • Discovery part: a COMPLETED session with a 12-segment diarized transcript, 6 stories (3 APPROVED,
      3 DRAFT) with Given/When/Then criteria, and 2 PENDING suggestions (a new story and a clarifying
      question).
    • Stories are left without an embedding; the lazy re-index pass indexes them on the first live
      session.
  • Seeding is synchronous, right after the organization commits.
    • DemoProjectProvisioningListener listens to OrganizationCreatedEvent (@TransactionalEventListener,
      after commit) and binds the new tenant. The POST /api/organizations response already includes the
      demo.
    • Best-effort: a seeding failure is logged and never fails the organization creation.
    • Idempotent: one demo per organization, also enforced by the partial unique index
      uq_projects_org_demo.
  • Discovery seeds its own part through the new workspace::api integration event
    DemoProjectSeededIntegrationEvent.
    • A synchronous @EventListener in the same transaction, so the whole (re)seed is atomic.
    • Workspace never reaches into Discovery.
  • POST /api/organizations/{orgId}/projects/{projectId}/demo/restore (PROJECT_UPDATE; owners and
    admins bypass) restores the original sample data and returns 200 with the project.
    • Wipes the project's sessions, segments, stories, criteria, client feedback, suggestions and
      assistant chat, then seeds them again. Share links are kept.
    • Resets the profile, glossary and constraints. The name is kept.
    • 409 PROJECT_NOT_DEMO on any other project; 409 SESSION_ALREADY_ACTIVE while a session records.
  • The demo does not count against the plan's project limit.
    • projects.demo (tenant migration V20261009120000__project_demo_flag.sql).
    • ProjectResponse.demo (appended).
    • PROJECT_PLAN_LIMIT_EXCEEDED counts only non-demo active projects.
  • Existing organizations are not back-filled; only organizations created from now on get the demo.
  • Tests:
    • DemoProjectTemplateTest, DemoDiscoveryContentTest: the sample aggregates are valid;
    • seeder and handler unit tests;
    • DemoProjectIntegrationTest: seeding, plan limit, modify then restore, PROJECT_NOT_DEMO, 403 for
      a READ member.

Added (US40 — Identify the speakers of a meeting — feature/discovery-speaker-labels)

  • The diarized speakers of a session can be listed and described.
    • GET /api/projects/{projectId}/sessions/{sessionId}/speakers (SESSION_READ) lists them by first
      appearance in the transcript: label, index, displayName, name ("Hablante N" until named),
      side and segmentCount.
    • PUT /api/projects/{projectId}/sessions/{sessionId}/speakers/{label} (SESSION_RUN) takes
      {displayName, side}; side is CLIENT or TEAM. A blank name goes back to "Hablante N". The
      description applies to every segment of that speaker, past and future.
    • A label that never spoke in the session answers 404 SPEAKER_NOT_FOUND.
    • Tenant migration V20261009100000__session_speakers.sql adds session_speakers, unique per
      (session_id, speaker_label).
    • Each change is pushed live on the session topic as SPEAKER_UPDATED.
  • Overlapping speech is reported. The same response carries overlaps (count, totalMs, up to 50
    ranges): stretches where two different speakers' segments overlap for at least 500 ms, where the
    speaker attribution may be wrong. Shorter overlaps (a quick "ajá") are ignored.
  • The AI puts the client first.
    • When the transcript is diarized, it reaches the model as one line per speaker turn:
      [Ana (Cliente)]: …, [Hablante 2 (Equipo)]: ….
    • Both prompts gain a rule: what the client asks for, rules or decides is the requirement. What the
      team says is context, and only becomes a story when the client confirms it. When they disagree,
      the model follows the client.
    • Applies to the realtime suggestion passes, the flush on stop, and processing an uploaded
      recording. Cadence and backlog retrieval still use the plain text.
    • Names are analyst input: brackets and line breaks are neutralized so they cannot forge a tag, and
      the transcript delimiters are neutralized as before.
  • Uploaded recordings keep their speakers.
    • Deepgram batch now requests utterances=true. With diarize alone it labelled the words but
      returned no utterances, so the speakers were lost.
    • The diarized utterances of an upload are stored as final segments. The session then shows its
      speakers like a live one. Uploads without speaker labels (Whisper) keep only the text, as before.
  • Live Deepgram results are split by speaker. A final result whose words change speaker becomes one
    segment per speaker turn, with each turn's own timing. Before, the whole result went to the first
    word's speaker.
  • Tests:
    • domain: SessionSpeakerTest, SpeakerRosterTest, SpeakerOverlapDetectorTest;
    • application: SpeakerTranscriptFormatterTest, UpdateSessionSpeakerCommandHandlerTest, and the
      speaker cases of the realtime, processing and upload tests;
    • prompts and parsing: GenerationScenarioTest and DeepgramStreamingAdapterTest;
    • SessionSpeakersIntegrationTest: upload a diarized meeting, list, name, refuse and process, over
      HTTP and the tenant schema.

Added (US50 — Share stories with the client — feature/discovery-share-with-client)

  • Share links. The team opens a link a client uses without an acc...
Read more

v1.2.0-rc.1

v1.2.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Oct 15:33

Release candidate 1.2.0-rc.1 of Kntro-Soft/reqsai-api (version 1.2.0, build 1).

Commit 02da7d578b7201a084909a5f406b2fc05651944c on release/1.2.0
Tree a3fef5f52c5be98e2340354c10026c69bfcb67eb
Built by https://github.com/Kntro-Soft/reqsai-api/actions/runs/38063688058
Image ghcr.io/kntro-soft/reqsai-api@sha256:108520e1ca89f35b387e4757cf56b13c11232df5ffa858156fe5d034c921ef8e
Stage verified · https://github.com/Kntro-Soft/reqsai-api/actions/runs/38063688058

Production ships this candidate only from a main commit whose tree is a3fef5f52c5be98e2340354c10026c69bfcb67eb, without rebuilding.