application_feedback · git:20261101.a39418b · 2026-11-01 · sha256 aa549eff73c3c84c
application_feedback git:20261101.a39418bA
Immutable. This exact content never changes and is served at /api/v1/blob/aa549eff73c3c84c.
--- name: application_feedback description: Draft the English feedback email for one startup from its latest submission review, for the SICTIC screener to proofread and paste into Dealum. Use after submission_ready; bulk refresh runs it for Application-stage startups. --- # Application feedback Draft the feedback email for one startup from its stored submission review. ## Inputs and outputs The async `application_feedback(startup)` returns `list[InsightFile]`: the draft `application-feedback-<startup>-<model>.md` in the startup's insights folder, or an empty list when the review proposes no concerns. A draft only contains that startup's own information. `feedback_state(startup)` reads the latest review, its proposed action and the draft that matches it, without generating anything. `None` as draft means no concerns, or no current draft yet. [distribution_policy](../distribution_policy/SKILL.md) uses it for the screener summary. ## Workflow and dependencies Bulk refresh runs this step for Application-stage startups after `submission-ready`, its registered dependency. A direct call uses the latest stored review from `submission_ready.latest_response` without checking its freshness, so run `submission_ready` first when the review must be current. Read the action with `submission_ready.proposed_action`. Only `Send concerns to startup` gets a draft: `generate_markdown` writes it in English, following `config/application_feedback/email_instructions.md`. The greeting uses the startup name of the latest Dealum application in the dossier. The model only receives the concerns read with `submission_ready.stated_concerns`, not the checklist, to reduce unsupported additions. The draft is signed with `SCREENER_SIGNATURE` from `.env`, or with the placeholder `[Screener name]` for the screener to replace when it is empty. A reviewer requires between one and as many numbered points as there are concerns, and that signature. These are formatting checks; they do not establish that every concern is covered or that no concern was invented. The screener must verify the draft against the review before sending it. A stored or manual draft is reused while the instructions, the startup name, the signature and the concerns are unchanged. Changing the instructions only redrafts; it does not invalidate the review. ## Side effects and failure behavior Reads the stored review and calls the configured model when a new draft is needed. It does not access Dealum, send email or change any stage. A missing review, a review without a proposed action, or a review that proposes sending concerns without stating any raises; generation failures propagate. ## Usage ```bash conda run -n sictic-env python -m skills.application_feedback --startup "Example Startup" ``` Normally bulk refresh runs this step. There is no harness command. ## References - [Implementation](application_feedback.py), [CLI](__main__.py) - [Email instructions](../../config/application_feedback/email_instructions.md) - [Submission review](../submission_ready/SKILL.md) - [Screener summary and email](../distribution_policy/SKILL.md)