{"abstract":"BYSETPOS=1 selects the second weekday of the month.","category":"Calendar recurrence rules","checks":7,"contract":"FREQ=MONTHLY;BYDAY=<weekdays>;BYSETPOS=<positions>. For each month from the dtstart month, the candidate set is every day of the whole month whose weekday is listed, in date order. Positions are 1-based, negative from the end; out-of-range positions are ignored and positions naming the same day yield it once. Selected days are emitted chronologically; days before dtstart are dropped after selection. Return the first count ISO dates.","contract_signature":"dtstart, weekdays, setpos, count","evaluation_group":"w2-calendar-recurrence-rules-monthly-bysetpos","failed_approach":"The partial repair `p - 1 if p > 0 else len(cand) + p - 1` fixes positive positions but shifts negative positions one day earlier.","family":"w2-calendar-recurrence-rules-monthly-bysetpos-position-index","id":"FA-76921","implementations":{"attempt":{"sha256":"c1fb9e3dec33d69fa4745bc5a40534354cc4c1d5466d0a84467bad9b7e4a956e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, weekdays, setpos, count):\n    start = dt.date.fromisoformat(dtstart)\n    out = []\n    for k in range(240):\n        mi = start.month - 1 + k\n        y, m = start.year + mi // 12, mi % 12 + 1\n        dim = calendar.monthrange(y, m)[1]\n        cand = [x for x in [dt.date(y, m, d) for d in range(1, dim + 1)] if x.weekday() in weekdays and x >= dt.date(y, m, 1)]\n        picked = []\n        for p in setpos:\n            idx = p - 1 if p > 0 else len(cand) + p - 1\n            if 0 <= idx < len(cand) and cand[idx] not in picked:\n                picked.append(cand[idx])\n        for d in sorted(picked):\n            if d < start:\n                continue\n            out.append(d.isoformat())\n            if len(out) >= count:\n                return out\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: last weekday of month',\n   ['2024-01-01', [0, 1, 2, 3, 4], [-1], 4],\n   ['2024-01-31', '2024-02-29', '2024-03-29', '2024-04-30']),\n  ('first weekday, dtstart mid-month',\n   ['2024-01-10', [0, 1, 2, 3, 4], [1], 3],\n   ['2024-02-01', '2024-03-01', '2024-04-01']),\n  ('first and last in reverse order',\n   ['2024-03-01', [0, 1, 2, 3, 4], [-1, 1], 4],\n   ['2024-03-01', '2024-03-29', '2024-04-01', '2024-04-30']),\n  ('coinciding positions',\n   ['2024-01-01', [0], [1, -5], 4],\n   ['2024-01-01', '2024-02-05', '2024-03-04', '2024-04-01']),\n  ('three positions with repeat',\n   ['2024-04-01', [2], [1, -1, -5], 5],\n   ['2024-04-03', '2024-04-24', '2024-05-01', '2024-05-29', '2024-06-05']),\n  ('out of range negative', ['2024-01-01', [5, 6], [-7, 1], 3], ['2024-01-06', '2024-01-07', '2024-02-03']),\n  ('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30'])],\n [('first and last in reverse order',\n   ['2024-03-01', [0, 1, 2, 3, 4], [-1, 1], 4],\n   ['2024-03-01', '2024-03-29', '2024-04-01', '2024-04-30']),\n  ('coinciding positions',\n   ['2024-01-01', [0], [1, -5], 4],\n   ['2024-01-01', '2024-02-05', '2024-03-04', '2024-04-01']),\n  ('three positions with repeat',\n   ['2024-04-01', [2], [1, -1, -5], 5],\n   ['2024-04-03', '2024-04-24', '2024-05-01', '2024-05-29', '2024-06-05']),\n  ('out of range negative', ['2024-01-01', [5, 6], [-7, 1], 3], ['2024-01-06', '2024-01-07', '2024-02-03']),\n  ('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30']),\n  ('second weekend day', ['2024-06-15', [5, 6], [2], 3], ['2024-07-07', '2024-08-04', '2024-09-07']),\n  ('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27'])],\n [('three positions with repeat',\n   ['2024-04-01', [2], [1, -1, -5], 5],\n   ['2024-04-03', '2024-04-24', '2024-05-01', '2024-05-29', '2024-06-05']),\n  ('out of range negative', ['2024-01-01', [5, 6], [-7, 1], 3], ['2024-01-06', '2024-01-07', '2024-02-03']),\n  ('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30']),\n  ('second weekend day', ['2024-06-15', [5, 6], [2], 3], ['2024-07-07', '2024-08-04', '2024-09-07']),\n  ('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27']),\n  ('position 3 of TU,TH mid month',\n   ['2024-09-12', [1, 3], [3, -1], 4],\n   ['2024-09-26', '2024-10-08', '2024-10-31', '2024-11-12']),\n  ('december rollover',\n   ['2024-12-01', [4], [1, -1], 4],\n   ['2024-12-06', '2024-12-27', '2025-01-03', '2025-01-31'])],\n [('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30']),\n  ('second weekend day', ['2024-06-15', [5, 6], [2], 3], ['2024-07-07', '2024-08-04', '2024-09-07']),\n  ('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27']),\n  ('position 3 of TU,TH mid month',\n   ['2024-09-12', [1, 3], [3, -1], 4],\n   ['2024-09-26', '2024-10-08', '2024-10-31', '2024-11-12']),\n  ('december rollover',\n   ['2024-12-01', [4], [1, -1], 4],\n   ['2024-12-06', '2024-12-27', '2025-01-03', '2025-01-31']),\n  ('dtstart equals picked day', ['2024-05-31', [0, 1, 2, 3, 4], [-1], 2], ['2024-05-31', '2024-06-28']),\n  ('regression: last weekday of month',\n   ['2024-01-01', [0, 1, 2, 3, 4], [-1], 4],\n   ['2024-01-31', '2024-02-29', '2024-03-29', '2024-04-30'])],\n [('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27']),\n  ('position 3 of TU,TH mid month',\n   ['2024-09-12', [1, 3], [3, -1], 4],\n   ['2024-09-26', '2024-10-08', '2024-10-31', '2024-11-12']),\n  ('december rollover',\n   ['2024-12-01', [4], [1, -1], 4],\n   ['2024-12-06', '2024-12-27', '2025-01-03', '2025-01-31']),\n  ('dtstart equals picked day', ['2024-05-31', [0, 1, 2, 3, 4], [-1], 2], ['2024-05-31', '2024-06-28']),\n  ('regression: last weekday of month',\n   ['2024-01-01', [0, 1, 2, 3, 4], [-1], 4],\n   ['2024-01-31', '2024-02-29', '2024-03-29', '2024-04-30']),\n  ('first weekday, dtstart mid-month',\n   ['2024-01-10', [0, 1, 2, 3, 4], [1], 3],\n   ['2024-02-01', '2024-03-01', '2024-04-01']),\n  ('first and last in reverse order',\n   ['2024-03-01', [0, 1, 2, 3, 4], [-1, 1], 4],\n   ['2024-03-01', '2024-03-29', '2024-04-01', '2024-04-30'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"104534bce370a7183ce24e8b24bcb970950091b9d4a6e477af89120bca266aaa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, weekdays, setpos, count):\n    start = dt.date.fromisoformat(dtstart)\n    out = []\n    for k in range(240):\n        mi = start.month - 1 + k\n        y, m = start.year + mi // 12, mi % 12 + 1\n        dim = calendar.monthrange(y, m)[1]\n        cand = [x for x in [dt.date(y, m, d) for d in range(1, dim + 1)] if x.weekday() in weekdays and x >= dt.date(y, m, 1)]\n        picked = []\n        for p in setpos:\n            idx = p if p > 0 else len(cand) + p\n            if 0 <= idx < len(cand) and cand[idx] not in picked:\n                picked.append(cand[idx])\n        for d in sorted(picked):\n            if d < start:\n                continue\n            out.append(d.isoformat())\n            if len(out) >= count:\n                return out\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: last weekday of month',\n   ['2024-01-01', [0, 1, 2, 3, 4], [-1], 4],\n   ['2024-01-31', '2024-02-29', '2024-03-29', '2024-04-30']),\n  ('first weekday, dtstart mid-month',\n   ['2024-01-10', [0, 1, 2, 3, 4], [1], 3],\n   ['2024-02-01', '2024-03-01', '2024-04-01']),\n  ('first and last in reverse order',\n   ['2024-03-01', [0, 1, 2, 3, 4], [-1, 1], 4],\n   ['2024-03-01', '2024-03-29', '2024-04-01', '2024-04-30']),\n  ('coinciding positions',\n   ['2024-01-01', [0], [1, -5], 4],\n   ['2024-01-01', '2024-02-05', '2024-03-04', '2024-04-01']),\n  ('three positions with repeat',\n   ['2024-04-01', [2], [1, -1, -5], 5],\n   ['2024-04-03', '2024-04-24', '2024-05-01', '2024-05-29', '2024-06-05']),\n  ('out of range negative', ['2024-01-01', [5, 6], [-7, 1], 3], ['2024-01-06', '2024-01-07', '2024-02-03']),\n  ('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30'])],\n [('first and last in reverse order',\n   ['2024-03-01', [0, 1, 2, 3, 4], [-1, 1], 4],\n   ['2024-03-01', '2024-03-29', '2024-04-01', '2024-04-30']),\n  ('coinciding positions',\n   ['2024-01-01', [0], [1, -5], 4],\n   ['2024-01-01', '2024-02-05', '2024-03-04', '2024-04-01']),\n  ('three positions with repeat',\n   ['2024-04-01', [2], [1, -1, -5], 5],\n   ['2024-04-03', '2024-04-24', '2024-05-01', '2024-05-29', '2024-06-05']),\n  ('out of range negative', ['2024-01-01', [5, 6], [-7, 1], 3], ['2024-01-06', '2024-01-07', '2024-02-03']),\n  ('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30']),\n  ('second weekend day', ['2024-06-15', [5, 6], [2], 3], ['2024-07-07', '2024-08-04', '2024-09-07']),\n  ('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27'])],\n [('three positions with repeat',\n   ['2024-04-01', [2], [1, -1, -5], 5],\n   ['2024-04-03', '2024-04-24', '2024-05-01', '2024-05-29', '2024-06-05']),\n  ('out of range negative', ['2024-01-01', [5, 6], [-7, 1], 3], ['2024-01-06', '2024-01-07', '2024-02-03']),\n  ('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30']),\n  ('second weekend day', ['2024-06-15', [5, 6], [2], 3], ['2024-07-07', '2024-08-04', '2024-09-07']),\n  ('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27']),\n  ('position 3 of TU,TH mid month',\n   ['2024-09-12', [1, 3], [3, -1], 4],\n   ['2024-09-26', '2024-10-08', '2024-10-31', '2024-11-12']),\n  ('december rollover',\n   ['2024-12-01', [4], [1, -1], 4],\n   ['2024-12-06', '2024-12-27', '2025-01-03', '2025-01-31'])],\n [('out of range positive', ['2024-02-01', [0], [5], 3], ['2024-04-29', '2024-07-29', '2024-09-30']),\n  ('second weekend day', ['2024-06-15', [5, 6], [2], 3], ['2024-07-07', '2024-08-04', '2024-09-07']),\n  ('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27']),\n  ('position 3 of TU,TH mid month',\n   ['2024-09-12', [1, 3], [3, -1], 4],\n   ['2024-09-26', '2024-10-08', '2024-10-31', '2024-11-12']),\n  ('december rollover',\n   ['2024-12-01', [4], [1, -1], 4],\n   ['2024-12-06', '2024-12-27', '2025-01-03', '2025-01-31']),\n  ('dtstart equals picked day', ['2024-05-31', [0, 1, 2, 3, 4], [-1], 2], ['2024-05-31', '2024-06-28']),\n  ('regression: last weekday of month',\n   ['2024-01-01', [0, 1, 2, 3, 4], [-1], 4],\n   ['2024-01-31', '2024-02-29', '2024-03-29', '2024-04-30'])],\n [('second to last weekday',\n   ['2024-07-01', [0, 1, 2, 3, 4], [-2], 3],\n   ['2024-07-30', '2024-08-29', '2024-09-27']),\n  ('position 3 of TU,TH mid month',\n   ['2024-09-12', [1, 3], [3, -1], 4],\n   ['2024-09-26', '2024-10-08', '2024-10-31', '2024-11-12']),\n  ('december rollover',\n   ['2024-12-01', [4], [1, -1], 4],\n   ['2024-12-06', '2024-12-27', '2025-01-03', '2025-01-31']),\n  ('dtstart equals picked day', ['2024-05-31', [0, 1, 2, 3, 4], [-1], 2], ['2024-05-31', '2024-06-28']),\n  ('regression: last weekday of month',\n   ['2024-01-01', [0, 1, 2, 3, 4], [-1], 4],\n   ['2024-01-31', '2024-02-29', '2024-03-29', '2024-04-30']),\n  ('first weekday, dtstart mid-month',\n   ['2024-01-10', [0, 1, 2, 3, 4], [1], 3],\n   ['2024-02-01', '2024-03-01', '2024-04-01']),\n  ('first and last in reverse order',\n   ['2024-03-01', [0, 1, 2, 3, 4], [-1, 1], 4],\n   ['2024-03-01', '2024-03-29', '2024-04-01', '2024-04-30'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Stipulated, bounded recurrence-expansion model evaluated offline on explicit fixtures; it is not a complete iCalendar implementation and makes no claim of standards conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-calendar-recurrence-rules-monthly-bysetpos-position-index","generated_at":"2026-09-29T14:49:20.635182+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Recurring calendar series are expanded into concrete instances for display, reminders and conflict checks.","root_cause":"Positive positions are used as zero-based indexes.","sha256":"cd73eadb06ca682854f5f6f3cbc98457fdc8da106a715ed64dc90749c2f23c30","title":"Monthly BYSETPOS selection from a weekday set: position index · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.639,"exit_code":1,"observations":[{"actual":["2024-01-30","2024-02-28","2024-03-28","2024-04-29"],"check":"regression: last weekday of month","expected":["2024-01-31","2024-02-29","2024-03-29","2024-04-30"],"passed":false},{"actual":["2024-02-01","2024-03-01","2024-04-01"],"check":"first weekday, dtstart mid-month","expected":["2024-02-01","2024-03-01","2024-04-01"],"passed":true},{"actual":["2024-03-01","2024-03-28","2024-04-01","2024-04-29"],"check":"first and last in reverse order","expected":["2024-03-01","2024-03-29","2024-04-01","2024-04-30"],"passed":false},{"actual":["2024-01-01","2024-02-05","2024-03-04","2024-04-01"],"check":"coinciding positions","expected":["2024-01-01","2024-02-05","2024-03-04","2024-04-01"],"passed":true},{"actual":["2024-04-03","2024-04-17","2024-05-01","2024-05-22","2024-06-05"],"check":"three positions with repeat","expected":["2024-04-03","2024-04-24","2024-05-01","2024-05-29","2024-06-05"],"passed":false},{"actual":["2024-01-06","2024-02-03","2024-03-02"],"check":"out of range negative","expected":["2024-01-06","2024-01-07","2024-02-03"],"passed":false},{"actual":["2024-04-29","2024-07-29","2024-09-30"],"check":"out of range positive","expected":["2024-04-29","2024-07-29","2024-09-30"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: last weekday of month\", \"actual\": [\"2024-01-30\", \"2024-02-28\", \"2024-03-28\", \"2024-04-29\"], \"expected\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-29\", \"2024-04-30\"], \"passed\": false}, {\"check\": \"first weekday, dtstart mid-month\", \"actual\": [\"2024-02-01\", \"2024-03-01\", \"2024-04-01\"], \"expected\": [\"2024-02-01\", \"2024-03-01\", \"2024-04-01\"], \"passed\": true}, {\"check\": \"first and last in reverse order\", \"actual\": [\"2024-03-01\", \"2024-03-28\", \"2024-04-01\", \"2024-04-29\"], \"expected\": [\"2024-03-01\", \"2024-03-29\", \"2024-04-01\", \"2024-04-30\"], \"passed\": false}, {\"check\": \"coinciding positions\", \"actual\": [\"2024-01-01\", \"2024-02-05\", \"2024-03-04\", \"2024-04-01\"], \"expected\": [\"2024-01-01\", \"2024-02-05\", \"2024-03-04\", \"2024-04-01\"], \"passed\": true}, {\"check\": \"three positions with repeat\", \"actual\": [\"2024-04-03\", \"2024-04-17\", \"2024-05-01\", \"2024-05-22\", \"2024-06-05\"], \"expected\": [\"2024-04-03\", \"2024-04-24\", \"2024-05-01\", \"2024-05-29\", \"2024-06-05\"], \"passed\": false}, {\"check\": \"out of range negative\", \"actual\": [\"2024-01-06\", \"2024-02-03\", \"2024-03-02\"], \"expected\": [\"2024-01-06\", \"2024-01-07\", \"2024-02-03\"], \"passed\": false}, {\"check\": \"out of range positive\", \"actual\": [\"2024-04-29\", \"2024-07-29\", \"2024-09-30\"], \"expected\": [\"2024-04-29\", \"2024-07-29\", \"2024-09-30\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.276,"exit_code":1,"observations":[{"actual":["2024-01-31","2024-02-29","2024-03-29","2024-04-30"],"check":"regression: last weekday of month","expected":["2024-01-31","2024-02-29","2024-03-29","2024-04-30"],"passed":true},{"actual":["2024-02-02","2024-03-04","2024-04-02"],"check":"first weekday, dtstart mid-month","expected":["2024-02-01","2024-03-01","2024-04-01"],"passed":false},{"actual":["2024-03-04","2024-03-29","2024-04-02","2024-04-30"],"check":"first and last in reverse order","expected":["2024-03-01","2024-03-29","2024-04-01","2024-04-30"],"passed":false},{"actual":["2024-01-01","2024-01-08","2024-02-12","2024-03-11"],"check":"coinciding positions","expected":["2024-01-01","2024-02-05","2024-03-04","2024-04-01"],"passed":false},{"actual":["2024-04-10","2024-04-24","2024-05-01","2024-05-08","2024-05-29"],"check":"three positions with repeat","expected":["2024-04-03","2024-04-24","2024-05-01","2024-05-29","2024-06-05"],"passed":false},{"actual":["2024-01-07","2024-02-04","2024-03-03"],"check":"out of range negative","expected":["2024-01-06","2024-01-07","2024-02-03"],"passed":false},{"actual":[],"check":"out of range positive","expected":["2024-04-29","2024-07-29","2024-09-30"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: last weekday of month\", \"actual\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-29\", \"2024-04-30\"], \"expected\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-29\", \"2024-04-30\"], \"passed\": true}, {\"check\": \"first weekday, dtstart mid-month\", \"actual\": [\"2024-02-02\", \"2024-03-04\", \"2024-04-02\"], \"expected\": [\"2024-02-01\", \"2024-03-01\", \"2024-04-01\"], \"passed\": false}, {\"check\": \"first and last in reverse order\", \"actual\": [\"2024-03-04\", \"2024-03-29\", \"2024-04-02\", \"2024-04-30\"], \"expected\": [\"2024-03-01\", \"2024-03-29\", \"2024-04-01\", \"2024-04-30\"], \"passed\": false}, {\"check\": \"coinciding positions\", \"actual\": [\"2024-01-01\", \"2024-01-08\", \"2024-02-12\", \"2024-03-11\"], \"expected\": [\"2024-01-01\", \"2024-02-05\", \"2024-03-04\", \"2024-04-01\"], \"passed\": false}, {\"check\": \"three positions with repeat\", \"actual\": [\"2024-04-10\", \"2024-04-24\", \"2024-05-01\", \"2024-05-08\", \"2024-05-29\"], \"expected\": [\"2024-04-03\", \"2024-04-24\", \"2024-05-01\", \"2024-05-29\", \"2024-06-05\"], \"passed\": false}, {\"check\": \"out of range negative\", \"actual\": [\"2024-01-07\", \"2024-02-04\", \"2024-03-03\"], \"expected\": [\"2024-01-06\", \"2024-01-07\", \"2024-02-03\"], \"passed\": false}, {\"check\": \"out of range positive\", \"actual\": [], \"expected\": [\"2024-04-29\", \"2024-07-29\", \"2024-09-30\"], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}