Skip to content

Releases

freemapper-courseplan v0.18.1

Choose a tag to compare

@github-actions github-actions released this 15 Nov 17:02

Changed

  • freemapper-core pin v0.28.0 (AGPL core, ADR 0094). No change in behaviour.
  • Licence: AGPL-3.0-or-later instead of GPL-3.0-or-later (ADR 0093), like freemapper, freemapper-core and the other app. Whoever runs a modified version as a network service must offer its source. Releases up to now stay GPL-3.0-or-later.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.18.1-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.18.1-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.18.1-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.18.1-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

What's Changed

  • chore(license): AGPL-3.0-or-later (ADR 0093) by @HenryJobst in #1

New Contributors

Full Changelog: v0.18.0...v0.18.1

freemapper-courseplan v0.18.0

Choose a tag to compare

@github-actions github-actions released this 14 Nov 08:58

Added

  • Forest maps in ISOM 2017-2 (ADR 0092). init accepts a forest map at 1:5000 to 1:15000 whose symbol set is ISOM 2017-2, and you set courses on it by hand with the same commands as on a sprint map, in the editor, on the command line and through MCP. check uses the forest variants of its rules, and the symbol numbers they read are confirmed against ISOM 2017-2 (docs/research/2026-11-14-isom-2017-2-symbols.md). On a forest map the limit for the mapped area (map.inside, map.margin) is 10 mm on the sheet, which is 100 m at 1:10000. Rules for sprints only are listed as not for forest maps, the Lkm rules of nor-bb-2021 as not checked without a climb.
  • score suggest, score draft and score length, their MCP tools and the editor's Score panel refuse a forest map: the route search has no elevation and no vegetation speed. A score course set by hand works; check lists its length bands as not checked.

Changed

  • A forest map in another symbol set (ISOM 2000, the first edition ISOM2017) is refused by init with a message that names the set found, instead of the general refusal of forest maps.
  • freemapper-core goes from v0.19.0 to v0.24.0 (ADR 0091). Print preview and editor map look the same. Code that writes PDF or SVG from the core now leaves out objects wholly outside the visible frame and writes paths more compactly, so PDFs and SVGs from the core are smaller; courseplan itself writes none yet.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.18.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.18.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.18.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.18.0-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

Full Changelog: v0.17.0...v0.18.0

freemapper-courseplan v0.17.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 10:08

Added

  • The event has a date and an organizer (ADR 0090), requested by freemapper-print for its title block. event set PROJECT --date YYYY-MM-DD --organizer TEXT sets them, --no-date and --no-organizer remove them. The tool is set_event_details, the event settings of the editor have a "Date" and an "Organizer" field, and info and event_info show both. The project file gets the optional key organizer in [event] (format stays 1; a program from before this version refuses a file that has it). The IOF XML export writes a set date as Event/StartTime/Date and a set organizer as Event/Organiser/Name, and nothing for a field that is not set. Purple Pen has no field for either, so .ppen export, import and sync leave them alone.
  • You can reject candidate sites (ADR 0089). score reject --at X,Y stores the position in the project file (new optional key rejected_sites, format stays 1), and score suggest, score draft and the candidate list of the editor leave out every site within 3 m of it. score unreject --at X,Y takes the rejection back. The tools are reject_site and unreject_site, the editor has a "Reject" button beside "Accept" in the candidate table. A program from before this version refuses a project file that has the new key.

Changed

  • The mapped area reaches 50 m beyond the map objects instead of 40 m (rule wkb2026.map.inside, metres, ADR 0088), the same number as the default margin. With the defaults, a control may stand at the outline of the objects; before it had to stand 10 m inside. Profiles that set metres themselves keep their value.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.17.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.17.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.17.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.17.0-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

Full Changelog: v0.16.0...v0.17.0

freemapper-courseplan v0.16.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 06:51

Added

  • Three recommendations of the project owner, each with a setting in the [score] table (ADR 0085 to 0087). A manual course may deviate; check only warns, hints or reports, and score suggest and score draft keep to them.
    • Dead ends: check warns when a control stands deeper in a dead end than dead_end_max_m (default 60 m, 20 to 300; rule wkb2026.control.dead_end, sprint and schoolyard maps). The depth is the walk from the control to where the path network offers a choice again; open areas and courtyards are no corridors. A control beside a wall, fence or thin building is also judged from the free cells a few metres around it, and the deepest answer counts. The draft and the suggestion leave such sites out. On the Gleisdreieck map a quay spur of 208 m is the case; a control that stood 68 m deep on it set the default (ADR 0085).
    • Start and finish: check gives a hint when they are more than start_finish_max_m (default 400 m, 50 to 2000) apart in a straight line (rule wkb2026.course.start_finish_distance). score draft, and score suggest --course, refuse such a start and finish with a message that names both positions, the distance, the limit and the setting (ADR 0086).
    • Margin from the edge of the mapped area: check reports a start, finish, control or crossing point closer than map_margin_m (default 50 m, 0 to 200) to the edge as an error (rule wkb2026.map.margin). The edge is where no map object lies within 40 m any more; the distance is measured on a raster, to about 2 m. The draft leaves such sites out and refuses a start or finish that is too close (ADR 0087).
    • The settings come with score settings --dead-end-max M --start-finish-max M --map-margin M, the tool set_score_settings and three fields in the Score settings panel of the editor.
  • check reports a start, finish, control or crossing point in the blank part of the sheet as an error. The new rule wkb2026.map.inside (source BL02, as the research file cites it) measures against the map objects themselves: a position counts as mapped when a map object lies within 40 m of it. The sheet frame (an axis-aligned rectangle line that spans 80 percent of the terrain) and layout symbols such as the north lines pattern (601, 602) do not count as objects. The message names the position, the nearest object and the limit. map_edge stays as it was; it measures against the box around the map objects and did not see a position in the blank corner of a diagonal map. Score courses are tested with start, controls and finish. See ADR 0084.
  • The pictures of the examples: the examples page and both example READMEs show the course in the editor, with start and finish on the map. The Gleisdreieck picture is new (docs/manual/images/gleisdreieck-course.jpg).

Changed

  • The example "Gleisdreieck" is redrafted under the new limits: 32 minutes, 26 controls, 63 points, the very good runner inside the band and the good runner near the target (before: 34 minutes, 33 controls, 95 points). Control 54 of the old version stood at the tip of the quay spur, 208 m deep, and six more controls were 39 to 47 m from the edge of the mapped area. Project file, IOF XML, control list, sheets, transcripts, check output, READMEs, the manual and its four Gleisdreieck pictures follow; the files score-34.* became score-32.*. check is quiet apart from four accepted warnings (three alike code pairs and the share of hard controls).
  • The score drafts on the Rummelsburger Bucht reach 11 minutes with both runners inside their bands and 12 near the target (before: 16 and 17), since sites keep 50 m from the edge of this narrow strip. Start, finish and the four controls of the example course already kept the margin and stay.
  • The score draft keeps its sites off the sheet frame by the same test as the new rule, with the extent of the terrain objects instead of the extent of all objects. On the Rummelsburger Bucht the frame was not recognised before, so a draft could take sites at its corners. The largest draft with both runners in their bands on that map is now 16 minutes (17 near the target). See ADR 0084.
  • The README of the Rummelsburger Bucht example and the manual (captions, section "Checking") follow the new course, and the manual pictures of the example are new.

Fixed

  • The example "Rummelsburger Bucht" had its finish in the blank part of the sheet, beside the map, and its start far from it. Start and finish now stand in the park in the middle, 34 m apart, and the course is a loop of four controls and 905 m (before: five controls, 1226 m). Project file, IOF XML, Purple Pen file, outputs, READMEs and all editor pictures of the example follow. check is clean. The example "Gleisdreieck" was checked: its start and finish (60 m apart) and all controls lie on the map.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.16.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.16.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.16.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.16.0-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

Full Changelog: v0.15.0...v0.16.0

freemapper-courseplan v0.15.0

Choose a tag to compare

@github-actions github-actions released this 12 Nov 20:16

Added

  • check reports a control that stands in an out-of-bounds area as an error. The new rules wkb2026.control.in_forbidden (forest maps) and wkb2026.control.in_forbidden_sprint (sprint and schoolyard maps) cite WKB26 A 2.2. An area is a special object of the kind out-of-bounds area that belongs to the course of the control or names no course, and any map area with the symbol 520 or 709, on sprint and schoolyard maps also 714. A control on the edge stands in the area. The rule does not test start, finish, crossing points or controls that are on no course. See ADR 0081.
  • The length bands of the score draft are targets with a tolerance. A runner is in the band, near the target (up to 3 percentage points outside, exactly 3 still counts) or misses the band. Near the target is a success: score draft and score length exit with 0 and name the deviation, and the JSON answers and the MCP tools carry length.state. Only a miss beyond the tolerance exits with 1 and is a finding of check. The draft still aims at the band; the tolerance only decides what it may return. See ADR 0083.
  • The bands and the tolerance are settable: a new setting band_tolerance_percent (0 to 10, default 3), score settings --good-band MIN-MAX --very-good-band MIN-MAX --band-tolerance N, the parameters good_band_percent, very_good_band_percent and band_tolerance_percent of set_score_settings, and input fields in the Score panel of the editor, whose length report says "in the band", "near the target" or "missed". The very good band must not start below the good band.

Changed

  • check no longer tests the straight line between two controls against out-of-bounds areas. The warning "the straight leg crosses ..." is gone: WKB26 B 7.2.6 is about the running route, and a straight line over an out-of-bounds area is normal. The rules wkb2026.leg.through_forbidden and wkb2026.leg.through_forbidden_sprint stay in the rule profile and now appear in check --all among the rules that were not checked, until the route analysis exists. If you accepted a finding of these rules, the exception stays valid and shows at most among the acceptances that match no finding. See ADR 0080.
  • The example "Gleisdreieck" is redrafted: 34 minutes, 33 controls, 95 points (before: 33 minutes, 27 controls, 83 points). Six controls of the old version stood in map areas with the symbol 520 (ADR 0082). The good runner is at 94.7 percent, near the target (ADR 0083); check shows four accepted warnings about alike codes. Files, outputs, pictures and the numbers in the READMEs and the manual follow.
  • The example "Rummelsburger Bucht" now has five controls and only straight legs, with no bends and no marked leg. A leg is the straight line from control to control, and bends are the exception. IOF XML, the Purple Pen file, the outputs and both READMEs follow the new course.
  • The screenshots in the manual show the new course. The picture for bends has bends for illustration only, and its caption says so. The findings pictures show three angle hints that came from moved controls in a working copy. The section "Legs and bends" now says that a leg is straight until you bend it.

Fixed

  • score suggest and score draft no longer propose control sites that lie inside or on the edge of a map area with the symbol 520, 709 or 714, nor on the edge of an out-of-bounds special object. Before, a draft on Gleisdreieck had six controls in "do not enter" areas, which check has reported as an error since ADR 0081. Draft and check use the same geometry and the same symbol list (ADR 0082).

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.15.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.15.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.15.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.15.0-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

Full Changelog: v0.14.1...v0.15.0

freemapper-courseplan v0.14.1

Choose a tag to compare

@github-actions github-actions released this 12 Nov 17:13

Added

  • Screenshots in the user manual, chapter 4. Fourteen pictures per language show the editor on the example maps by Remo Madella (Rummelsburger Bucht for the sprint course, Gleisdreieck for the score course): the whole page, a control, a course with its categories, a bent and taped leg, control numbers, control descriptions, a special object, findings, the Event menu, the Purple Pen export dialog, and the Score panel with candidates, a draft and the applied course. The German manual shows the German interface and the English manual the English one. Each caption names the map and points to the ATTRIBUTION.txt of the example.

Fixed

  • Editor: when you select a leg, "Length" now shows the length of that leg. It used to show the length of the whole course.
  • Editor, Score panel: the candidate table fits the panel, and the Accept column is no longer cut off. The note "No free code" appears only when no candidate has a code. If only the rest of the list has none, the rows say so themselves.
  • Editor: the dialog for a new score course is titled "New score course", not "New course".
  • Editor: the status bar stays on one line. A long message ends in an ellipsis and shows in full as a tooltip, and the area above no longer jumps.
  • Editor: the findings drawer covers the properties and map area completely. A strip of the properties pane used to show above it.
  • edit: for undo, redo and quit the server now reads the request body before it answers. Otherwise a client on macOS could now and then see "Connection reset by peer" instead of the answer (ADR 0079).

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.14.1-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.14.1-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.14.1-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.14.1-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

Full Changelog: v0.14.0...v0.14.1

freemapper-courseplan v0.14.0

Choose a tag to compare

@github-actions github-actions released this 12 Nov 15:02

Added

  • Self-update (ADR 0076). freemapper-courseplan update replaces the program in place with the newest signed release, after asking (--check exits with 10 when a newer version exists, --yes, --version X.Y.Z, --rollback, --mode notify|install|off). The release is checked with minisign against a key built into the program, then by SHA-256 of the download and of the unpacked file, and the new file must answer --version before anything is swapped. The old file stays as freemapper-courseplan.previous. A release build looks for a newer version at most once a day, after info and when the editor starts, and prints one line on stderr; the editor shows it in its status bar. The MCP tools check_update and install_update (only with confirm: true) tell the assistant, which asks you first; the first tool result carries a note once. Builds from source never update themselves. The program sends only a fixed User-Agent to the GitHub release servers. The release workflow now signs a manifest with the secrets MINISIGN_SECRET_KEY and MINISIGN_PASSWORD of the environment release; the environment has a required reviewer, so a release asks for approval once, before it is signed and published. Unpacking by hand stays the way to reach the first release with the updater. User manual, chapter 2.
  • Examples on two maps by Remo Madella (MOO Challenge Berlin 2025), who released them on 2026-11-12 for use within the freemapper suite; this is not an open licence (ADR 0077). examples/gleisdreieck holds a 33-minute score course (27 controls, 83 points; the good runner scores 92.8 percent, the very good runner finishes after 96.1 percent of the limit), and examples/rummelsburger-bucht a sprint course with four controls, bends, a marked leg, a first aid post and three accepted hints, with its IOF XML and Purple Pen export. Both come with transcripts and check output in English and German; each folder has an ATTRIBUTION.txt. 45 minutes does not work on either map: the READMEs give the tries and the real limits. The Purple Pen file of the new example has not been opened in Purple Pen.
  • Wider pool of control sites for score courses (ADR 0073). score suggest now also uses the free ends of walls, fences, hedges, step lines, stairways and bridges, path ends and path junctions, bends and edges of paved ground, small buildings, canopies, water banks and more point symbols, each with a clarity that lowers the difficulty and never removes a site. A closed line gives all its corners. A site that cannot be routed no longer removes every site within 100 m, only those within 30 m. On the Lübeck map suggest finds 31 sites instead of 19; on a 1.8 x 2.0 km map of Berlin-Kreuzberg 183 instead of 137. Both maps hold mostly buildings, so the gain is modest; on the Kreuzberg map the draft ends at 13 controls for 30 minutes and 26 to 28 for 45, no longer bound by the pool but by the time of the very good runner.
  • Four distance settings for score courses, in metres on the ground: value1_min_m (150) keeps every control away from start and finish, so value 1 starts there; min_gap_m (100, not lower) is the least distance between two controls and replaces the scale-derived default of score suggest; max_reach_m limits the distance from the start (automatic: a quarter of the ground the good runner covers in the time limit); high_value_gap_m (200) is the least distance between two high-valued controls, the values above 0.6 of the highest. score settings (--value1-min, --min-gap, --max-reach, --auto-reach, --high-value-gap), the tool set_score_settings and the editor's Score panel set them; older project files load with the defaults. The draft keeps the high-value gap, and check warns when a score course falls below either gap (score_min_gap, score_high_gap; ADR 0072).

Fixed

  • score suggest and score draft no longer take the corners of a map frame as sites (ADR 0078). The Gleisdreieck map has a closed rectangle of symbol 501.1 around its content, and a draft used its four corners as controls.
  • score draft and score length (and check) now agree on a set. The same leg time came out a few digits apart depending on the search that made it, and the tour heuristic turned that into another tour: at the start 40,-40 of the Berlin example the draft promised 97 points and 99.8 percent, the applied course gave 96 points and 100.7 percent of the limit. Leg times are now rounded to a millisecond where they are made (ADR 0075).
  • score draft finds a set that meets both bands where one exists, and runs faster (ADR 0074). After the prefix search it now searches locally: it swaps, adds or drops a control, or moves a value up to two steps off its quantile, for at most 150 tour evaluations with the seed of the settings. On a 1.8 x 2.0 km map of Berlin-Kreuzberg every start and limit we tried (30 and 45 minutes, three starts) now meets both bands; before, the good runner landed 0.3 to 3 points above his band every time. The values of a draft are therefore not always exact quantiles. A pool that is too small still fails: on the Lübeck map 30 and 45 minutes give the good runner every point.
  • Faster route searches. The shortest-path search uses A*, one search per control reads its legs to all others, the route-choice searches of score suggest and score draft run on several threads, and the or-opt step of the tour heuristic no longer copies the tour. On the Kreuzberg map the CPU time of score draft fell from 44 to 63 s to 24 to 35 s; most of what is left is the route search of score suggest (ADR 0074).
  • Score suggestions sit less at the rim of the map and closer to the start: the pick spaces sites more densely near the start and weighs down sites at the rim. On the Lübeck example the candidates within 48 m of the rim fell from 21 of 60 to 3, and the value-1 controls moved from 360 m to 230 m from the start (ADR 0071).

Changed

  • The documentation examples examples/luebeck-sprint and examples/berlin-kreuzberg are gone, replaced by the two examples above. The Lübeck project, its Purple Pen and IOF XML exports and its score project stay as test fixtures in tests/fixtures/luebeck-sprint/. The test berlin_score_example_meets_its_bands_and_check_is_quiet became gleisdreieck_score_example_meets_its_bands_and_check_is_quiet.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.14.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.14.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.14.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.14.0-linux-x86_64.tar.gz (ARM: linux-arm64)

The .gz files and freemapper-courseplan-update.json with its signature are for freemapper update.

Full Changelog: v0.13.0...v0.14.0

freemapper-courseplan v0.13.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 19:13

Added

  • The Lübeck example has a score course in a second project file, luebeck-score.courseplan.toml: 9 controls, 25 points, 15 minutes, from score draft, with its transcript, check output, IOF XML, CSV list and evaluation sheet in English and German. A draft at 45 minutes fails because the free codes run out (30 controls at the highest value 5, 54 at 9), not because the map is small; the README says so.
  • score suggest takes --course NAME (tool parameter course): start and finish of that score course. The editor's Suggest sends the selected course; before, it used the first start of the event, which can lie inside a building.
  • A failed draft whose control count is capped by the free codes says so (hint "raise the highest value or free codes") instead of blaming the map.
  • info names controls, points and time limit of a score course. It used to say that the length was not supported.
  • Score courses in the exports. The IOF XML now holds score courses with the value of each control in CourseControl/Score; time limit, penalty and mandatory links sit in an Extensions element, because the schema has no place for them. New export --csv FILE --course NAME writes code, value and position of the controls, and export --sheet FILE --course NAME writes an evaluation sheet with the time limit, the penalty, the rule that the faster runner wins on equal points and the rule that a runner who skips a link is disqualified (tools export_score_csv, export_score_sheet). The Purple Pen export still skips score courses and says so. The IOF XML has not been tried in OE (ADR 0070).
  • The editor draws score courses and has a Score panel: a suggestion with candidate markers and their values, "Accept" for a single candidate, a draft with a length report, "Apply" and a progress line while the program computes. Mandatory links appear as dashed lines between their controls. Candidates and drafts are not saved until you accept or apply them. A long run no longer stops the editor from noticing changes to the file (ADR 0069).
  • score suggest, score draft and score length (tools score_suggest, score_draft, score_length): ranked control sites from the map, a draft of a score course whose length meets the bands of both runner profiles, and the length analysis of an existing course. Only draft --apply writes; it creates the course or replaces the controls of a score course, and the editor can undo it. A draft that misses a band exits with 1 and names each miss and a hint. Sites stay 4 m away from forbidden routes (ADR 0068).
  • Editing score courses on the command line, over MCP and in the editor's operations: course add --kind score --time-limit N, score controls, score value, score link add|remove, score settings and score course set, with the tools add_score_course, set_score_controls, set_control_value, add_score_link, remove_score_link, set_score_settings and set_score_course_details. The code decides a control's value, so a different value is refused. Without a penalty a score course stores none and uses the default (the highest control value, at least value_max); --no-penalty goes back to it. Recoding a control gives it the value of its new code. rename, remove, classes and print scale work on score courses; legs, bends and numbers stay with individual courses (ADR 0067).
  • Score courses: the project has a [score] table with the value range, runner profiles and seed, and a score course can name mandatory links between two controls. Loading a project refuses links to unknown controls, duplicate links and branching chains (ADR 0060).
  • check now checks score courses: value in the code, codes, ring and order of the controls, length, time limit, penalty, mandatory links and mix. Team and relay courses stay skipped (ADR 0066).

Changed

  • Score fixes before the first release: a suggested control always has a route in the tours, a length report never says "inf percent", the speed table treats forest 405 as good running (1.1) and the railway helper 515.1 as no wall, and score suggest shows route choice and difficulty to two decimals and seconds to one. score settings --value-max refuses a value below that of an existing control.
  • Score fixes before the first release: a suggested control always has a route in the tours, a length report never says "inf percent", the speed table treats forest 405 as good running (1.1) and the railway helper 515.1 as no wall, and score suggest shows route choice and difficulty to two decimals and seconds to one. score settings --value-max refuses a value below that of an existing control.
  • The tool descriptions of check and export_iof_xml no longer say that score courses are not checked or written. README, manual, glossary, design and AGENTS.md describe score courses as built.
  • Internal: the map kind, the sidecar reader and the object class now come from freemapper-core v0.19.0 (freemapper-contract) instead of local copies. Names and output stay the same.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.13.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.13.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.13.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.13.0-linux-x86_64.tar.gz (ARM: linux-arm64)

Full Changelog: v0.12.0...v0.13.0

freemapper-courseplan v0.12.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 09:15

Added

  • list controls|courses|specials|classes list the details of a project as a table, and map extent and map near --at X,Y --radius MM report the map extent and the map objects near a point. With --json each prints the answer of the matching MCP tool unchanged (ADR 0059). event start-window --none removes the start window, as set_start_window with no_start_window does.

Changed

  • AGENTS.md puts the command line first and MCP second. An assistant that can run commands needs fewer turns; MCP stays for assistants without a shell, such as Claude Desktop. The command line section points to --help, names output and exit codes, says that edit blocks, and lists what the command line cannot do compared with the MCP tools.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.12.0-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.12.0-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.12.0-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.12.0-linux-x86_64.tar.gz (ARM: linux-arm64)

Full Changelog: v0.11.1...v0.12.0

freemapper-courseplan v0.11.1

Choose a tag to compare

@github-actions github-actions released this 11 Nov 08:41

Changed

  • freemapper-core 0.16.1. The shared placement cases use the renderer's number box (0.8083747 x height x digits) and pass without exceptions.
  • At scales the standard does not foresee (a sprint map at 1:5000, for example), the course symbols keep their base size, as in freemapper-print (ADR 0058). The overlay, the print preview, the placement and the checks measure with the same factor; circles used to shrink to 4.8 mm there. The check notes on such maps that the course is only fit for training.

Download the archive for your system, unpack it and start freemapper-courseplan
(Windows: freemapper-courseplan.exe) from a terminal or register it with your AI assistant.
Installation and first steps: see README.md (Deutsch) / README.en.md (English) in the
archive or https://github.com/HenryJobst/freemapper-courseplan#readme

  • Windows: freemapper-courseplan-v0.11.1-windows-x86_64.zip
  • macOS Apple Silicon (M1 and newer): freemapper-courseplan-v0.11.1-macos-arm64.tar.gz
  • macOS Intel: freemapper-courseplan-v0.11.1-macos-x86_64.tar.gz
  • Linux: freemapper-courseplan-v0.11.1-linux-x86_64.tar.gz (ARM: linux-arm64)

Full Changelog: v0.11.0...v0.11.1