UpworkAutomation / docs /proposal-refinement.md
ananyajoshi's picture
Refine proposals with natural structure and grounded concise writing
fcde103
|
Raw History Blame Contribute Delete
3.03 kB

Proposal refinement — 17 October 2026

The previous writer required a five-part sales structure, a hidden-cost hook, three or four labelled steps, timelines, a metric and a quantified result. It also imposed a 500-word floor alongside conflicting job-specific bands. Those instructions encouraged repetitive, formulaic drafts and unsupported commitments when a profile lacked the requested facts.

The writer now chooses a natural structure for the actual job: a useful opening, relevant proof when available, a concrete approach and a brief close. Steps and a closing question are optional. It does not invent pain, competitor comparisons, dates, prices, availability or quantified results. Screening answers are separate, direct and individually fact-checked.

Body targets are 150–250 words for simple jobs, 250–400 for standard jobs and 350–550 for complex jobs. The lower bound is guidance, not a padding quota. The internal three-round review covers substance, structure and voice; its self-reported findings are not proof of writing quality. Groq retains its existing policy of skipping the extra critique re-ask to avoid extra calls.

The verifier now keeps the writer's voice and repairs grammar affected by its own edits. It must remove an unsupported achievement rather than turn an invented number into vague language such as “a meaningful amount.” Deterministic cleanup runs on the checked body as well as the initial draft, so copy/download and later rechecks use the same cleaned text. Trimming can finish at a complete sentence below the target minimum instead of forcing a fragment to meet it. No extra mandatory provider call was added.

This note supersedes the old fixed structure and length bands in UpworkAutomation_ProposalRules_Handoff.pdf. Existing proposals in an open session are not silently rewritten: generate a new proposal to use the new writer. Recheck alone runs factual verification, not a new writing pass.

Validation

Run the new offline regressions with:

python3 -m unittest discover -s tests -v

The tests disable dotenv loading, use temporary state and mock provider responses. They cover complete-sentence trimming, consistent prompt lengths, input boundaries, generation through verification and rechecking, screening answers, and final cleanup preserving keywords, ranges and paragraph breaks. Validation passed: five new tests, all 84 current-code audit regression scripts (including an L03 rerun updated for the intentional shorter band), the additional pipeline regression script, 47 module imports and seven screen smoke checks. Four historical helpers still fail as expected because they deliberately load the old buggy reader. The L03 fixture still checks paragraph preservation; only its old length and paragraph-count assumptions were updated. No paid-provider writing comparison was performed; these checks establish pipeline behaviour, not a guarantee that every model output is ready to send. Users should review claims and verification warnings.