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:
```sh
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.